2

我正在尝试使用 libPd,它是 PureData 的包装器。但是文档很差而且我不是很喜欢 C++ 你知道我怎么可以简单地将一个浮点值发送到一个 Pd 补丁吗?

我需要安装 libPd 还是只包含文件?

4

2 回答 2

5

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

有两个很好的 libpd 入门参考资料(尽管都没有详细介绍 C++):原始文章Peter Brinkmann 的书

在 libpd wiki 上有开始使用 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 补丁中获取输出。

于 2013-09-30T13:25:21.040 回答
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,但为此您需要 Pd 端的一些外部组件(mrpeach 提供的 OSC;mrpeach 提供的网络(或 iemnet))。

至于性能,我一直使用后者处理复杂的跟踪数据(每帧数百个值,125fps)和流式传输多通道音频,所以我认为这不是问题。

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

于 2013-10-06T18:29:04.217 回答