puredata — реализация оболочки libPd и c ++

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

Нужно ли устанавливать 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-сообщения для Pd.

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

accelerator 1.23 3.14 2.97; button 1;

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

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

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

2

Другие решения

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

Для начала работы с libpd есть две хорошие ссылки (хотя ни одна из них не описывает слишком подробно C ++): оригинальная статья а также Книга Питера Бринкмана.

На вики libpd есть пвозраст для начала работы с libpd. Связанный проект внизу содержит несколько фрагментов кода в main.cpp, которые демонстрируют, как отправлять плавающие элементы в ваш патч Pd.

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

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

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

5

По вопросам рекламы [email protected]