A few years ago, I was sitting in the front garden of the Musée du quai Branly. Speakers were situated around the garden, disguised as rocks. Each one was playing slightly different ambient music. I had been thinking of generative computer music at the time, and a thought struck me: each speaker was playing different music and the collective effect was harmonious, in much the same way as a band, composed of several band members each playing a different instrument, sounds harmonious.
Why not upgrade these speakers to match that ability? Why not improve the simple playback of harmonious ambient tracks into the more complex task of a band member, improvising his performance in harmony with his fellow bandmates in order to produce a song? In effect, I was asking whether we could create a program that could be called a musician in its own right.
Such a concept was a long way from even being suggested in music technology circles, and to date no serious effort has been put towards any sort of interactive computer musician, either built to collaborate with other computers or a human musician, though most of the required technology has existed for decades. As a performing musician, I would jump at a chance to perform with or own a computer musician:
- Ready at the click of a mouse 24/7 for practice
- Precisely programmable for any desired style
- Never makes a mistake and screws up your take
- Capable of consistently executing techniques and passages that would be difficult for any human
Back at the museum: once I had listened for a little longer, I realised all the speakers were actually playing the same song, but were at different positions. However, the seed had been planted and the idea stuck with me.
I recently discovered this paper from 2008 which details an intelligent drum machine that “learns to groove” from a human teacher using HMMs. It is not programmable apart from the initial teaching stage. The paper makes reference to numerous other promising projects on autonomous music performance which no longer appear on the internet.
I recently found the time to put some work into the idea. I’ve made an alpha prototype available here.
The chica prototype, named for the robotic drummer in the Five Nights at Freddy’s video game, is a Java application that acts as your drummer buddy. chica is programmable and improvises its drum performance from your parameters. In active play mode, it listens for MIDI ticks and triggers timed MIDI notes to another MIDI output. I’m using FL Studio as a timing and sampler host, and using loopMIDI to create virtual MIDI ports in order to keep it all on one machine.
This prototype merely hints at the tiniest fragment of my original idea, and deserves a lot more work. There’s a whole raft of features and fixes I’d love to add.
features to be implemented
- Input-responsive playback and artificially intelligent drum pattern selection chica should complement other instruments that it’s playing with and find its place in the song. chica will ideally be able to play a drum track according to any musical requirements, with minimal configuration.
- Flam notes and custom notes Flam notes, and other note modifiers such as strum effects add more realism to the performance.
- Pattern themes Link patterns by giving them the same ‘theme’. You can use this to group patterns that belong in certain parts of the drum sequence, such as the start or end.
- Jam functionality This would occupy another tab on the existing interface. It would allow you to define how chica picks the phrases it plays.
- Latency compensation chica suffers from a pretty severe latency problem which needs compensating for. It can still provide a satisfactory performance for human players.
- Other time signature support Currently, only simple time is supported.
fixes to be implemented
Watch out for these if you plan to try the prototype.
- Renaming patterns and phrases is not fully supported and may cause incorrect playback
- MIDI port names (default loopMIDI port names: “loopMIDI Port” and “loopMIDI Port 1”) are fixed
- The playhead is not displayed
- No support for multiple simultaneous notes and off-beat timings in each channel
Chica’s name and likeness is copyright Scott Cawthon
The Chica icon is used with permission, by http://geeksomniac.deviantart.com