2017年5月26日 星期五

[pd] recorder + looper


嗨,我是北藝大的vanlan,今天阿亂老師的課堂上教大家做的是looper
功能有:麥克風錄音、利用剛錄的聲音編寫音樂/節奏、播放編寫的結果

點此下載阿亂老師課堂範例檔|以下將程式碼分開解釋

record mode(紫)
麥克風錄音

play mode(紅)
編寫節奏、播放結果

[loadbang] 開啟檔案時自動執行
紫紅按鈕為Toggle,切換模式開關

用麥克風收音(左)
播出聲音、調整音量(右)
[/ 127] 是因為slider的預設值

[s~] send
[r~] receive
















用麥克風錄製聲音

[r chMode]和[s chMode]相對應,r = receive,s = send
黃色bang相當於觸發按鈕
觸發後進行後面的動作:麥克風收音1秒錄成s1.wav

[t b b] 將訊號複製成兩份,先打開一個s1.wav(右邊)然後進行寫入(左邊)
[del 1000] [stop] 觸發後一秒結束(錄製一秒),del = delay
[writesf~] write sound file
[readsf~] read sound file
[s~ dac] 訊號送到喇叭播放

老師的範例做了四組(4個按鈕)
這時候[s~ dac]只能有一個,四組的[readsf~]都要接到同一個[s~ dac]

recorder子程式

























為了讓程式整齊,我們在主程式新增一個object: [pd recorder],會跳出一個叫recorder的子程式
把剛剛寫好錄製麥克風聲音的部分剪下、貼到這個子程式中
(點一下 [pd recorder]即可開啟子程式)
刪除本來的黃色按鈕(按鈕留在主程式就好)改成[inlet],主程式上的[pd recorder]上排就會多一個接孔
並在右邊的bang上接一個[outlet],[pd recorder]的下排也會多一個接孔
在主程式中[pd recorder]的上下排接孔就可以接上bang
bang上方的[key][sel 49 50 51 52]是為了方便控制,用鍵盤的1,2,3,4鍵來控制四個按鈕的觸發


looper主程式

深黃色下半部所接的就是looper
[r chPlay]是接收play mode的[s chPlay]
當深黃色的bang被觸發,就寫進array裡
[tabwrite a] table(=array) write a,寫進名稱為a的array
(b c d 以此類推)

[t f f] 把訊號複製成兩份,都是float(浮點數)
[t b b f] 把訊號複製成bang bang float



新增array(陣列),按右鍵選擇properties可更改名稱、尺寸
新增四個array,分別命名為a b c d












這裡是讓a b c d 陣列訊號歸零

當然你也可以寫成 [a const -1;]
那點擊這裡時a陣列的值就會是-1









這個部分是looper中設定循環、讀取陣列進行播放的部分

[invert] 也可以寫成[expr 1-$f1],相反的意思,功能是切換0,1(expo = express)

[f] [+ 1] [% 1000] 是計數器,從1-1000循環計數
底下將訊號分成四份,分別接到讀取四個陣列 [tabread a] (b c d以此類推)
[s banga] send bang a 傳送觸發a陣列


ps:有可能需要補裝[invert]的library
     缺少library的物件可以到下方網址搜尋需要安裝什麼library
     http://blog.joehahn.ws/list-puredata-objects-and-extended-objects












整理一下玩法:

1.  record mode 先不要打開,輪流按鍵盤1,2,3,4錄製聲音
     (如果聲音沒有錄進去,可以檢查Media-Audio Settings的麥克風選擇)
2.  打開record mode,再輪流按鍵盤1,2,3,4聽聽看剛錄的聲音
    (如果沒聲音,檢查dsp是否有開、slider是否有拉到右邊)
3. 打開play mode,依你的喜好鍵入1,2,3,4開始錄製音樂
    (array會出現訊號,那就是成功輸入了)
4. 關掉play mode,就可以聽到剛剛寫的音樂一直循環播放
    (記得檢查[invert]底下的toggle是否有打開)


2017年5月11日 星期四

在r-pi上用pd接受arduino訊號


嗨我是北藝大的vanlan,今天的課堂教學是pi+pd+arduino

如果你的pi還沒有裝arduino,請在終端機輸入 $ sudo apt-get install arduino
然後可以先隨便燒一個程式進去測試

我們要幫pd安裝一個可以
在/home/pi底下建立一個資料夾“pd-externals”,再建一個資料夾“deke-plugin”,放入外掛檔案deke-plugin.tcl
( /home/pi/pd-externals(自己建)/deken-plugin(自己建)/deken-plugin.tcl )

裝好後,pd的Help底下就會多了Find externals的選項
並且在pd視窗會出現如下圖第一行的字樣

打開receive.pd檔會多跳出兩個錯誤訊息,代表缺少程式中的這兩個library:comport,moocow

進到Find externals,安裝pdstring(選第二個)和comport(選第一個) 


成功安裝的話,重新打開pd時comport的錯誤就會消失了
並且在Help-Browser裡面可以看到pdstring/跟comport/
這些東西的安裝檔案路徑會在pi的usr/lib/pd/extra

