Skip to content

Instantly share code, notes, and snippets.

@rbnpi
Created December 31, 2022 22:30
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rbnpi/9fa79ab7305e022727e20d456a8ae8f8 to your computer and use it in GitHub Desktop.
Save rbnpi/9fa79ab7305e022727e20d456a8ae8f8 to your computer and use it in GitHub Desktop.
Sonic Pi and hydra.ojack communicating via midi and audio See it on https://youtu.be/Du0yLoDYHOs
//Sonic Pi controlled code using midi and audio input by Robin Newman
// register WebMIDI
navigator.requestMIDIAccess()
.then(onMIDISuccess, onMIDIFailure);
function onMIDISuccess(midiAccess) {
console.log(midiAccess);
var inputs = midiAccess.inputs;
var outputs = midiAccess.outputs;
for (var input of midiAccess.inputs.values()){
input.onmidimessage = getMIDIMessage;
}
}
function onMIDIFailure() {
console.log('Could not access your MIDI devices.');
}
//create an array to hold our cc values and init to a normalized value
var cc=Array(128).fill(0.5)
getMIDIMessage = function(midiMessage) {
var arr = midiMessage.data
var index = arr[1]
//console.log('Midi received on cc#' + index + ' value:' + arr[2]) // uncomment to monitor incoming Midi
//var val = (arr[2]+1)/128.0 // normalize CC values to 0.0 - 1.0
var val = arr[2]
cc[index]=val
}
//cc[0] controls kaleid, cc[1]-cc[3] control rgb solid mask, cc[4] controls masks alpha: can blank the screen.
//audio controls colour out of voronoi
voronoi(3,0.3,-0.3).color(()=>a.fft[0]*3,0.9,-0.7)
.scale(0.3,1)
.kaleid(()=>cc[0])
.luma(-0.8)
.colorama(0.05,-0.6)
.mult(solid(()=> cc[1],()=> cc[2],()=> cc[3],()=> cc[4]))
.out(o0)
#sonic pi code by Robin Newman, Dec 31 2022
#drives sketch on hydra.ojack.xyz running on Chrome browser
#requires Sonic Pi audio output looped back to Chrome browser
use_midi_defaults channel: 1,port: "iac_driver_bus"
set :kill,false
midi_cc 4,1
comment do #uncomment to stop Bass note will take time to die away
midi_cc 4,0
set :kill,true
end
use_midi_logging false
use_debug false
sf=2
live_loop :mid0 do
stop if get(:kill)
midi_cc 0, [3,6,9,5,10,15].tick # sends to control 0 a random integer between 3 and 6
sleep 0.125*sf
end
live_loop :mid1 do
stop if get(:kill)
midi_cc 1,[0,1].tick
sleep 0.125*sf #rates of change of r,g,b cc all different
end
live_loop :mid2 do
stop if get(:kill)
midi_cc 2,[0,1,].tick
sleep 0.25*sf
end
live_loop :mid3 do
stop if get(:kill)
midi_cc 3,[1,0,0,0,1,1,1,1].tick #mask out possibility of r,g,b cc all 0
sleep 0.5*sf
end
with_fx :reverb,room: 0.7,mix: 0.7 do
live_loop :aud do
stop if get(:kill)
if tick%64 == 0
use_transpose [0,5,7,-5].tick(:tr)
if look(:tr)==4
set :kill,true
midi_cc 4,0
end
synth :fm,note: (octs :e2,3),sustain: 10*0.125*sf,release: 64*0.125*sf,amp: 2
end
density dice(2) do
use_synth :tb303
k=play scale(:e2,:minor_pentatonic,num_octaves: 2).choose,release: 0.125*sf*2,cutoff: rrand_i(70,110)
control k,cutoff: 100,cut_off_slide: 0.125*sf*2
end
sleep [0.125*sf,0.25*sf].choose
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment