Отправка сообщений из Python с помощью osc4py3?

В настоящее время я пытаюсь понять, как отправлять сообщения OSC с Python на Max/MSP. В настоящее время я использую для этого osc4py3, и у меня есть образец кода из документации, который гипотетически должен работать, написанный здесь:

from osc4py3.as_eventloop import *
from osc4py3 import oscbuildparse

# Start the system.
osc_startup()

# Make client channels to send packets.
osc_udp_client("127.0. 0.1", 5000, "tester")

msg = oscbuildparse.OSCMessage("/test/me", ",sif", ["text", 672, 8.871])
osc_send(msg, "tester")

Приемник в Max - это просто объект udprecieve, слушающий порт 5000. Мне удалось заставить Processing отправлять сообщения OSC в Max, и это работало довольно просто с использованием библиотеки oscp5, но мне, похоже, не повезло с Python.

Что мне не хватает? Более того, я не совсем понимаю структуру для построения сообщений OSC в osc4py3, даже после того, как приложил все усилия с документацией; если кто-то захочет объяснить, что именно происходит (а именно аргументы) в чем-то вроде

msg = oscbuildparse.OSCMessage("/test/me", ",sif", ["text", 672, 8.871])

тогда я буду вечно благодарен.

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

2 ответа

Возможно, вы уже решили это, но в опубликованном коде есть две проблемы. Один из них - это формат IP-адреса (перед вторым "0" стоит пробел). В конце вам понадобится команда osc.process(). Итак, должен работать следующий способ

from osc4py3.as_eventloop import *
from osc4py3 import oscbuildparse

# Start the system.
osc_startup()

# Make client channels to send packets.
osc_udp_client("127.0.0.1", 5000, "tester")

msg = oscbuildparse.OSCMessage("/test/me", ",sif", ["text", 672, 
8.871])
osc_send(msg, "tester")
osc_process()

Надеюсь, это сработает

В osc4py3 есть разные возможные политики планирования. В документации используется модель цикла событий сas_eventloop, где код пользователя должен периодически вызывать osc_process() чтобы osc4py3 работал с внутренними очередями сообщений и коммуникациями.

Пример клиент для отправки сообщений OSC оберткиosc_process() вызов в цикле (обычно это в цикле обработки событий).

Вы можете уволить osc_process() вызовите просто путем импорта имен с полной политикой планирования многопоточности в начале вашего кода:

from osc4py3.as_allthreads import *

Третья политика планирования: as_comthreads, где сообщения обрабатываются в фоновых потоках, но полученные сообщения (на стороне сервера) обрабатываются синхронно на osc_process() вызов.

(автор osc4py3)

Другие вопросы по тегам