Отправка сообщений из 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)