2013-09-29 2 views
1

Я пытаюсь использовать libPd, оболочку для PureData. Но документация плохая, и я не очень в C++ Знаете ли вы, как я могу просто отправить плавающее значение в Pd-патч?реализация оболочки libPd и C++

Нужно ли устанавливать libPd, или я могу просто включить файлы?

ответ

2

Если вы хотите отправить значение запущенному экземпляру Pd (автономного приложения), вы можете сделать это через сетевые возможности Pd.

например.

[netreceive 65432 1] 
| 
[route value] 
| 
[print] 

будет принимать данные, отправленные с помощью CmdLine:

echo "value 1.234567;" | pdsend 65432 localhost udp 

вы можете также отправить несколько значений одновременно, например,

echo "value 1.234567 3.141592;" | pdsend 65432 localhost udp 

если вы найдете pdsend, чтобы замедлить для ваших целей (например, если вы запускаете исполняемый файл для каждого сообщения, которое вы хотите отправить вас есть значительные накладные расходы!), Можно построить сообщение непосредственно в приложении, и использовать обычная UDP-розетка для отправки FUDI -messages to Pd.

FUDI-сообщения действительно простые текстовые строки с атомами, разделенными пробелами и конечной точкой с запятой, например.

accelerator 1.23 3.14 2.97; button 1; 

вы можете также рассматривает возможность использования OSC, но для этого вам понадобятся некоторые внешние (OSC по mrpeach, сеть по mrpeach (или iemnet)) на стороне Pd.

Что касается производительности, я использовал последний со сложными данными отслеживания (сотни значений на кадр со скоростью 125 кадров в секунду) и для потоковой передачи многоканального звука, поэтому я не думаю, что это проблема.

, если вы уже используете libPd и только хотите общаться с хост-приложения, используйте решение Адама (но ваш вопрос немного расплывчато о том, что, так что я в том числе этот ответ на всякий случай)

+0

Спасибо, но даже использование UDP происходит слишком медленно. Мне нужно считывать значения с ИК-датчика расстояния, когда я использую только один датчик, скорость в порядке, но когда я использую два датчика, скорость не более приемлема. – Wateredge

+1

В этом случае я думаю, что проблема * не * на стороне Pd, а на стороне отправки - например. накладные расходы «pdsend». я соответствующим образом обновил ответ. –

+0

спасибо, я пытаюсь использовать OSCpack, но когда я скомпилирую примеры кода, я получаю: «SimpleSend.cpp: 5: 41: фатальная ошибка: osc/OscOutboundPacketStream.h: Нет такого файла или каталога» Очень странно, потому что файл там! Заранее спасибо;) – Wateredge

5

Прежде всего, ознакомьтесь с ofxpd. У этого есть превосходное выполнение libpd с OpenFrameworks. Если вы начинаете с C++, вы можете начать с OpenFrameworks, так как у него есть отличная документация и хорошая интеграция с Pd через расширение xpd.

Есть две хорошие ссылки для начала работы с libpd (хотя и не слишком подробно на C++): the original article и Peter Brinkmann's book.

На вики-странице libpd есть p age for getting started with libpd. В связанном проекте внизу есть некоторые фрагменты кода в main.cpp, которые демонстрируют, как отправлять поплавки на ваш Pd-патч.

pd.sendBang("fromCPP"); 
pd.sendFloat("fromCPP", 100); 
pd.sendSymbol("fromCPP", "test string"); 

В вашем Pd патч вы создали [получить fromCPP], а затем эти сообщения будут регистрироваться в патче.

Для получения вывода на печать вам необходимо использовать приемники из libpd, чтобы получать строки, а затем делать с ними что-то. libpd поставляется с PdBase, который является отличным классом для запуска и запуска libpd. PdBase имеет sendBang, sendFloat, sendMessage, а также имеет настроенные ресиверы, чтобы вы могли получать выходные данные из вашего патча Pd.

+0

благодарственное Вы для вашего ответа, я пытаюсь скомпилировать образец кода C в папке libPd (просто попробовать), и я получаю «z_libpd.h: Нет такого файла или каталога компиляция завершена». – Wateredge

+0

Я компилирую с помощью «sudo gcc pdtest.c -o pdtest». Я попытался использовать «sudo make install» в папке libPd, но он говорит: «make: *** Нет правила для установки« install ». Спасибо – Wateredge

+1

Это должен быть принятый ответ. –

 Смежные вопросы

  • Нет связанных вопросов^_^