サウンドをライブコーディングでデザインできるツールSonicPi。音もよくRubyで記述できるなどの魅力がありますが、Windows版はOSCでのリモートアクセスができないため、OSC通信を中継するプログラムをProcessingで作ってみました。
環境: SonicPi ver 2.11.1, Processing 3.3.5 / Windows 10
SonicPiは立ち上げているだけで、何もしません。
SonicPiが起動してるマシンで以下を動かします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
import oscP5.*; import netP5.*; OscP5 oscP5; NetAddress sonicpi; void setup() { size(100,100); oscP5 = new OscP5(this,8888); sonicpi = new NetAddress("127.0.0.1", 4557); oscP5.plug(this,"getData","/run-code"); } public void getData(String s1, String s2) { println("data : "+ s1 + "/" + s2); OscMessage msg = new OscMessage("/run-code"); msg.add(s1); msg.add(s2); oscP5.send(msg, sonicpi); } void draw() { } |
リモートから以下を動かします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
import oscP5.*; import netP5.*; OscP5 oscP5; NetAddress relay; void setup(){ size(100,100); oscP5 = new OscP5(this, 9999); relay = new NetAddress("192.168.11.10", 8888); } void draw(){ } void mousePressed(){ OscMessage msg = new OscMessage("/run-code"); msg.add("P5"); msg.add("play 72"); oscP5.send(msg, relay); } |
マウスクリックをうると、音がなります。
あと中継ではないですが、SonicPiの画面が何もないのもつまらないので、SonicPiのパラメータにOSC通信で受信したデータをセットするデモも試してみました。
1 2 3 4 5 6 7 8 9 |
NetAddress sonicpi= new NetAddress("127.0.0.1", 4559); void mousePressed(){ OscMessage msg = new OscMessage("/osc/trigger/prophet"); msg.add(30); msg.add(100); msg.add(8); oscP5.send(msg, sonicpi); println(msg); } |
(Processingでマウスクリック部のみ)
syncというのは同期なのでここで受信待ちをします。
OSC通信との親和性はとても高いようです。(注:Portが違う)
参考:
https://github.com/samaaron/sonic-pi/blob/master/etc/doc/tutorial/12.1-Receiving-OSC.md