Я пытаюсь получить сообщение, отправленное через OSC из Pure Data (или Max / MSP) в MATLAB.
- Я могу отправлять сообщения OSC из Pure Data в Pure Data
- Я могу отправлять сообщения из MATLAB в MATLAB
- Я даже могу отправлять сообщения из MATLAB в Pure Data
- ... Я действительно изо всех сил пытаюсь заставить Pure Data разговаривать с MATLAB
Вот мой код, который отправляет сообщения из MATLAB (я использую протокол oscmex):
host = 'localhost'; % local host UDP address
sendPort = 3333; % UDP port number to send over
receivePort = 3333; % UDP port number to receive from
oscAddress = osc_new_address(host, sendPort); % open send address
oscServer = osc_new_server(receivePort); % open server
dataPacket = struct('path','/foo','tt','f','data',{num2cell([1.0])}); % create packet
osc_send(oscAddress, dataPacket); % write packet to OSC
oscMessage = osc_recv(oscServer, 0.1); % listen for packet on OSC
% check to see if anything is there...
if length(oscMessage) > 0
fprintf('Found something!')
else
fprintf('Failed to find anything')
end
osc_free_address(oscAddress);
osc_free_server(oscServer);
Если я отправляю с использованием хоста localhost, все работает нормально, отправляя из MATLAB в MATLAB, используя приведенный выше код. Если я установил его в '127.0.0.1', MATLAB отправляет в Pure Data, но MATLAB тогда не может получать свои собственные сообщения.
Теперь о другом конце. Вот мой патч Pure Data:
Опять же, запуск только вышеуказанного патча успешно отправляет и получает сообщения через Pure Data.
Проблема заключается в том, что я пытаюсь перейти от одной программы к другой. Если я настрою все так, что MATLAB отправляет на порт 3333, а Pure Data получает на 3333, и что Pure Data отправляется на 2222, а MATLAB получает на 2222, я могу сделать Pure Data получать, если MATLAB хост - 127.0.0.1. Но с '127.0.0.1' MATLAB не может отправлять самому себе.
В любом случае, что бы я ни пытался, я не могу заставить Pure Data отправить в MATLAB, несмотря на то, что у меня есть возможность получить его для отправки самому себе. Я подозреваю, что это как-то связано с адресом «хоста».
Мой фактический IPv4-адрес (найденный с помощью ipconfig в командной строке MS) полностью отличается от 127.0.0.1, и использование указанного здесь значения, похоже, не улучшает работу.
Я знаю, что у меня не может быть более одного сервера OSC с одним и тем же открытым портом одновременно, поэтому моя текущая попытка решения включает отправку из MATLAB на один порт и отправку из Pure Data на другой, только с один сервер открыт одновременно на любом из портов.
Обратите внимание: я также знаю, что использую /foo
для сообщений от MATLAB и /test
от Pure Data. Однако мой код MATLAB без разбора получает все, что отправлено через OSC, так что это не имеет значения.
Любая помощь в том, чтобы заставить PD поговорить с MATLAB, была бы оценена.
Обновление: я решил проблему с "localhost", и это, похоже, не помогло (мне пришлось добавить localhost в мой файл "hosts" Windows). Итак, я, возможно, лаял не на то дерево, беспокоясь о локальном хосте. Но я все еще не могу заставить PD поговорить с MATLAB.
Обновление №2: Amro опубликовал элегантное решение ниже, и я все еще не могу заставить MATLAB получать сообщения от Pure Data. Я установил CloseTheDoor для мониторинга своих UDP-соединений и заметил, что когда MATLAB настраивает сервер, он использует «Интерфейс» [::0]
, тогда как наборы PD используют «Интерфейс» 0.0.0.0
. Поскольку PureData - это тот, который успешно принимает сообщения, возможно, мне нужно заставить MATLAB также прослушивать 0.0.0.0
?
'localhost'
в качестве имени хоста? Похоже, это имя, используемое сudpsend
на вашей диаграмме, и то, которое работало для MATLAB - ›Связь MATLAB. Не то чтобы это должно иметь значение, но попробовать стоит ... - person wakjah   schedule 13.06.2013'localhost'
- единственное имя хоста (в MATLAB), которое разрешает связь с MATLAB. Однако только'127.0.0.1'
разрешает связь от MATLAB к Pure Data. Ни один из них (установленный в патче Pure Data) не разрешает связь от Pure Data с MATLAB. - person CaptainProg   schedule 13.06.2013localhost thing
- еще одна проблема, потому что localhost - это обычное DNS-имя для 127.0.0.1. Одно или другое должно работать (некоторые программы могут использовать 127.0.0.1 в качестве имени вместо IP, поэтому это тоже может не сработать), но если вы попробовали оба, возникает другая проблема. Я сам разработал программное обеспечение, которое общается с Pure Data через OSC - к сожалению, сторона Pure Data не была моей частью работы, поэтому я не могу точно сказать, ведет ли она себя как-то особенным. Но я знаю, что это может сработать ;-) - person JeffRSon   schedule 16.06.2013hosts
файл. Я тестировал свой код в R2013a, работающем на 32-битной WinXP, и он работает нормально ... Обратите внимание, что адрес 0.0.0.0 означает, что сервер прослушивает все интерфейсы. Адрес с двойным двоеточием - это нотация IPv6, я думаю, может ли это быть проблема IPv4 или IPv6? Обычно::1
совпадает с127.0.0.1
, а::0
означает0.0.0.0
. - person Amro   schedule 18.06.2013#ifdef ENABLE_IPV6
). Насколько я могу судить, двоичные файлы OSC-MEX предоставленные были скомпилированы против liblo v0.22, если это имеет значение. кстати, вы никогда не упоминали разрядность вашей ОС и версии MATLAB, которую вы используете (32-разрядная или 64-разрядная), это может быть фактором. - person Amro   schedule 18.06.2013