The Lo-Fi Orchestra Explainer

I’ve had a few queries asking what some of the different sections of the Lo-Fi Orchestra are and whilst there is a bit of explanation in the post Introducing the Arduino Lo-Fi Orchestra! it doesn’t really break down the projects in an easy to see way.  And the orchestra as grown a little since then too.  So this post attempts to pull apart the different projects of the Lo-Fi Orchestra to give you a bit more of an idea how it all works.

Update: You can now read the New Lo-Fi Orchestra Explainer to hear how it has been rebuilt for more reliability with keeping all the same underlying projects and unique Lo-Fi sounds!

Lo-Fi Orchestra

If you’d like to hear the whole thing in action, then I’d recommend taking a look at the following recordings:

This Twitter thread lists all performances from 2021, and this playlist contains the whole lot!

Now lets meet each section in turn!

Arduino Tones – MIDI Channel 1

Arduino Tones

The first section of the Lo-Fi Orchestra is four Arduino Nanos connected to a speaker each for playing simple square wave tones.  These tend to be used for “brass” type parts.  You can hear them pretty well in the fanfares that open the Procession of the Nobles.

These all share a single RX link from the central MIDI distribution, but only react to MIDI channel 1.  Each Arduino can only play one tone, but by daisy-chaining the RX/TX links when a new note comes in, if the receiving Arduino is already playing a tone, the message is passed on to the next one.  This way four-note polyphony is possible. In theory, adding more Arduinos and speakers could give more (something I used here).

The basic operating principles can be found here: Arduino Note Generator and full details of the setup as used in the Lo-Fi Orchestra can be found here: Arduino Multi MIDI Tone Module.

If you are interested in going further with Arduino tones, see:

Basic Digital Synthesis – MIDI Channels 2 and 3

Mozzi PWM and R2R

The two main boards in this photo are:

The R2R Digital audio (right) is a home-made “R2R” ladder circuit on an Arduino Uno.  This provides a simple 8-bit digital to analog converter on Arduino D2-D9 ideal for showing how wave-table based direct digital synthesis works.  The potentiometers are there for some experiments but aren’t used in the Lo-Fi Orchestra.  Instead the parameters are fixed to give quite a pure sound.  Each of these is monophonic.

The PWM Mozzi synthesis (centre) is an Arduino Pro Micro sitting on the MozziByte Output Board which provides the audio output.  Mozzi is an extensive synthesis library that is used in many projects on this site.  This particular build is simply using one of the demonstration examples to generate a relatively pure pulse-width modulated (PWM) output on the Arduino D9 pin.

These two boards are usually given woodwind parts, especially flutes.  They are connected to one of my Arduino MIDI Filter boards which ensures that only data for MIDI channels 2 and 3 are passed on to prevent swamping the processing power of the boards.  You can hear them quite well in the opening tune of the Serenade and the opening of Venus from The Planets.  They also feature prominently in the scalic runs in the Sky Toccata!

The audio outputs are passed into my cheap mixers.

Full details are provided on the above links.  For taking this further, explore the Mozzi category on my blog and see the Mozzi projects coming up next!.

Mozzi FM Synthesizer – MIDI Channels 4 and 5

Mozzi FM Synth

These two boards, the Nano at the top and Uno in the centre, are also using the Mozzi synthesis library, in this case utilising frequency modulation (FM) synthesis.  They are both running the same sketch with a fixed set of synthesis parameters, only differing by which MIDI channel they respond to.  Once again each of these is monophonic.  Typically these two boards are used for middle woodwind, such as clarinet or saxophone, or sometimes horn parts.  There have been two versions used in the orchestra.  The first, a more harsh one, you can hear in the main tune from Good Omens and Goldeneye, and the softer one in the opening, rocking chords for Saturn from The Planets.

The Uno at the bottom is the Arduino MIDI Filter I mentioned previously.  It is filtering out all but MIDI note traffic on channels 2 to 5 and it’s TX output is directly connected to the RX pins of the four receiving Arduinos.

You can also see my Mozzi Output Circuit in the diy builds for the Nano and Uno.  This is a simple passive filter that makes the audio output a lot more “line level” friendly. The audio output of these boards also goes into the mixer.

You can read about the core principles behind these projects here: Arduino Multi-pot Mozzi FM Synthesis.  But as I say, each sketch has been built with a fixed set of synthesis parameters rather than using potentiometers.

If you are interested in exploring these further, grab some potentiometers and look at Arduino FM MIDI Synthesis with Mozzi.

