Last night I started hacking away at my own tool for converting MIDI files into Sonic Pi code. I’ve looked at examples in the forum and the nice write-ups by @robin.newman, which I will continue learning from. For my specific needs I have a bunch of MIDI drum/keyboard/bass loop files that I’d like to load in and mix together. These will typically only constitute a few to several seconds of performance duration and my ideal is to convert directories of these loops into Sonic Pi code.
I’m using a Python package called Mido to help with parsing the messages and calculating time to beat conversions. My first pass dumpster fire is here. Currently the code takes a file I have and splits each drum type into a different loop. The output for my sample file looks like (disclaimer: the sample names were post-edited by hand, but future versions will map those in from an initial config):
use_bpm 98
live_loop :bass_drum_1_loop do
sleep 0.0
sample :drum_bass_hard
sleep 1.5
sample :drum_bass_hard
sleep 0.4999999999999998
sample :drum_bass_hard
sleep 1.9999999999999998
sample :drum_bass_hard
sleep 1.4999999999999996
sample :drum_bass_hard
sleep 0.5000000000000009
sample :drum_bass_hard
sync :loop_window
end
live_loop :acoustic_snare_loop do
sleep 3.0
sample :drum_snare_hard
sleep 3.5
sample :drum_snare_hard
sleep 0.9999999999999991
sample :drum_snare_hard
sync :loop_window
end
live_loop :high_floor_tom_loop do
sleep 7.499999999999999
sample :drum_tom_lo_hard
sync :loop_window
end
live_loop :loop_window do
8.times do
sleep 1
end
end