Связь с Python и Supercollider через OSC - PullRequest
0 голосов
/ 12 мая 2019

Я пытаюсь соединить Python с Supercollider через OSC, но он не работает.

Я использую 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 на терминале,но ни на одном из них ошибки не появляется, поэтому я немного растерялся из-за того, что я могу проверить, чтобы убедиться, что что-то получается.

Он не печатается в окне сообщений SC, он просто говорит OSCdef(texto, /texto/supercollider, nil, nil, nil).

1 Ответ

0 голосов
/ 14 мая 2019

Когда я запускаю часть SuperCollider вашего примера, а затем запускаю:

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

... Я вижу сообщение, напечатанное немедленно (обратите внимание, что вы использовали postIn вместо postln, если вы не исправите это, вы получите ошибку вместо печатного сообщения).

Как и вы, я ничего не вижу при отправке через библиотеку Python - у меня есть подозрение, что на стороне Python что-то не так? В этом ответе есть подсказка, что вам нужно позвонить osc_process() после отправки, но это все равно не работает для меня

Вы можете попробовать три вещи:

  1. Запустите OSCFunc.trace в SuperCollider и следите за сообщениями (при этом будут напечатаны ВСЕ входящие сообщения OSC), чтобы узнать, не получает ли ваш OSCdef какие-либо сообщения.

  2. Попробуйте сетевой анализатор, такой как Packet Peeper (http://packetpeeper.org/), чтобы посмотреть сетевой трафик в вашей локальной петлевой сети lo0. Когда я это делаю, я могу четко видеть сообщения, отправленные SuperCollider, но я не вижу не вижу ни одного из сообщений, которые я отправляю с Python, даже когда я отправляю в цикле и вызываю osc_process().

  3. Если вы не можете найти никаких признаков того, что Python отправляет пакеты OSC, попробуйте другую библиотеку Python - есть много других доступных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...