Mozzi String Synthesis – MIDI Channels 11 to 14

Mozzi Strings

Mozzi has many synthesis modes.  The previous projects looked at FM synthesis.  This project relies on additive synthesis.  With additive synthesis various waveforms are combined in specific ratios of frequencies to create more complex waveforms.  Once again, this project utilises a fixed configuration of synthesis parameters which I tend to use for string parts.  You can hear them in action in Palladio and quite a lot in the Dance of the Tumblers,  but I think their best moment is the opening to Jupiter from The Planets.

Rather than use a “daisy chaining” approach, as I did with the tones, these boards are configured for a specific MIDI channel each.  Once again I’ve put a MIDI filter on the front to ensure that only note message for these specific channels are actually passed on.  Each is monophonic, but with four it’s not a bad string section.  This is one group that could really do with a couple of more notes, but I’ll have to rethink the MIDI channel allocations as I’ve now run out 🙂

The outputs are combined via a Simple Passive Audio Mixer into a single audio output which is then sent on to the main mixer.

For details of the specific set up used with the Lo-Fi Orchestra, see Arduino Multi Mozzi String Synth – Part 2.  For the specific principles used for the sound generation, see Arduino Mozzi Additive Synthesis.

Relay Servo Drumkit – MIDI Channel 10

Relay Servo Drumkit

When I need some percussion, I use my Arduino MIDI Relay Servo Drumkit.  This is an Arduino Uno clone (far left) that has extra IO pins that makes adding relays and servos particularly easy.  It is using the home-made MIDI In-Out Half-Shield.

The relays’ clicking provides the “drums”.  There is a single relay that is mapped to “snares”.  Another acoustically connected (using bluetack!) to a Pringles can for mid-sounds like toms, and two relays attached to a large tub for a bass drum “kick”.  For a good demonstration of their use as a kit, listen to the Sky Toccata or John Miles Music or any of the ELO Concerto for a Rainy Day.  To hear them in a more orchestral setting, try Ravel’s Bolero or the March to the Scaffold.

The servos are used whenever I need cymbals.  I’ve used three different arms, but to be honest, they mostly sound the same!  Again you can hear them best in the Sky Toccata.

VS1053 MP3 Shields – MIDI Channels 6, 7, 9

Arduino VS1053Adafruit Feather

I have two actual synthesizer modules in the Lo-Fi Orchestra, both based on the VS1053 chip.  This is often sold as an “MP3 player” device, but it can also play MIDI files.  And if you configure it appropriately it will take a MIDI IN feed and act as a General MIDI sound module with a complete range of built-in voices.

The first instance (on the left) is a cheap VS1053 shield for an Arduino Uno, used here in conjunction with an off-the-shelf MIDI shield.  The second instance (on the right) is the Adafruit MusicMaker Wing for its 32u4 Feather board.  This is also used with the Adafruit MIDI wing and a Charlieplexed LED display.

The VS1053 shield listens on MIDI channels 6 and 7 and is configured for a bass guitar and acoustic guitar.  The bass is used as a double bass in all the orchestral pieces.  I tend to use the acoustic guitar for things like harp sounds too.  To hear the guitar, listen out for the Guitar solo in Mr Blue Sky and to hear it in “harp” mode, try MercurySaturn or Neptune.

The Feather listens on MIDI channel 9 and is usually configured for some kind of tuned percussion – usually a xylophone or glockenspiel.  This is also often used for any kind of “bell” type sound or in one case, as a celeste which you can hear quite well in Neptune from The Planets.  A good one for the glock is the Liberty Bell.

Both of these have a high degree of polyphony which is very useful for the classical pieces.

You can find out the specific details of these projects here:

To go further with the VS1053, also take a look at Arduino MIDI VS1003 or VS1053 Synth.

MT32-Pi – MIDI Channel 8

MT32-Pi

If I need something a bit more specific then I might bring out my Raspberry Pi, Clumsy MIDI and MT32-Pi.  You can hear this (on MIDI Channel 8) playing Timpani for example in several performances, most prominently in Jupiter, Uranus and Thunderbirds!  I also used it for the voices in Neptune.

In this instance I’ve also added a MT32 Clumsy MIDI Simple MIDI Filter to ensure that it only receives MIDI traffic on channel 8 to stop it responding to other parts!  This is very under-utilised at present though, but also, over using it does seem a little like “cheating” 🙂