由於這次不使用moocow的library而是改用pdstring,所以我們要改一下pd的程式
打開receive.pd,快點兩下pd arduino2pd

會出現另一個視窗,程式如下

如果在電腦中,直接使用上方程式就可以了
(尚未安裝moocow的library要記得補安裝!)
而在pi中,這裡有兩個地方要修改:
1. 把"moocow/" 刪除只留下bytes2any
2. 在旁邊新增一個物件[pdstring]

這樣pd就可以接收來自arduino的訊號了

receive.pd 下載 
deken-plugin.tcl 下載 


arduino寫法如下:


















void setup()
{
Serial.begin(9600);
}
void loop()
{

Serial.print("\t");
Serial.print("melody");
Serial.print(" ");
Serial.println(100);
Serial.print("\t");

Serial.print("\n");
delay(500);
}


其中兩個Serial.print("\t")所包住的內容就是會傳到pd的訊號
上述pd內容中,pd arduino2pd的程式就是在判斷這樣形成一個封包

pd的主程式中加入[route +訊號名稱]
例如[route melody]。則在arduino中Serial.print("\t")下行寫Serial.print("melody")
後面的Serial.println(100)指定了傳送的數值,當然100也可以用變數代換

上圖中Serial.println("L 11 22")意思是:訊號名稱L,帶有11,22兩個數字訊號
所以pd的[route L]下方接了[unpack f f],將訊號解封包成兩個float(浮點數)

2017年5月5日 星期五

pd音量控制圖像大小

嗨,我是北藝大的vanlan,接下來的教學是阿亂老師在聲音裝置課的課程紀錄

關於Gem Library的安裝請參考 http://www.dazegraffiti.com/2016/04/deken-plugin.html

另外,補充快速尋找Gem example的方法


如果你用的是mac也可以選擇以下做法:
應用程式 - Pd - 顯示套件內容 - Contents - extra -->把extra資料夾拉近側邊欄


回歸正題

首先要做的是建一個gem視窗、測試麥克風音量
畫一個圓,圓的大小隨音量改變

   [gemwin]:建立一個gem視窗

   [gemhead]:建立一個gem物件(下面接的[scale 1]、[circle 1]是定義物件樣貌)

   [env~]顯示的數值就是麥克風的音量範圍
   每個人的電腦麥克風音量範圍不一樣,根據音量範圍去做數值上的調整

   [pow 4]:把收到的數值變成四倍,接回到[scale 1]讓scale隨音量改變



加入圖檔,圖的大小隨音量改變

   [destroy]:關掉畫面

   [dimen 800 400]:設定畫面大小800*400

   [pix_image dot.png]:放入自己畫的圖(圖檔要跟程式存在同一個資料夾)

   [translateXYZ 4 0 0]:設定圖檔的位置(x y z)

   [alpha]:開啟圖檔的透明度,才會透明



過濾影響圖形的聲音頻率範圍


   [bp~] :bandpass,過濾聲音頻率

   [hip~]:過濾某頻率之上的聲音

   [lop~]:過濾某頻率之下的聲音



[pi+pd]讓raspberry pi自動執行purdata檔案

(阿亂老師的課程筆記小幫手首次登場)
嗨,我是北藝大的vanlan,接下來的教學是阿亂老師的聲音裝置課的課程紀錄

今天教的是「如何讓寫好的pd程式可以在r-pi上自動執行」
以下動作都在raspi3裡執行


先說一些在pi裡pd的相關事項:

1)在pi上安裝pd只需要在終端機上輸入$ sudo apt-get install puredata


2)如果pd一直沒有聲音,請再次進入終端機,輸入$ sudo raspi-config,進入pi的設定


Advanced Options->Audio->(0)Auto改選(1) 通常就會有聲音了



進入自動執行的正題:

步驟1,打開終端機,輸入$ sudo nano /etc/profile
          (如果你的pi是第一代或第二代,輸入這行之前先輸入$ sudo nano /etc/inittab)

步驟2,按i進入編輯模式,在最後一行加入pd -nogui /home/pi/Desktop/main.pd  
           (路徑請自行改成要自動播放的檔案的存放位置、檔名)
             按esc -> :w+enter存檔 -> :q+enter離開

步驟3,輸入$ sudo raspi-config進入pi的設定,設定純文字模式開機
             選Boot Options -> B1 Desktop -> B2 Console Auto Login

從此這個pi只要插電就會直接執行你的pd檔啦~



把自動執行變回去:

步驟1,crtl+c跳出剛剛被鎖死的模式

步驟2,按按上下鍵,選到剛剛的sudo nano /etc/profile
             進入後刪除註解(在前面加入#)剛剛加的那行pd-nogui /home/pi/Desktop/main.pd
             存檔退出
步驟3,輸入$ sudo raspi-config進入pi的設定
             選Boot Options -> B1 Desktop -> B4 Desktop Auto Login
             Finish後讓他reboot重新開機就好囉