The genesis for Sideman was the “Midi Specification version 1.0”, published in 1983, almost 40 years ago. It’s introduction stated that “MIDI enables synthesizers, sequencers, home computers, rhythm machines, etc. to be interconnected through a standard interface”. At that time I was a young engineer working at a company called Linkabit, designing embedded systems. But my passion, besides electronics and programming, was music – specifically piano and drums.
The systems we designed at Linkabit were microprocessor-based and programmed in assembly language. UARTS were part of the design to enable communication between I/O devices such as terminals and keyboards. Little did I know that UARTS were a fundamental part of MIDI.
MIDI Specification 1.0 included a schematic for a ‘midi interface’. The interface used no more than two 5-pin DIN connectors, an optoisolator, some resistors, a diode, and some buffers. The interface connects to the transmitting device’s UART and the receiving device’s UART. Needless to say I quickly bread-boarded this circuit and eagerly connected it to two of our micro-controller boards to see if I could transmit some bytes between the boards. After adjusting the value of the Optisolator’s output pull-up resistor to get a full 5 volt logic swing, the setup worked! At that same time I was using a Yamaha FB-01 sound module connected to a Yamaha DX7 digital piano, and it was MIDI that enabled these two devices to communicate. After studying the “Midi Data Format” for midi messages sent between midi devices, I focused on the “Midi Note ON” and “Midi Note OFF” messages (and how trivial they were: they included the Midi Channel, the note value, and the notes volume). Armed with this knowledge I set out to send some ‘Note ON’ and ‘Note OFF’ messages from my microcontroller to the Yamaha FB-01, and it WORKED! Of course the next task was to ‘play’ some chords – and that worked TOO! My imagination was now on fire. As time progressed, I began writing code to play chord progressions and even play drum beats on a Drum Machine. Years later this code was generating Bass patterns and Drum patterns as accompaniment to my piano playing.
At some point I realized that with MIDI, so much more could be accomplished. For example, by connected the microcontroller’s UART to the DX7 Midi output, my program could ‘see’ and ‘listen to’ what I was playing on the piano!
Next came some code to decode the chords I was playing. As I played my favorite jazz chords (think ‘Dominant 7, raised 9’) the program would decode and semi-instantaneously display “F Dom #9” on the monitor as diagnostic information. I thought: If code could quickly decode the chord played by a pianist in real-time, the generation of accompaniment (think Bass, Strings, Guitar, etc) was definitely possible.
Then came ‘Key Signature decoding’, ‘Tempo and Time Signature decoding’, and even piano ‘piano style’ detection.
Having a high-speed hardware timer with software interrupts enabled the program to generate accurate timing for generating accompaniment to my piano playing. After creating Bass and Drum accompaniment I named this project “Sideman” – because in those days bassists and drummers were called “sideman”.
Initially Sideman used a large and expensive single-board computer. Today Sideman uses the ubiquitous Raspberry Pi! The Pi has a processing bandwidth unheard of just a decade ago, and for the cost of cheap dinner out.At some point in Sideman’s development I became determined that the guiding philosophy was that the pianist would always be in complete and total control of his performance – Sideman would strictly be a “listener”. At no point would the pianist be interrupted or distracted by the accompaniment generated by Sideman.
Sideman generates accompaniment using software algorithms that “listen” to what the pianist is playing – and to respond accordingly. Such musical nuances as ‘tempo, ‘swing’, ‘Key modulation’, ‘chord voicings’, ‘modal scales’, ‘chord and solo note timing’, etc. would be analyzed and quantified in real-time and used to guide the accompaniment. And just as importantly there would be no knobs, buttons, switches, menus, displays, etc. to take the pianist’s attention away from his performance. On a personal note, since my father suffered from macular degeneration, I have focused a lot of attention on making Sideman accessible to the visually impaired. A year or so ago I posted some videos showing how Sideman could be used by the visually impaired. ‘Starting’, ‘pausing’ and ‘stopping’ sideman was controlled strictly by the performance. For example, volume of the accompaniment auto-tracked the performance, and variations in tempo and style of the accompaniment also tracked the performance.
My vision looking forward is to make pianists aware of Sideman’s features, and how simple and inexpensive it is to incorporate Sideman into their performance. By using videos, the pianist can learn how Sideman automatically provides incredible accompaniment to his performance. As a side-note, Midi Sound Modules can be obtained at prices as low as $65 (MidiPlus Midi Enging). Howeer for the more serious pianist I would recommend sound modules such as the Yamaha Motif-Rack XS or Roland’s new Integra. These high end sound modules are absolutely amazing – and Sideman will take advantage of their voices to make your performance OUTSTANDING!
So please watch for upcoming posts that detail how Sideman does what it does. Thanks for listening, Eastman.