2017年7月17日 星期一

Pd 聲音視覺化1-3利用迴圈建立線段



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

前言:

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
---------------------------



____________________________________________________________
教學影片1: 如何在pd 與processing 建立for迴圈,與數值反覆循環


教學影片2 : 利用迴圈建立的線段讀取陣列與顏色數值更改



__________________________

[1, 0 1000] -[line] 1000毫秒=1s時間內,數值由0~1 變化
[hsv2rgb] 色彩模式由hsv轉rgb




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




Pd 聲音視覺化1-1 即時聲音連結影像

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

前言:

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): 建立gem視窗
[gemwin] : 建立gem視窗
[dimen 500 500, create, 1] :  尺寸500x500 ,建立 ,true
[destroy] :  關閉視窗

[select 0 1]  :相當於 if else 指令

toggle  打X為1,打開視窗
           空白為0, 關閉視窗

[loadbang]-[1]-[toggle]  程式運行自動執行
______
[send pd]:傳送訊息給pd主程式
[dsp 1] :聲音打開
[dsp 0]:聲音關閉 
_______________________________
(09:35): 建立聲音
聲音物件尾端皆含有“~”符號,區別於邏輯物件



[osc~ 400] : oscillator振盪器400hz(頻率)


[dac~] : digital - analog 數位轉類比,相當於喇叭功能

______________________________________________________________
(13:40): 基本gem物件

[gemhead] : 建立繪圖物件開頭
[0.77] : number物件
** 執行模式下-  shift鍵+滑鼠拖曳 -數值以小數點0.01幅度變化
[scale] : 比例縮放,第二個輸入端控制比例縮放參數
[circle] : 圓形繪圖物件,後方參數為半徑大小, 4為滿版圓形
**方正視窗下,0為中心位置,-4與4為視窗左右邊界位置
_______________________________
(13:45): 聲音控制圖像
[unsig~10] : 將osc~訊號轉成float數值,10參數代表每10毫秒讀取一次(1000 = 1s)

** [unsig~]必須安裝”iemlib” library
    參考教學http://www.dazegraffiti.com/2017/07/unsig.html


[adc~] analog to digital 類比轉數位 ,相當於接收麥克風功能
[env~] 輸出分貝(db)數據,數值1~100
[/100] 除以100,為了使數據可以在0.01~之間連接scale參數改變circle大小
____________________________________________________________________
(21:02) 建立繪圖群組
[separator] : gemhead以下如果超過兩個物件,必須使用separator分開
[translateXYZ] : 位移XYZ


「解惑」關於某一個功能物件找不到,以[unsig~]為例

pd在0.46版以後,鼓勵大家學會自行安裝擴充的lib,所以如果有物件不能使用時,請依照下列步驟安裝上去。

1.步驟一:找尋相關物件的lib名稱,以[unsig~]而言,你可以到google輸入
unsig~ site:http://write.flossmanuals.net/pure-data/



你就會在手冊中找到 ,原來unsig~是屬於 iemlib這個物件



2.步驟二:到 help>find externals 裡面輸入:iemlib


3.步驟三:到 path,新增一個位置,以後pd開啟後,就會自動找到他









2017年7月5日 星期三

[ pd 數值傳送到 Arduino ] & 水龍頭 [ spigot ]

(代po同學遲po的FangJing教學文!抱歉遲了!)

嗨,我是北藝學生FangJing,在這裡跟大家分享從阿亂老師那獲得的的小知識,pd傳訊號到arduino的方法,以及pd裡 spigot 的功能。

——————————————————————

[ pd 數值傳送到 Arduino ] 
假定目的:讓led隨著pd裡的metro亮暗。

Arduino
首先要在Arduino的部分加上以下的程式碼:

1.
宣告一個整數(int) pdin,預設為10 (後面會說明,10為自己設定的數值,目的為讓led燈暗。) 

2.
在 loop() 的部分增加以下程式碼: 
(pink)
讓arduino判斷是否有數值傳入
“ Serial.available() > 0 “ 判斷 如果這個溝通管道有收到數值的話,就讀取它放進 pdin 裡頭。

(blue)
判斷讀入的數值執行相對應的動作
設定收到的數值如果為11,led燈亮,為10或非11的數值時(else),led燈暗。



Pure Data
接著是pd的部分: 


(增加部分為紅色部分,藍色部分的說明可以參照前幾篇文章。)
在metro下方增加object “t b b“ (trigger bang bang),當metro 送“0”時啟動左邊bang,送“1”時啟動右邊bang,並將數值連接回 comport,arduino就能夠讀取到pd的數值了。

p.s. [ 關於設定值 10 & 11 ]
這個數值是自己訂定的,也可以改成任何0與1以外的數值,pd會隨著metro的數值傳送10與11到arduino,讓arduino判斷收到10的時候暗,收到11的時候亮,以達到led燈跟著metro閃爍的效果。




p.s.s.  [ object  “spigot”  的用法 ]
以下圖狀況為例,綠色bang觸發時不會引發spigot下方的動作,除非綠色bang觸發時符合spigot右方的條件,數值才會通過,執行spigot下方接連的部分。

也就是說,spigot右方入口為通過條件,左方入口為欲通過的數值,符合條件才會通過並執行下方的程式。  

2017年6月19日 星期一

Pd裡的DIY2切換

嗨,這裡是北藝大的小宇,阿亂老師這次教的是Pd裡的DIY2切換
關於DIY2 上一篇有相關的介紹,還沒安裝的人可以回去參考(點這裡下載DIY2

前言
當你有一個音檔,想要使用多個DIY2中的效果,做一個效果器的切換,方法如下。
資料夾
創建一個資料夾,
將你下載或是已經錄製好的「音檔」與「pd的程式碼」,放置在這個資料夾 
讀取檔案

建立Message
打上[open
檔名.檔案格式, start]
這邊的「
檔名.檔案格式」為「shoot1.wav
建立Object
打上[readsf~]: read some file,表示在pd中讀取這個檔案
*將[readsf~]右下的那點,接回[open 檔名.檔案格式, start] —> 循環播放這個音檔

—————————————————————————————————————
注意!!當你的pd出現以下的訊息的時候 

表示這個檔案在下載後的格式,pd無法辨認,在下載檔案的過程中發生了點問題
這個時候,可以到Audacity(一個音樂編輯軟題),或是任何的音樂編輯軟體 




開啟檔案,在裡面重新的輸出並且改檔名
shoot1.wav」—>「s1.wav」(記得pd裡open shoot1.wav也要改成open s1.wav)


DIY2效果
下載DIY2套件,放入pd的extra資料夾,在Preferences裡面去做連接套件的設定 
設定好之後
建立Object  [diy-makeobjects]
點一下進入,選擇想要的效果器,放入到主程式中 

[*~ 1]:音量

[throw~ all]和[catch~ all]相對應(可以改成[r~ all]和[s~ all],r = receive,s =send)
throw:丟出訊號 / catch:接收訊號
all為訊號名稱,可以自訂,但是丟出跟接收的名稱要相同
[dac~]:發出聲音

切換 
建立Slider
底下接一個Number可以看到Slider的數值
Slider的值為 0 - 127
[/ 31]:除以31,將 0 - 127等分,
底下的Number可以看到除以31之後的數值
[int]:把上面的數值變成整數,
所以下方的數值就會變成 0 - 4
註:可以先除你要的等份
ex:最後要0-4,所以先[/ 4],
Slider拉到最底,所看到的數值為大約31
所以將[/ 4] —> [/ 31]之後,
最後[int]的結果,就會是 0 - 4




[sel 0 1 2 3 4]:當上面的數值為0的時候會發生什麼事,1的時候會發生什麼事
依此類推
[0 0 0 0]、[1 0 0 0]、[0 1 0 0]、[0 0 1 0]、[0 0 0 1]:
一個 [  ]裡面有四個數字,代表有四個物件
用sel的0、1、2、3、4去做切換
ex: sel 0 —> [0 0 0 0] —> 所以效果器都沒有接收到訊號
      sel 1 —> [1 0 0 0] —> 第一個效果器接收到訊號(使用第一個效果器)
[unpack f f f f]:把上面的訊號拆開來
接收剛剛sel切換的結果,分送到底下的效果器,把[unpack f f f f]接到效果器的[*~ 1]


程式碼