libPd和c ++包装器实现

时间:2013-09-29 14:48:42

标签: c++ puredata

我正在尝试使用libPd,它是PureData的包装器。 但文档很差,我不太熟悉C ++ 你知道我怎样才能简单地将浮动值发送到Pd补丁吗?

我是否需要安装libPd或者我可以只包含这些文件?

2 个答案:

答案 0 :(得分:5)

首先,查看ofxpd。它具有与OpenFrameworks一起出色的libpd实现。如果您从C ++开始,您可能希望从OpenFrameworks开始,因为它有一些很好的文档,并且通过ofxpd扩展与Pd很好地集成。

开始使用libpd有两个很好的参考资料(虽然它们都没有详细介绍C ++):the original articlePeter Brinkmann's book

在libpd wiki上有一个p age for getting started with libpd。底部的链接项目在main.cpp中有一些代码片段,演示了如何将浮点数发送到Pd补丁。

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

在您的Pd补丁中,您将设置[从CPP接收],然后这些消息将在您的补丁中注册。

为了获得打印输出,您必须使用libpd中的接收器来接收字符串,然后对它们执行某些操作。 libpd附带了PdBase,这是一个很好的类,用于启动和运行libpd。 PdBase有sendBang,sendFloat,sendMessage,并且还设置了接收器,以便您可以从Pd补丁获得输出。

答案 1 :(得分:2)

如果要将值发送到正在运行的Pd实例(独立应用程序),可以通过Pd的网络设施进行。

e.g。

[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-socket将 FUDI -messages发送给Pd。

FUDI消息实际上是简单的文本字符串,原子由空格和终止分号分隔,例如

accelerator 1.23 3.14 2.97; button 1;

您可能也考虑过使用OSC,但为此您需要在Pd端使用一些外部(OSC by mrpeach; net by mrpeach(或iemnet))。

就性能而言,我一直在使用后者的复杂跟踪数据(每帧数百个值为125fps)和流媒体多声道音频,所以我不认为这是一个问题。

如果您已经在使用libPd并且只想从主机应用程序进行通信,请使用Adam的解决方案(但您的问题对此有点模糊,所以我包括这个答案以防万一)