The RPC is built from bottom up as a precise and reliable MIDI sequencer. It has of an autonomous MIDI core capable of processing 4 serial MIDI inputs and outputs and a master SPI bus, controlled by the internal high-frequency timers of the Arduino Mega 2560.
The core can generate a MIDI clock or synchronize with an external clock, and implements a full scheduling facility with MIDI message priority levels, allowing for ideal MIDI message timing even during bus contention. Messages can be routed in real-time directly from any MIDI port or the SPI bus to any other port and filtered against a table of rules. All messages are automatically interleaved with other traffic on the same buses.
The RPC core takes the role of an SPI slave device. The SPI bus protocol is designed upon the idea that the SPI master is very likely running sequencer software, and can thus buffer in song data over SPI slightly ahead of time. The RPC SPI bus protocol is designed with a relatively high level of abstraction, hiding details of internal memory organization and data management.
The MIDI core is controlled by the Raspberry Pi sequencer. The sequencer handles all user interaction and also supports a number of different methods of generative MIDI control, such as arpeggiators, chord harmonies and creative transponations and transformations in diatonic scales. Thanks to the separate autonomous MIDI core, the real-time requirements for the sequencer are much less strict than those of a traditional software sequencer. The choice of (G)UI for the RPC will be the tracker. Songs can be saved on the internal SD card or exported on USB sticks.
The sequencer will most likely be extensible with Python.
The Raspberry Pi hardware has such a great amount of features that care must be taken to make best use of them. For this project only a limited feature set is actually used: the audio interfaces are neglected to provide as good MIDI performance as possible. The Pi is packaged into the RPC and is not meant to be “in the open” for hacking (but of course you can just open the cover of the box and do whatever you like with it.)
The primary goal of this project is to build a unit that is reliable, robust and resistant to physical disturbances such as power loss. The secondary goal is to provide a smooth user experience and to integrate the device as part of a live system, either as the centerpiece of a studio setup (producing MIDI clock for other devices) or as an instrument (receiving MIDI clock and controlling one or more synthesizers).