Midi to Ableton Solitude by Ryuichi Sakamoto

Midi to Ableton Solitude by Ryuichi Sakamoto (only first part)

Code is a bit messy.

I split up bass and melody + octave into two channels to be able to adjust different settings of the grand piano in Ableton.

I learned:

  1. to use “midi_note_off” to cancel out playing notes.
  2. to use “midi_all_notes_off” to cancel out all playing notes.
    This is done to avoid sustaining midi notes playing in Ableton

Forgot how to record Ableton ASIO with OBS, so handheld it is.

# 240106 2228 Midi to Ableton of Solitude by Ryuichi Sakamoto
# Saved 240106 2228
# Original www.youtube.com/watch?v=_AVpYO-lx9Y
# My performance in Sonic pi https://youtu.be/MVSHlc2dHBg
# https://in-thread.sonic-pi.net/t/midi-to-abelton-of-solitude-by-ryuichi-sakamoto/8513
# Using loopmidi to send midinotes to Ableton



use_bpm 66 # Original 60


live_loop :a1 do
  tick
  
  no = :f2
  
  / bass 1-8/
  b1 = [0,3,7,3,0,3,7,3]
  b2 = [-5,2,3,2,-5,2,3,2]
  b3 = [-4,3,7,3,-4,3,7,3]
  b4 = [-2,5,8,5,-1,5,8,5]
  
  b8 = [-2,2,7,2,-2,2,7,2]
  
  / mel 1-8/
  m1 = [3,0,0,0,2,0,0,0]
  m2 = [-2,0,0,0,2,0,0,0]
  m3 = [3,0,0,0,5,0,0,0]
  m4 = [3,0,0,0,2,0,0,0]
  
  m8 = [7,0,0,0,5,0,0,0]
  
  / Songform /
  k = 8
  b = knit(b1,k,b2,k,b3,k,b4,k, b1,k,b2,k,b3,k,b8,k, ).look
  m = knit(m1,k,m2,k,m3,k,m4,k, m1,k,m2,k,m3,k,m8,k, ).look
  
  
  / Midi to Ableton by loopmidi                     /
  / ----------------------------------------------- /
  / channel 1: bass                                 /
  / channel 2: melody + octav + more reverb         /
  
  s = 8*8
  songform = knit(1,s,2,s,3,s,2,s,1,s,0,8).look
  #songform = 3
  case songform
  
  when 0
    sleep 0.5
    midi_all_notes_off
  when 1 #only bass
    use_midi_defaults channel: 1, port:  "loopmidi_port_2"
    midi no+b.look
    sleep 0.5
    midi_note_off no+b.look
    
    #end
    
  when 2 # bass + mel
    use_midi_defaults channel: 1, port:  "loopmidi_port_2"
    midi no+b.look
    #use_midi_defaults channel: 2, port:  "loopmidi_port_2"
    #midi no+m.look+12 if spread(1,4).look
    sleep 0.5
    midi_note_off no+b.look
    #midi_note_off no+b.look+12 if spread(1,4).look
  when 3 # Bass + mel + mel octav
    use_midi_defaults channel: 1, port:  "loopmidi_port_2"
    midi no+b.look
    #use_midi_defaults channel: 2, port:  "loopmidi_port_2"
    #midi no+m.look+12 if spread(1,4).look
    #midi no+m.look+24 if spread(1,4).look
    sleep 0.5
    midi_note_off no+b.look
    #midi_note_off no+b.look+12 if spread(1,4).look
    #midi_note_off no+m.look+24 if spread(1,4).look
  end
  
  
end

live_loop :a2 do
  #stop
  tick
  
  no = :f2
  
  / bass 1-8/
  b1 = [0,3,7,3,0,3,7,3]
  b2 = [-5,2,3,2,-5,2,3,2]
  b3 = [-4,3,7,3,-4,3,7,3]
  b4 = [-2,5,8,5,-1,5,8,5]
  
  b8 = [-2,2,7,2,-2,2,7,2]
  
  / mel 1-8/
  m1 = [3,0,0,0,2,0,0,0]
  m2 = [-2,0,0,0,2,0,0,0]
  m3 = [3,0,0,0,5,0,0,0]
  m4 = [3,0,0,0,2,0,0,0]
  
  m8 = [7,0,0,0,5,0,0,0]
  
  
  m1 = [3,2]
  m2 = [-2,2]
  m3 = [3,5]
  m4 = [3,2]
  
  m8 = [7,5]
  
  
  
  
  / Songform /
  k = 8/4
  b = knit(b1,k,b2,k,b3,k,b4,k, b1,k,b2,k,b3,k,b8,k, ).look
  m = knit(m1,k,m2,k,m3,k,m4,k, m1,k,m2,k,m3,k,m8,k, ).look
  
  
  / Midi to Ableton by loopmidi                     /
  / ----------------------------------------------- /
  / channel 1: bass                                 /
  / channel 2: melody + octav + more reverb         /
  
  s = 8*8/4/2
  songform = knit(1,s,2,s,3,s,2,s,1,s,0,8).look
  #songform = 3
  case songform
  
  when 0
    sleep 0.5*4
    midi_all_notes_off
    
  when 1 #only bass
    #use_midi_defaults channel: 1, port:  "loopmidi_port_2"
    #midi no+b.look
    sleep 0.5*4
    # midi_note_off no+b.look
    
    #end
    
  when 2 # bass + mel
    #use_midi_defaults channel: 1, port:  "loopmidi_port_2"
    #midi no+b.look
    use_midi_defaults channel: 2, port:  "loopmidi_port_2"
    midi no+m.look+12 #if spread(1,4).look
    sleep 0.5*4
    #midi_note_off no+b.look
    midi_note_off no+b.look+12 #if spread(1,4).look
  when 3 # Bass + mel + mel octav
    #use_midi_defaults channel: 1, port:  "loopmidi_port_2"
    #midi no+b.look
    use_midi_defaults channel: 2, port:  "loopmidi_port_2"
    midi no+m.look+12 #if spread(1,4).look
    midi no+m.look+24 #if spread(1,4).look
    sleep 0.5*4
    #midi_note_off no+b.look
    midi_note_off no+b.look+12 #if spread(1,4).look
    midi_note_off no+m.look+24 #if spread(1,4).look
  end
  
  
end