Я пытаюсь использовать libPd, оболочку для PureData.
Но документация плохая, и я не очень в C ++
Знаете ли вы, как я могу просто отправить плавающее значение в патч Pd?
Нужно ли устанавливать libPd или я могу просто включить файлы?
если вы хотите отправить значение в работающий экземпляр 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 и хотите общаться только с хост-приложением, используйте решение Адама (но ваш вопрос по этому поводу немного расплывчатый, поэтому я включаю этот ответ на всякий случай)
Прежде всего, проверьте 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.