0

我正在尝试通过 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 上运行跟踪方法,当我在终端上运行 Python 脚本时,post 窗口上什么也没有出现,但它们都没有出现错误,所以我有点迷失了我可以测试以确保得到某处。

它不会在 SC 发布窗口上打印,它只是说OSCdef(texto, /texto/supercollider, nil, nil, nil).

4

2 回答 2

0

当我运行您示例的 SuperCollider 部分时,然后运行:

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

...我看到立即打印的消息(请注意,您使用postIn而不是postln,如果您不修复,您将收到错误而不是打印消息)。

像你一样,当我通过 Python 库发送时,我什么也没看到——我怀疑 Python 端有问题吗?此响应中有一个提示,您必须osc_process()在发送后调用,但这对我仍然不起作用

你可以尝试三件事:

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

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

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

于 2019-05-14T06:13:42.040 回答
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

于 2021-07-15T19:26:18.853 回答