2017年7月17日 星期一

Pd 聲音視覺化1-2 陣列

----以下由小編紀錄阿亂老師 上課內容 與 重點筆記分享----


前言:

1-1 內容是如何影像反應即時的聲音,紀錄的是某刻的聲音影像
http://www.dazegraffiti.com/2017/07/pd-1-1.html
1-2 紀錄一段時間的聲音數據,利用clone畫出一段時間的聲音影像
http://www.dazegraffiti.com/2017/07/pd-1-2.html
1-3 利用迴圈畫出一段線段並讀取陣列數據
http://www.dazegraffiti.com/2017/07/pd-1.html
---------------------------

目標:
利用陣列紀錄聲音,gem繪圖物件相關參數讀取陣列數據內容
----------------------------

____________________________________________________________
教學影片:(影片比較長,以下筆記有標註影片時間點可以參考)




___________________________________
(00:50): 建立array陣列

put> array 建立陣列
滑鼠左鍵拖曳線段上直接儲存數據入陣列
圖表上右鍵properties可再修改屬性
_______________________
(01:35): 陣列讀取數值



[tabread vol]:讀取vol陣列,vol陣列名稱,
_
上方輸入端是是指陣列中第100個 
(圖表水平X軸由左至右 0~ size,最右端是陣列時size的數值)
_
輸出端輸出第100個儲存的數據是-0.36
(圖表垂直Y軸由下至上 -1~1)
_
_______________________
(03:16): 陣列寫入數值


(vol 陣列名稱)
[tabwirte]  右方指定輸入索引值(圖表水平X軸),左方數據輸入(圖表垂直X軸)
[tabwrite~] 聲音物件數據直接寫入陣列
dsp 記得打開
輸入端必須加bang物件去觸發輸入
______________________________________________
(05:50): 利用陣列數據畫出gem物件

[trigger] 複製訊號,輸出端由右至左依序複製出訊號 
[trigger float float] 表示複製出兩個float數據,下方輸出端會自動出現兩個

[trigger float bang] 表示右方輸出bang,左方輸出數據
可以簡寫成[t f b]
a: anything
f: float
b: bang
l: list


gemhead執行時先觸發讀取[tabread vol]陣列第100個數據
並將數據連結到位移物件的Y輸入端上
gem視窗出現的circle 的Y座標值, 即是陣列內第100的數值 


______________________________________________
(09:09): 建立dot 副程式

建立一個新文件dot.pd
將繪圖gemhead物件放入並儲存於跟主程式相同的資料夾內
(music.pd是主程式 dot.pd存放一樣的資料夾位置才可以呼叫)










($1指dot.pd第一個輸入端inlet的變數)
[expr ] 運算式"$f1"指的是$1的數值,
算式結果 


當$1 = 0 輸出-4

當$1 = 200 輸出4 (200是陣列設定的size)
[expr ] 運算式輸出到物件位移X值輸入端
[tabread]讀取陣列到物件位移Y值輸入端
______________________________________________
(13:28): clone物件複製dot



[clone 200 dot]  複製200等分 dot.pd patch
dot複製200份以後,點連成線段

________________________
(15:15):  使波形線段不斷更新運動


使用[metro] 不斷觸發[tabwrite],陣列不斷更新gem波形跟著運動
[metro 1000] 節拍器1000毫秒=1秒,指每秒觸發一次,數值越小越快
________________________
(16:35):  貼圖取代向量circle

[pix_image] 讀取圖片
[pix_texture] 貼上材質
[alpha]建立透明度
[square] 正方形向量

要將貼圖取代原本dot.pd裡的circle,
如果將讀取材質動作寫在dot.pd內
複製clone 200等分時,相當於讀取圖片動作重複 200次
非常耗效能,
因此比較恰當的做法是先在主程式將讀取圖片動作完成
再利用[send] [receive]傳送入dot.pd副程式內

主程式內先將圖片讀取完成 傳送到dot.pd內的gemhead