2013-09-29 35 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(如果你啓動可執行文件要送你有一個相當大的開銷!每條消息EG)減緩你的目的,你可以在你的應用程序直接構造消息,並使用普通的UDP-socket發送FUDI - 給Pd的消息。

FUDI消息確實是簡單的文本字符串,原子由空白和終止分號分隔,例如,

accelerator 1.23 3.14 2.97; button 1; 

可能還考慮使用OSC,但對於這一點,你需要一些外部組件(由mrpeach OSC;通過mrpeach(或iemnet)淨)對鈀的一面。對於性能,我一直使用後者與複雜的跟蹤數據(每幀125fps數百個值)和流多聲道音頻,所以我不認爲這是一個問題。

如果你已經使用libPd只有想從主機應用程序進行通信,用亞當的解決方案(但你的問題是有點含糊不清這一點,所以我包括這個答案,以防萬一)

+0

謝謝,但即使使用UDP也太慢了。 我需要從紅外距離傳感器讀取數值,當我只使用一個傳感器時速度正常,但是當我使用兩個傳感器時,速度不再可接受。 – Wateredge

+1

在這種情況下,我認爲問題不是在Pd端而是在發送端 - 例如, 'pdsend'的通話開銷。我已經相應地更新了答案。 –

+0

謝謝,我試圖使用OSCpack,但是當我編譯示例代碼時,我得到:「SimpleSend.cpp:5:41:致命錯誤:osc/OscOutboundPacketStream.h:沒有這樣的文件或目錄」 這很奇怪,因爲該文件是那裏! 預先感謝您;) – Wateredge

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的補丁,你會建立一個[接收fromCPP],然後這些消息將在您更新寄存器。

爲了獲得打印輸出,您必須使用libpd中的接收器來接收字符串,然後對它們執行某些操作。 libpd附帶了PdBase,這是一個讓libpd啓動並運行的絕佳課程。 PdBase具有sendBang,sendFloat,sendMessage,並且還設置了接收器,以便您可以從Pd修補程序獲取輸出。

+0

謝謝你爲你的答案,我試圖編譯libPd文件夾中的示例C代碼(只是嘗試),我得到「z_libpd.h:編譯終止沒有這樣的文件或目錄 」。 – Wateredge

+0

我在使用「sudo gcc pdtest.c -o pdtest」進行編譯。我試過在libPd文件夾中使用「sudo make install」,但它說「make:***沒有規則讓目標'安裝'。停止。」謝謝 – Wateredge

+1

這應該是被接受的答案。 –