Отправка сообщений из 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, но это тоже оказалось слишком запутанным для меня).


person rickygrimes90    schedule 09.01.2020    source источник


Ответы (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()

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

person Valerio Zanini    schedule 02.03.2020

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

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

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

from osc4py3.as_allthreads import *

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

(автор osc4py3)

person L.Pointal    schedule 07.06.2020