【问题标题】:OSC communication from scsynth to python with PyOsc使用 PyOsc 从 scsynth 到 python 的 OSC 通信
【发布时间】:2016-11-21 13:06:46
【问题描述】:

通过pyosc 从Python 到scsynth 的通信进展顺利,但是当尝试在Python 中接收从scsynth audio server 发送的osc 消息时(只是scsynth,而不是SuperCollider),我不明白如何获取scsynth 发送到的端口。

如果我尝试向scsynth 发送“/notify”消息,它应该回复发送地址,但对于pyosc,我无法在与发送端口相同的端口上设置侦听器,所以我无法检索应返回的信息。

关于如何做到这一点的任何建议?

【问题讨论】:

    标签: python osc supercollider


    【解决方案1】:

    您可以通过使用OSCClient.setServer 告诉您的OSC 客户端使用服务器的套接字进行传输来完成此操作。下面是一个示例来说明 OSC 消息在套接字 8000 上发送和接收的情况:

    import OSC
    
    def handle_message(address, tags, contents, source):
        # prints out the message
        print(address)
        print(source)
    
    server = OSC.OSCServer(("localhost",8000))
    server.addMsgHandler("/test", handle_message)
    
    msg = OSC.OSCMessage("/test", [1])
    
    client = OSC.OSCClient()
    client.setServer(server)
    client.connect(("localhost", 8000))
    client.send(msg)
    
    server.serve_forever()
    

    【讨论】:

      【解决方案2】:

      我几乎肯定发送者和接收者必须在不同的端口上。用于接收的端口不能同时用于发送。

      关于将 OSC 消息发送回 pyosc,我不明白您为什么不使用 NetAddr.new 然后使用 .sendMSg()。例如(来自 OSC 通信的文档):

      b = NetAddr.new("127.0.0.1", 7771);
      b.sendMsg("/hello", "there");
      

      更多信息here

      如果您想从 SC 自动回复,那么您可以编写一种方法来触发响应 .sendMsg 到您的 OSCDef 或 OSCFunc 中,例如,它可以简单地等待来自 python 的初始消息并使用您想要的任何内容 python回来。

      【讨论】:

      • 这个答案是关于如何从 sclang 向 python 发送 OSC 消息 - 但问题实际上是关于从 scsynth 向 python 发送消息。
      • 让我强调我回答的一个关键点:关于将 OSC 消息发送回 pyosc,我不明白你为什么不使用NetAddr.new,然后使用.sendMSg()。我很清楚这些东西是在 sclang 中的。
      • sclang 可能实际上并没有运行,在我看来 OP 正在单独运行 scsynth(例如,通过运行 scsynth -u 57110)并打算用 Python 完全控制它而无需任何东西使用sclang
      • 有道理。感谢您在下面的回答,因为它给了我一些新的尝试技巧(我经常在 python 和 sc 之间切换)。
      猜你喜欢
      • 2019-09-29
      • 2012-09-10
      • 1970-01-01
      • 2012-09-08
      • 2017-11-07
      • 1970-01-01
      • 1970-01-01
      • 2014-03-21
      • 1970-01-01
      相关资源
      最近更新 更多