2017年6月12日 星期一

在r-pi上用pd自製合成器

嗨,我是北藝大的vanlan,又來到了pi+pd+arduino的教學整合
今天的應用是:合成器

點我下載 本次阿亂老師範例檔|以下動作都在pi裡執行



首先要先教大家克服一個問題:pi設成自動開機後,如果沒有事先開啟comport就讓pd也自動執行,pd就會當機

以下解法看仔細了!⇩⇊⇊⇊⇊⇊⇩
1.  建一個python檔(檔名:ser.py)


ser.py存檔在桌面新增的patch資料夾,程式內容是打開comport執行2秒

2.  打開終端機先測試看看:在終端機輸入python /home/pi/Desktop/patch/ser.py
     如果你的arduino有接好、訊號程式也是正確的,那執行的時候應該會看到終端機顯示出arduino跑的時候print的內容,2秒後會自動跳出

3.  以上如果正確,就可以把這個程式碼加進自動執行中:
     終端機輸入sudo nano /etc/profile,進入最後一行加入python /home/pi/Desktop/patch/ser.py
     存檔離開(crtl+x)

如此一來,pi開機時就會先執行兩秒打開comport的python程式,再執行pd




在這個合成器上,想讓pi可以外接輸入音源,要在音源孔接一個音效卡(有耳機孔、麥克風孔),耳機輸出端接喇叭或耳機,麥克風輸入端可以接電腦或手機等
以輸入的音源作為基底,用以下pd程式改變聲音
記得輸入源的音量先關小(約一半),避免輸入時音就已經爆掉了
在pd裡面用 [*~ 10]調整音量


合成器使用的套件是DIY2(點擊下載)

範例程式中的[diy2] 點一下會跑出這個視窗
我們先試試mono-effects裡面的EQ3效果:點一下EQ3前面的bang,然後點一下[pd $0-creater]
會跳出一個視窗,把裡面的EQ3整個複製到你的主程式中

先試著用Hslider來控制EQ3裡面的元件
[/127] 因為Hslider的數值是0~127
下面那串,加入補插間[line]讓數值的調變可以比較滑順(細微)
EQ3也可以換成其他任何的試試看,你可以試試simpleFM

我們把剛剛的slider複製四組,上方接的[unpack f f f f]、32 43 76 57和114 115 17 80是方便將四個slider的數值調整成指定數值
[unpack f f f f] : 將訊號解封包成4個浮點數

左上角那塊是接收音高、調整音量
為了讓程式看起來更乾淨,用鍵盤控制音高的程式下方接[s midinote],並用[r midinote]來接收
[t f b] : trigger接收訊號 / float / bang,下方兩個訊號口左邊傳float右邊傳bang
這個bang的訊號送到下面接給另外一個adsr模組,浮點數則往下控制音量
左邊的slider控制音量,接到浮點數下方[+ 0]右上的訊號孔,變更+ 0的數值
adsr模組中,[moses 0.015]是指接收的訊號高於0.015則bang右邊,低於0.015則bang左邊


















[key]是鍵盤輸入
[sel]後面的數值是根據鍵盤ASCII碼
key底下接了顯示數值,按按看就可以知道哪個按鍵的ASCII碼是什麼
以第一組做說明:
按下鍵盤p (ASCII=122),送出訊號1,觸發bang,送出訊號60(=音高中央Do的頻率)