MIDI is normally baked into the chipset of a synthesizer, or something you use a microcontroller to handle. But that’s not the only way to speak the language! [Kevin] decided to have some fun doing MIDI with discrete logic instead, with some pretty neat results.
[Kevin] had previously built a control voltage step sequencer called the Baby8, which relied on 4017 counter ICs. He later realized he could repurpose three of his old Baby8 PCBs to create something that could generate MIDI using nothing more than discrete logic. The stack of three boards generate a simple MIDI message—in this case, a two-byte Program Change command. At 8 bits per byte, plus a start and stop bit, that comes out to 20 bits in total. The bits to be sent are configured via the switches on the PCBs, and clocked out through the counter ICs via a clock running at the MIDI baud rate of 31,250 Hz.
Obviously, it’s not very practical to code your MIDI commands manually via DIP switches and then clock them out in this fashion. But—it does work, and you can do it! If you wanted to build an old-school logic circuit that just spits out simple short MIDI commands, this is one way to go about it.
We’ve seen [Kevin]’s work before, too, like this neat musical rotary phone build.
Let’s make this interesting. All you need are three big buttons and a microcontroller. In any state, one button does nothing and the other two if pressed randomizes the midi settings and the roles of the buttons. Unlimited fun!
Taking a cpu out of the equation is an improvement. Less power required, and if the clock is stable it will automatically be better than sysex via USB. I would honestly purchase something like this if it sent midi clock signals.
Processing MIDI in hardware is much more practical than you might think. MIDI is terribly slow by modern standards, and microcontrollers (e.g. AT-family Arduinos) can introduce audible delays and jitter (e.g. from interrupt routines). So if you want a rhythmically spot-on MIDI sequencer or a low-latency filter/router, then using an FPGA (or discrete logic) is a great approach. A microprocessor’s hardware serial-port has to wait for an entire byte to arrive before the software even sees it, whereas an FPGA can start transmitting output data before the input is finished arriving. Consider a simple octave transposer: MIDI is least-significant bit first, so as your FPGA receives a note-on message, it can use a bit-serial adder to increment the note number by 12 while the original note is being read!, and transmit the transposed note just one bit later (instead of 10 to 30 bits later). At MIDI’s 31,250 baud, that can make a big difference, especially for phat chords or symphonic arrangements.
Would FPGA be equivalent to the circuit it emulates? Alsp the serial ports data rate is perfectlt sufficient, serial MIDI in my use seems to drop clock messages less than 1% of the time, whereas USB MIDI drops up to 10% making it not only unstable but unusable for me