我试图通过OSC连接Python和超级对撞机,但它不工作。
我使用的是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脚本时,post窗口上什么也没有出现,但它们中的任何一个都没有出现错误,所以我有点迷茫,不知道我可以测试什么来确保取得进展。
它不会打印在SC post窗口上,它只会显示OSCdef(texto, /texto/supercollider, nil, nil, nil)。
发布于 2019-05-14 14:13:42
当我运行您示例中的SuperCollider片段,然后运行:
n = NetAddr("127.0.0.1", 57120);
n.sendMsg('/texto/supercollider', 1, 2, 3);..。我立即看到了打印的消息(请注意,您使用的是postIn而不是postln,如果不解决这个问题,您将得到一个错误而不是打印的消息)。
像您一样,当我通过Python库发送时,我看不到任何东西-我怀疑Python端有什么问题?在this response中有一个提示,您必须在发送之后调用osc_process(),但这仍然不适用于我
您可以尝试以下三种方法:
OSCFunc.trace并查看消息(这将打印所有传入的OSC消息),以查看您的OSCdef是否以某种方式没有接收到消息。lo0上的网络流量。当我这样做时,我可以清楚地看到SuperCollider发送的消息,但我看不到我从Python发送的任何消息,即使当我在循环中发送并调用osc_process().发布于 2021-07-16 03:26:19
(我是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
https://stackoverflow.com/questions/56102649
复制相似问题