通过OSC与Python和Supercollider进行通信

时间:2019-05-12 19:16:56

标签: python-3.x osc supercollider

我正在尝试通过OSC将Python与Supercollider连接起来,但无法正常工作。

我正在使用Python3和库osc4py3。

最初的想法是逐字发送文本,但尝试后我发现连接不起作用。

这是SC代码:

(
OSCdef.new(\texto,{
    |msg, time, addr, port|
    [msg, time, addr,port].postIn;
},
'/texto/supercollider',
n
)
)

OSCFunc.trace(true);

o = OSCFunc(\texto);

这是Python代码:

osc_startup()

osc_udp_client("127.0.0.1", 57120, "supercollider")

## here goes a function called leerpalabras to separate words in rows.

with open("partitura.txt", "r") as f:
   for palabra in leerpalabras(f):
        msg = oscbuildparse.OSCMessage("/texto/supercollider", ",s", palabra)
        osc_send(msg, "supercollider")
        sleep(2)

osc_terminate()

我也对此进行了尝试,以查看我的for循环是否有问题(启动,然后终止,当然):

msg = oscbuildparse.OSCMessage("/texto/supercollider", ",s", "holis")
osc_send(msg, "supercollider")

我在SC上运行trace方法,在终端上运行Python脚本时,发布窗口上没有显示任何内容,但是在两者中都没有出现错误,因此我对可以测试的内容有些迷惑肯定会到达某个地方。

它不会显示在SC帖子窗口中,只会显示OSCdef(texto, /texto/supercollider, nil, nil, nil)

2 个答案:

答案 0 :(得分:0)

当我运行您的示例的SuperCollider片段,然后运行:

n = NetAddr("127.0.0.1", 57120);
n.sendMsg('/texto/supercollider', 1, 2, 3);

...我看到消息立即打印出来(请注意,如果您不解决问题,则将得到错误而不是打印的消息,而使用postIn而不是postln

像您一样,通过Python库发送消息时我什么也没看到-我怀疑Python方面有问题吗? this response中有一个提示,您必须在发送后致电osc_process(),但这对我仍然无效

您可以尝试三件事:

  1. 在SuperCollider中运行OSCFunc.trace并查看消息(这将打印所有传入的OSC消息),以查看您的OSCdef是否以某种方式未接收到消息。

  2. 尝试使用诸如Packet Peeper(http://packetpeeper.org/)之类的网络分析器来监视本地环回网络lo0上的网络流量。当我这样做时,我可以清楚地看到SuperCollider发送的消息,但是即使我循环发送并调用osc_process(),也看不到我从Python发送的任何消息。

  3. 如果找不到Python发送OSC数据包的迹象,请尝试使用其他Python库-还有很多其他可用的库。

答案 1 :(得分:0)

(我是 osc4py3 作者) osc4py3 存储要在内部列表中发送的消息并立即返回。这些列表在 osc_process() 调用期间或由后台线程直接处理(根据选定的标题模型)。

因此,如果您选择了 as_eventloop 线程模型,则需要多次调用 osc_process(),例如:

…
with open("partitura.txt", "r") as f:
   for palabra in leerpalabras(f):
        msg = oscbuildparse.OSCMessage("/texto/supercollider", ",s", palabra)
        osc_send(msg, "supercollider")
        for missme in range(4):
           osc_process()
           sleep(0.5)
…

参见文档:https://osc4py3.readthedocs.io/en/latest/userdoc.html#threading-model