In C. In C. In RC.
Well, that was Retro Challenge 2024, and it did NOT go as expected, but in this case that was not a bad thing. I now have a partly-working MIDI file “jukebox” for the RC2014, a much better understanding of C pointers, CP/M and MIDI file specifications. Here is the link to the code on Github, with a readme file that explains the three parts that are functioning:
- a midi library for handling midi events
- a function for loading standard midi files
- a midi jukebox program that plays back-to-back midi files
What I don’t have (yet) is the original aim of the project, though I do now have all the main building blocks I need. So, although the Challenge for 2024 is over, the project is most certainly not.
Terry Riley‘s 1964 composition “In C” was the inspiration for this project, with the initial thought being that it would be a program to automatically play the piece over midi in an automated fashion. The rules that Riley sets out for playing the 53 phrases that make up the piece allow for some variation, meaning that no two performances should sound the same. My idea was to let the program play within these rules, with some random factors to make each play through different.
In Control
Then the RC2014 front panel came along and offered a basic means of actually performing the piece, with the computer doing the playback and the performer acting as a sort of conductor, deciding when each phrase played by different instruments should start, placing those otherwise random elements under human control. I can imagine a few alternative control schemes that would let the player take control of both start and end times of each phrase as well as some predefined expression, such as getting louder or quieter or applying a filter or vibrato. Depending on how hands-on the player wants to be, they could control between 4 and 16 different parts with just the standard 8 switches of the front panel. Ideally, the front panel LCD would also be used to view the score as it progresses, so the player can visualize where they are in terms of the different parts they have control over and making the RC2014 a stand-along music performance instrument needing neither a screen nor keyboard.
Out at C
Since the idea was to load the phrases into the RC in the form of parts of a midi file, such that part 1 would be the first phrase, part 2 the second and so on, the next logical thought is that there is no need to use the original Terry Riley phrases. The parts can be loaded with completely different phrases to make a truly unique piece that stands separately from the original, while working within the same form, just as one can be totally original sticking to a minuet or a sonata form.
That takes the concept of the program from a simple midi playback device to a very focused and niche type of performance sequencer, albeit without a record function (so far). Something like a basic version of Dr T‘s KCS (Keyboard Controlled Sequencer), which itself was a forerunner of Ableton Live.
Plan C
For November and beyond, I want to take this initial groundwork and add on the bits I need to have a functioning sequencer. Let‘s get some more meat onto this plan, then, since I can now load a midi file and separate it into queues for each track:
- Allow the player to trigger a queue or stop it (via keyboard initially)
- Triggering a queue moves onto the next part
- Repeat 1-3 for all instruments (midi channels)
- Allow channel redirection of the input phrase
- Allow velocity to be adjusted (up/down per phrase run)
- (Optional) additional control adjustment (e.g. expression)
- Provide some visualization (via screen/serial initially)
- Configuration file load / save
- Patches for each instrument
- Default tempo, number of instruments, control method
- Define controller(s) to add
- Associated midi file name
- Front panel control – 4+4, 7+1, 4×4 and feeback from LEDs
- LCD visualization – which track is playing which part
With those items in place, I think the idea will lead to some interesting music, but if nothing else, I can get the RC2014 playing In C.