Hi
I am trying to send a filename to SP using OSC and then using the file in the program. The idea is something like the draft below. This does not work. Also any suggestions on how this can be done better alternatively without using global variable? Thanks
$filePath=""
live_loop :a do
use_real_time
oscValues = sync "/osc/trigger/setname"
samp = oscValues.join(";")
$filePath = "C:/AUDIO/" + samp
end
live_loop :c do
sample $filePath
sleep 1
end
live_loop :a do
use_real_time
osc_values = sync "/osc/trigger/setname"
samp = osc_values.join(";")
set :file_path, "C:/AUDIO/" + samp
end
live_loop :c do
sample get(:file_path)
sleep 1
end
In fact, incoming OSC messages are inserted directly into the Time State system, so there’s no need for an explicit set:
live_loop :c do
sample "C:/AUDIO/" + get("/osc/trigger/setname").join(";")
sleep 1
end
However, I’m unsure what you’re doing with the values of that OSC message - specifically why your’e joining them with ";". Could you explain what you intend this code to do?
Ok what I am trying to do is simply to send a filename to Sonic Pi using OSC and then playback the file. The join(";") part was something I found on the Internet when trying to convert the array in the osc message to a string. But I think I need to read up on join as well
I have still not made it working. I also tried to use the osc directly but I get an error message on the join function
live_loop :d do
sample "C:/AUDIO/" + get("/osc/trigger/setname").join
sleep 1
end
Error message
Runtime Error: [buffer 0, line 54] - NoMethodError
Thread death ±-> :live_loop_d
undefined method join' for nil:NilClass Did you mean? JSON workspace_zero:54:inblock (3 levels) in __spider_eval’
Ok I did some more testing and i got it working sending the message into Sonic Pi from another client. Hence the issue seems to be external to Sonic Pi. I will investigate this further.
Thanks for the advise regarding get/set and for the heads up concerning join
If you’re controlling the code that’s creating and sending the original OSC message, it might make more sense to send the argument as a string of multiple characters which would mean you wouldn’t need to join anything at all.
It’s also worth noting that .join is a Ruby feature and is currently unsupported in any way (as are most Ruby features). This doesn’t mean you shouldn’t use them, but it does mean that they may stop working without notice in a future release. Only the functionality presented in the documentation is officially supported
Also thanks for warning me about the fact that this is a Ruby feature. At the same time I hope these features will not dissappear, because I think it is one of Sonic Pi’s strength that one can find general Ruby code on the Internet and implement it in the Sonic Pi code.