Test OSC Control program for Sonic Pi

Recently I was asked about controlling various features of a running sample using OSC. This program and an associated article and video is the result.

code link

4 Likes

Awesome project. Is it possible to make a generalized example for only receiving OSC messages.
Because I’m confused about the sending part that are involved and its becomes very specific the example.

I just have continuous data coming in from an ESP wifi module and I need to set a variable set for each incoming osc signal. It must be easier not?
:sleepy::hot_face:

Here is a simpler system which receives inputs from two separate sources via OSC
The received data is stored using set commands and is then available for a separate live loop to do whatever you want with it. To test, I am generating the OSC messages locally in Sonic Pi, but they can come externally from your ESP8266, in which case you miss out (or comment out) the local section.

use_osc "localhost",4559 # used only for local testing where SP creates the data.
use_debug false
use_osc_logging false

live_loop :var1 do #receive and store var1 data
  v1 = sync "/osc/test/var1"
  set :v1,v1[0] # store the received data
end

live_loop :var2 do
  v2 = sync "/osc/test/var2" #receive and store var2 datga
  set :v2,v2[0] #store the second variable value
end

#as many as you need like the above

live_loop :latestData do #independent live loop processes latest available data
  puts "latest values var1 #{get(:v1)} var2 #{get(:v2)}"
  synth :tri,note: get(:v1),release: 0.4 #first variable adjust pitch
  synth :saw,note: get(:v2),release: 0.4 #second variable adjusts pitch
  sleep 0.4 #latest values read every 0.4 beats
end

#local generation of test osc messages
live_loop :createData1 do
  osc "/test/var1",rrand_i(60,72)
  sleep 0.2
end
live_loop :createData2 do
  osc "/test/var2",rrand_i(72,84)
  sleep 0.6
end

The two test data streams run at different rates, so you can hear the two variables updating at different times not synced to each other. Depending on how rapid a response you need, you may require to add use_real_time.

2 Likes

AMAZING! IT WORKS PERFECTLY AND I CAN CHANGE EVERYTHING OR ADD STUFF EASILY!

Sorry about the caps lock but I needed to do that!

:raised_hands::raised_hands::raised_hands::raised_hands::raised_hands::raised_hands::raised_hands::raised_hands::raised_hands::raised_hands::raised_hands::raised_hands::raised_hands::raised_hands::raised_hands::raised_hands::raised_hands:

2 Likes