I tend to run my MT32-Pi in general synthesizer mode where it is running a Fluidsynth General MIDI soundfont.  Although the Clumsy MIDI board can accept 5-pin MIDI DIN, here it is getting a MIDI feed from the same MIDI RX distribution point as everything else.  This is a 5V TTL serial signal that goes into the Pro-Micro based (5V) MIDI filter circuit.

I also tend to give the audio output of the MT32-Pi an amp of its own.  Mostly due to the fact I’ve used all the channels on my simple mixer!

MIDI Monitors – All Channels

MIDI Monitors

This is all well and good, but when it is up and running, to be honest, there isn’t actually much to look at!  So having a couple of simple MIDI visualisations is a useful addition to the orchestra and brings some it a bit more “to life”.

Some of the interesting ones to watch the visualisations to include Jupiter (especially the finale), the Sky Toccata (the runs in the flutes), and the Bolero (for the parallel, polytonal tunes).

The orchestra has the following attached:

If you want to get more into MIDI visualisations, then explore the MIDI monitor category on this site.

Routing MIDI and Audio

Finally, I want to spend a minute showing how the MIDI and audio are routed around the Orchesrtra.

LoFiOrchestra - MIDI Path

MIDI comes in via the green link, which is a MIDI IN link from a PC, usually my Roland UM-ONE.  There is then a simple opto-isolated MIDI IN circuit that outputs TTL (5V) serial MIDI which is then distributed to most of the rest of the orchestra – follow the narrow red lines.

There is a 5-pin MIDI socket though that provides an “OUT” (well, technically it is a THRU) which goes into the other 5-pin DIN boards (the thick red lines) in the following chain:

  • MIDI IN interface -> VS1053 COTS MIDI IN
  • VS1053 COTS MIDI THRU -> Drumkit MIDI IN
  • Drumkit MIDI OUT -> Adafruit Feather MIDI IN

I can do this as the MIDI library running on the drumkit board has “software MIDI THRU” by default which automatically echoes everything from the MIDI IN back to the MIDI OUT.  The COTS shield as a genuine MIDI THRU.

The yellow links show “filtered MIDI connections” of some sort.  These are present in the daisy-chained Arudino tone modules (CH 1); the string synth (CH 11-14); and the Mozzi synths (CH 2-5).

As noted in the text above, only the following have any polyphony: VS1053, Feather, MT32-Pi, and the percussion of course.  All the rest are monophonic – generally one note per Arduino, but they could be expanded in theory by adding more Arduinos, but this is the point where I need to get more creative with MIDI channel usage.

This all works but is quite sub-optimal. Ideally I’d have opto-coupled MIDI links throughout, but I can sort of get away with tying all the Arduino RX pins together like this, all being driven from that single opto-isolator.  But it isn’t particularly robust and it is prone to noise and interference on the audio links.  But then its the Lo-Fi Orchestra…

Talking of audio…

LoFiOrchestra - Audio Path

Audio routing is slightly easier.  Either the devices are producing their own sounds, such as the Arduino tones with their own speakers, or the servo and relay drumkit; or they are mostly directly connected in to a cheap mixer.

I have two four-channel mixers, with the output from one going to one of the inputs on the other.  This gives me seven audio channels, mixed into a single output which goes off to an old stereo system for amplification.

Mixing

The one odd-one-out is the MT32-Pi. Ideally this would go into the mixer too, but I don’t have a spare channel so for any extras like this, I’ll just dig out another amp and plug it in directly.

In an ideal world, I’d have a multi-audio-channel link into some kind of digital audio workstation for some proper mixing.  Instead, what you get is a “live” version where a single microphone hangs down over the speaker end of the orchestra and I do a simple balancing of the amplified signals and the self-produced signals for a single video take. It’s crude, it’s definitely Lo-Fi, but it’s simple.

So what of the Future?

The whole point of the Lo-Fi Orchestra is simply to show the various projects working in a way that is slightly more interesting than me sending them a few notes from a diy, converted keyboard.  It was never designed for any kind of high quality musical output.

But the projects and developments are not standing still.

I’ve experimented with alternative MIDI distribution options, but I’m not quite ready to rebuild the orchestra just yet.

I’d also like to take more advantage of alternative microcontrollers and boards.  The Raspberry Pi Pico looks especially promising for more tones, advanced visualisations or more advanced MIDI routing capabilities.

There are also many more pieces I’d like to programme up for the orchestra to perform.

So in conclusion there is plenty of scope for the orchestra to keep evolving.  Watch this space.

Kevin

Leave a comment