如何用MAX/Msp抄襲一曲Alva Noto(二)先做第一軌吧
來自專欄 MAX/Msp 抗焦慮指南4 人贊了文章
first of all,新建一個patcher,建一個object,裡邊寫上ezdac~:
回車或者滑鼠點擊一下pather空白區域這個object就變成這樣:
這個是喇叭,因為我們做的是聲音相關的事,必須有。同時ezdac~是個圖形化界面,圖形界面在聲音所要使用的object裡邊比較多,做圖像時候的反而比較少,因為聲音的結果靠聽,中間需要觀察的內容特別多,而圖像直接能在窗口看到結果。這個喇叭上邊有兩個灰色的點,是兩個輸入介面,左邊介面進入的信號從左聲道輸出,右邊進入的從右聲道輸出。有一點需要注意的是,ezdac~不僅代表喇叭,同時還代表MAX/Msp的音頻系統,就是說你打開ezdac~(點擊一次就切換開關,顏色會提示你現在的狀態),整個音頻系統就開始運作,同時也就能聽到聲音,關閉它整個音頻系統都停止,不只是聽不見聲音這麼簡單,而是聲音相關的信號都要停滯,這個有什麼影響?先說一個,假如你的Msp裡邊有好幾個ezdac~那麼你關閉其中任何一個,所有都會關掉,因為你控制的是整個音頻系統,所有的喇叭圖標只是一個個投射出的分身而已。如果現在有點暈,沒事兒,遇見具體情況的時候就清楚了。
然後在ezdac~上邊,新建一個live.gain~:
在object框里打字的時候MAX會自動幫你填充,就像圖裡展開的這個列表,所以並不太用死記硬背每個object準確的全部拼寫。確定之後,現在又多了一個圖形界面了:
連上線,變這樣:
注意一下,live.gain~有四個輸出接點,只連前兩個。用過Ableton Live的同學應該比較熟悉它,在MAX裡邊有好幾個live的object,都是以「live.」開頭的。看名字知道這個東西就是增益了,這裡用來控制音量(拖旁邊那個小三角)。接下來就要合成我們在頻譜里看到的這個音色了。剛才說了用的是FM合成(不明白的搜索一下,說起來太長了··· ···),那麼現在就是要先合成這個音色,MAX裡邊有這個object,叫做simpleFM~,現在patcher里的內容變成這樣了:
一定注意頂上四個數字要用float,是有小數點的數字方塊。這等同於代碼裡邊的聲明type/類型,一定要分清楚整數和浮點數,在Msp(MAX的聲音部分),所有要用的參數都是浮點數!也就是有小數點的數!)用錯後果很嚴重!輕則燒音箱,重則爛耳膜!做圖像的朋友們是沒有這種生理風險的。
simpleFM~下邊的一個叫 *~ 的object,符號都認識,乘以。從FM合成出來的聲音是原始大小,也就是最大音量1. (在Msp裡邊靜音是0. ,音量最大是1. ),我們先別管兩個sig~和兩個line~是幹嘛的,我們把第四個音量參數寫成0.1,也就是讓音量乘以0.1,變成10分之一的音量。你可以試試改變這個數的大小,音量/振幅會有明顯變化,但最好不要超過1. ,因為後邊如果沒有壓縮或壓線就會爆紅,俗稱「呲了」,當然你可以故意追求這個,比如pan sonic專輯《Kesto》第一張第三曲onkalo就故意用了這個效果。
這樣,基本FM合成就搭好了(其實你可以在鎖定狀態下雙擊打開simpleFM~看看內部,這個合成方式是怎麼用基礎object搭建起來的)。Alva noto的音色非常乾淨和數碼,那麼一般來說合成方式可能不會把很多複雜的效果器串起來,理論上只用這個也能出差不多的音色,得試試看。
我這弄了一會,找到這幾個參數:
聲音和原版的比起來是這樣(左邊一半是noto的,右邊是我們MAX目前的):
從頻譜看,頻率差不多類似,諧波/泛音少一些,8000Hz這裡音量大了,而10000以上的又弱了點,應該是載波頻率選的不一樣,但是就不要把時間耗在這些細節了,先破解大的思路,最後補。其實你在這裡可以隨意改變這四個浮點數裡邊的數值,FM用特別少的參數就可以做變化很大的聲音。
音色完了我們開始做時間,這個左右交叉滴答的規律是左50毫秒(ms),右50毫秒循環,那麼這種事情MAX最擅長,首先你需要一個metro:
它的作用是在一定時間間隔發出一個「bang」(就是「執行」的意思)給接收它的object,我們這裡是50毫秒,所以要在metro這個單詞後邊空格再寫一個50,變成這樣:
是的,MAX裡邊的時間全部是用毫秒計算的。對了,有一個Robert Henke(Monolake)的採訪,問他最喜歡MAX裡邊哪個object?他說是metro。為啥一個技術和聽覺流的專家這麼喜歡metro呢?(他是MAX/Msp深度使用者)因為實在太方便了,我們如果用代碼在processing(JAVA)裡邊實現剛才這個metro,得這麼寫:
int savedTime;
int totalTime = 50; //間隔多久來一次啊?50毫秒啊
void setup() {
savedTime = millis();
}
void draw() {
//算一下過去了多長的時間了?
int passedTime = millis() - savedTime;
if (passedTime > totalTime) {
/*hello,beginners,這裡是注釋行,要實現的功能寫這裡
*但是在MAX里,是metro伸出來一根線哦
*/
savedTime = millis(); //存一下現在的時間,重設計時器
}
}
以上。
我一定是瘋了,文檔打代碼還調整縮進,應該是失眠得蛋疼。也就是這些強迫症讓死亡嚇得我瑟瑟發抖,那來一波弗洛伊德·斯坦伯格抖動:
True detective簡直完美。除去這段代碼裡邊的中文(那是給人看的),其他單詞和標點(這才是給計算機看的)這麼將近十行代碼加起來差不多實現的和「metro 50」一樣的功能。
然後我們再加幾個東西,也就是被藍色框住的部分:
一定要注意每一個字母、每一根連線是否對,如果寫錯了字,那麼object會變成黃色,比如我亂寫一個並不存在的東西,看看寫錯和寫對的區別:
另外,按command+m,或者windows的control+m,能打開console,寫錯東西會紅色給你報錯,其實我建議console一直打開,不時留意,因為任何邏輯上和打字上的錯誤都會給你顯示。
如果console一片安靜祥和,那麼回到patcher。首先是metro的50後邊多了個@active 1,在MAX裡邊@代表屬性(attribute),這個屬性active的意思是,給定metro運轉(active)狀態,1代表運轉,0代表停止,很合理,計算機就是0和1,MAX里大多數的開關也是用0和1表示的。active 1,就是說無論何時我們打開程序,這個metro就開始1秒鐘均勻發出20個執行了。(1秒==1000毫秒,除以50,等於20次)
metro下邊連了一個帶叉的方塊,在object框里輸入toggle就會得到,但更多是用快捷鍵——t ,因為它太常用了,作用是開關,也就是開==1,關==0,它每接收一次bang(也就是metro發出的「執行」),就會切換輸出0和1,我們這裡用它不是嚴格當作開關用,而是當作音量的0和1切換,不是左邊響一聲右邊響一聲嗎?那就是說50ms開一次,50ms關一次。這個0和1接在再一次出現的 *~ 上,不就是在沒有音量和10分之1音量間切換了嗎(因為剛才就乘以0.1了)。
這裡還出現了一個object : !- 1. (1.前邊有空格),它的作用是用1. 減去進來的數,也就是說從toggle發送進來的數是1,那麼1.-1等於0,進來的數是0,那麼1.-0等於1。這樣左邊(左聲道)是1的時候右邊是0,左邊是0的時候右邊是1,就是左右切換了。我愛數學。
/***
做音樂的朋友可能要問了,沒有包絡嗎?
有,只是attack和release都是0,而decay和sustain就是一根線。為什麼要用0,因為音色上,這個破掉的噠聲就是故意要保留的部分,不然就完全失去那個味道了。我寫的時候花了好多時間嘗試了各種attack和release,即使用的是1(1000分之一秒啊!)聽起來都不對。因為noto可能用的是採樣,他就是故意硬剪出來的(我為了省事兒就這麼說服自己了),沒有fade in和out。其實他絕大多數音色都保留了這個噠噠噠的glitch。
***/
現在錄下來,放進頻譜對比一下,就比較像了(依舊左邊是noto),只是8000那裡還是音量大得有點礙眼,不管了··· ···
如果FM參數確定,我們就要存起來,方便每次打開patcher自動跑到這個音色,這事交給preset(object裡邊寫preset):
又是一個UI,我們只用它一點點功能就夠了,從第一個輸出接點分別連上剛才的四個參數float:
然後:1.鎖定patcher;2.按住shift;3.點preset裡邊的第一個方塊;4.放開你的手,少年:
現在這個方塊變顏色了,那麼以後我們無論怎麼改變這四個參數,點一下這個小方塊就能把剛才存的數值恢復,不怕忘。然後在preset上連一個loadmess 1:
Loadmess就是load message的簡稱,就是說我們打開(load)這個patcher的時候你什麼都不用動,就會發送「1」這個message/信息{因為我們給loadmess的引數(argument)是1}給preset,讓preset自己「點擊」第一個方塊,設定好剛才連線的4個float。然後再給live.gain一個loadmess -10,整個patcher變成這樣了:
第一軌就做好了(我不應該用「就」,我寫到這裡已經是第四個晚上了,如果我只是自己寫patcher的話可能只用了10幾分鐘··· ···),存一下patcher,放到任何地方都可以。重新打開,只需要點喇叭,讓它亮起來(也許它打開本身就是亮著的),那麼應該就能聽到聲音。另外,要確定音頻系統是否打開,還可以看patcher最右下角,藍色表示音頻系統在運作:
聽得見聲音嗎?聽不見看看console,檢查一下每個連線。聽的見就開始做第二個音色了··· ···
to be continued··· ···
推薦閱讀:
TAG:Max可視化編程語言 | 計算機音樂 | 電子音樂 |