2016-11-21 2 views
0

Сообщение от Python к scsynth через pyosc идет хорошо, но вместо того, чтобы при попытке получить в Python OSC сообщения, отправленные из scsynth audio server (только scsynth, не SuperCollider), я не понимаю, как получить порт scsynth отправляет.OSC связи с scsynth в Python с PyOsc

Если я пытаюсь отправить сообщение «/ notify» на адрес scsynth, он должен ответить с адресом отправки, но с pyosc Я не могу установить прослушиватель в том же порту, что и отправивший, и поэтому я не могу получить информацию, которая должна вернуться.

Любые предложения о том, как это сделать?

ответ

0

Я почти уверен, что отправитель и получатель должны быть на разных портах. Порт, используемый для приема, также не может использоваться для отправки одновременно.

относительно отправки сообщений 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 вернуться.

+0

Этот ответ о том, как сделать отправить OSC сообщение от sclang к питона - но вопрос на самом деле о передаче сообщений от scsynth к питону. –

+0

Позвольте мне подчеркнуть ключевой момент моего ответа: относительно отправки сообщений OSC обратно в pyosc. Я не понимаю, почему вы не будете использовать 'NetAddr.new', а затем' .sendMSg() '. Я хорошо знаю, что эти вещи находятся в sclang. – caseyanderson

+0

'sclang', вероятно, не работает, мне кажется, что OP работает под управлением' scsynth' отдельно (например, запустив 'scsynth -u 57110') и намеревается полностью контролировать его с помощью Python, не имея никакого отношения к' sclang '. –

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() 
Смежные вопросы