2008/9/29

文件第2章:運作理論 2.3

2.3.訊息

Pd,物件之間的溝通藉由發送訊息,和/或音頻信號。Pd的訊息是零星的,像MIDI訊息或音樂"Note cards

2.3.1訊息結構

訊息包含一個選擇器其次是參數的任何數字。該選擇器是一個符號,它會出現在patch作為一個非數字字符串沒有空格,分號,或逗號。參數可能是符號或數字。Pd的數字保持在32位浮點數,使他們能夠代表整數正是在-83886088388608之間 。(在Max,有整數和浮點數不同的數據類型為,Pd只使用浮點數) 。

當訊息是通過一些東西(這常常是一個盒子的輸入,但可以收到一個訊息的任何事物),訊息的選擇器是核對接收。如果接收確認選擇器的訊息,他將進行一些相應的動作。舉例來說,這裡是一個"float"的物件:

在頂端的兩個矩形,通常都被稱為「輸入」,然而在左邊矩形的指示訊息到"float"物件本身,而右邊的矩形指示訊息到一個輔助的「輸入」的物件。浮點數物件(由左手邊輸入代表)接受訊息與選擇器"float" "bang"。右手邊輸入,只需要的訊息選擇器"float"。這兩個選擇器,隨著"symbol""list",通常是用來表示一個物件的主要動作,無論它可能是什麼,以致於物件可以相互聯繫與最大的靈活性。

鍵入開始和一個數字訊息是可能的,它不能被用來作為選擇器。一個單一的數字總是自動給予"float"選擇器,但是數字訊息跟隨其他的參數是被給予"list"選擇器。

2.3.2.深入第一個訊息傳遞

Pd每當一個訊息被初始化,接收器然後可以依序發送了進一步的訊息,而且這些訊息的接收器可以進而發送給其他接收。因此,每個訊息設立了相應訊息的樹狀。此樹狀是執行在深入的初次種類。例如下面的patch

訊息抵達的順序不是A-B-C-D就是A-C-D-B。「 C 」訊息是沒有動作,直到「 D 」訊息也是,和「A」是沒有執行,直到所有四個也是,其中的「 B 」或「 C 」是誰先執行是不確定的;這要取決於您作出什麼順序的連結(在MAX時,它會自動排序從右至左) 。

訊息傳遞可以帶來無限循環的排序在這裡顯示:

在這裡,左手邊的"+"不能完成處理,直至右手邊的"+"已發送的結果「 2 」,不能完成處理,直至左手邊的"+"已被送往「3」,等等在之上。Pd將輸出錯誤訊息報告"stack overflow"如果發生這種情況。

不過,這是合法作出迴圈,如果有一個"delay"物件在某處。當"delay"收到一個訊息,它的附表一個訊息,為將來(即使時間延遲是0 )和然後「完成」;pd的內部調度會後,延遲會稍後。

2.3.3.熱和冷的輸入和從右至左的出口順序

除少數例外(尤其是"timer"),物件對待他們的最左邊的入口作為「熱」在意義上的訊息對於左邊入口,能導致輸出訊息。因此,以下是合法(和合理的)迴圈結構:

這裡的"f"是一個"float"的簡稱。請注意,"+ 1"的輸出連接到"f"右手邊的輸入。這個「冷」輸入只是儲存數值,為下一次"f"被發出"bang"訊息。

發送訊息到一個物件的兩個或兩個以上輸入去指定其動作是經常滿意的。舉例來說,您可以使用"+"添加兩個數字,但這樣做,你必須確保使右手邊輸入處首先得到它的數值。否則,當左手邊的數值到來,"+"將進行增加(自左手邊輸入是「熱」輸入),並會加入這個值,無論是在右手邊輸入的先前設定。

當一個單一輸出是被連接的(無論是直接或任意通過訊息傳遞的長鏈)到一個單一物件的不同輸入是會出現問題。在這種情況下,這是其中的不確定因素導致兩個輸入會收到它們的訊息。舉例來說,假設您想使用的"+"去重複一個數字。以下是不正確:

在這裡,在連接右手邊輸入前我連接左邊輸入(雖然這不是明顯的在patch的外觀。)"+"從而增加新的輸入(左)到先前的輸入(右) 。

"trigger"「扳機」物件,簡稱"t",可以用來去分裂一個確定順序的單一輸出連接物件。按照慣例,Pd的所有的物件,當發送訊息給一個以上的輸入,是由右至左發送。如果您連接這些到第二物件的入口沒有越過電線,第二物件最後將獲得其最左邊的輸入,通常這會是你想要的。這裡是如何使用"trigger"「扳機」,以清晰先前例子意義:

「冷」(非最左邊的)輸入,幾乎普遍用來儲存單一的數值(無論是數字或符號。 )除了"line" "line~",這些數值是「粘性」,也就是說,一旦你設定數值是一件好事,直到下一次您所設定的數值。("line"的例外是理智的理由)。

一個問題,有時出現在執行命令,這是為了在這兩個訊息發送到一個單一「冷」輸入。在這種情況下,由於訊息合併,最後一個接收到的值是被計算完成。

2.3.4.訊息盒子

訊息盒子是你輸入訊息的文字盒子。當訊息盒子被啟動,無論是按一下它,或發送一些東西到其輸入,訊息或更多訊息被發送,無論是訊息盒子的輸出或其他被指定的地方。

在上面的這些訊息盒子第一個包含單一數字1.5,此訊息有一個"float"「浮動」的隱含選擇器。第二個是有三個數字在裡面的清單,然後第三個,選擇器是"my"和兩個參數是數字5和符號"toes"

多個訊息可能會以逗號分隔。以下所示:

在這裡,三個訊息是123的數字,他們是序列發送(沒有介入時間在他們之中,作為與"trigger"「扳機」物件,並具有深度優先的後果,所以,無論連結鏈的行動取決於"1"發生在依賴"2"任何事物等之前) 。

一個跟隨著分號的訊息必須指定一個給予目地的符號(換言之,分號就像是逗號之外,他們明確了「當前目地」,因此下個訊息指定一個新的目地)。「當前目標」是在第一個訊息盒子擁有的輸入。在下面的例子中,第一個分號立即重新定向訊息從輸出到命名為"fred"的物件(接收物件在這裡),並且同樣的下個訊息被發送到"sue"

某些其他物件(Pd的視窗,例如和矩陣)有Pd的名稱並可以發送訊息這種方式。此外,特別的物件"pd"被定義成您可能發送訊息以啟動和停止的DSP

你可以把變數放在訊息盒子,如下所示:

在這裡的"$1",指的是抵達訊息的變數(並沒有定義,如果您要發送"bang"的訊息,或如果您按一下該訊息盒子來啟動它)。錢型符號的變數不是數字就是符號,依賴有關傳入的訊息;若是符號,你甚至可以使用他們去指定的變數訊息選擇器或目的地。

沒有留言: