Hi there,
I keep exploring open stage control (https://osc.ammd.net/) to create a visual interface for Sonic Pi.
the doc concerning edit the interface in open stage control https://osc.ammd.net/extras/remote-control/
I need to send the osc message
In python using the python-osc it works with this code
"""
Test d'envoi vers open stage control d'un message osc
pour changer un label dynamiquement
"""
import argparse
import random
import time
import json
from pythonosc import osc_message_builder
from pythonosc import udp_client
"""
jsonData = '{"label":"New Label"}'
jsonToPython = json.loads(jsonData)
"""
pythonDictionary = {'label':'nouveau nom', 'color':'pink'}
dictionaryToJson = json.dumps(pythonDictionary)
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("--ip", default="127.0.0.1",
help="adresse du serveur openstagecontrol")
parser.add_argument("--port", type=int, default=8080,
help="8080 the port is listening on")
args = parser.parse_args()
client = udp_client.SimpleUDPClient(args.ip, args.port)
client.send_message("/EDIT", ("push_4", dictionaryToJson))
time.sleep(4)
client.send_message("/EDIT", ("push_4", '{"label":"New Label"}'))
Now i need to make it work in Sonic Pi but i miss something about the syntax.
live_loop :changeLabelPush_4 do
options = {"label" => "depuis sonic pi"}
require 'json'
# => true
options.to_json
puts options
osc_send "127.0.0.1",8080,"/EDIT", "push_4", options
sleep 4
stop
end
it give this in the sonic pi journal
{run: 17, time: 4.0, thread: :live_loop_changeLabelPush_4}
├─ {"label"=>"depuis sonic pi"}
└─ OSC -> 127.0.0.1, 8080, /EDIT, ["push_4", {"label"=>"depuis sonic pi"}]
and causes an error in the open stage control log
OSC received: { address: '/EDIT', args: 'push_4' } From : 127.0.0.1:4560
[Renderer process error]
Uncaught SyntaxError: JSON5: invalid character 'u' at 1:1
at default (node_modules/json5/dist/index.js:1:0)
at default (node_modules/json5/dist/index.js:1:0)
at default (node_modules/json5/dist/index.js:1:0)
at default (node_modules/json5/dist/index.js:1:0)
at default (node_modules/json5/dist/index.js:1:0)
at EDIT (src/browser/js/app/remote-control.js:11:53)
at exec (src/browser/js/app/remote-control.js:163:28)
at receive (src/browser/js/app/osc.js:38:72)
at receiveOsc (src/browser/js/app/ipc/callbacks.js:17:12)
at require (src/browser/js/app/ipc/index.js:40:16)
Open stage control needs this
OSC received: { address: '/EDIT',
args: [ 'push_4', '{"label":"New Label"}' ] }
Some clever ideas to help ?
Cheers