Blog

【Max/MSP菜鳥日記01】注意這些小細節能大大提升編寫效率!(上)

giphy

哈囉大家好,我是If ,之後會不時地和大家分享我學習Max/MSP的學習過程!

身為一個沒有程式背景、又有點笨的小孩,學習Max的狀況百出,之前常常會犯一些會被柏豪老師打屁股的白痴錯誤。因而此文,就是希望廣大的Max初心者們,在留意了這些小細節之後,能大大減少被老師打屁股的機率。

開玩笑的,是能大大提升編寫效率!

1. 基本快捷鍵

雖然你不會因為忘記快捷鍵而遭受公審,但熟悉常用快捷鍵熟到像喝水一樣自然,真能讓你省事許多。

Max/MSP基礎快捷鍵

我自己先公開道歉已經學了兩個月,我到現在object還是常常忘記快捷鍵是n。(但到底為何是n超級不直觀的啦)

注:我發現n的意思是指“new object”,大家可以用這個方式去記,但我還是不懂為何不是o(新手愛抱怨)。

還想知道更多實用的快捷鍵技巧嗎?請期待下篇!

 

2. button (bang)以及toggle的功能差異

相信鍵盤上b鍵(Bang)跟t鍵(Toggle)應能榮登各位初心者們鍵盤上最熱門按鍵前三名,了解這兩個物件的確切用途大概就跟決定終身大事一樣重要,兩個看起來都像按鈕,但實際上性質卻大大不同。

button (bang)以及toggle的功能差異

 

注:(1) toggle不一定只能送出0或1,如果輸入其他數值皆會打開開關,並且輸出其數值。

(2) 如果需要讓toggle轉換成有開關功能的button,但toggle無論如何都會送出bang,該如何只讓它在on (輸出數字1)的狀態下才送出bang呢?

這時只要在toggle底下接上   就ok了!

將toggle轉換成有開關功能的button

 

3. 養成打開Max console的習慣

除了能查看自己印出(print)哪些訊息,patch有問題的時候,請務必打開max console;就算patch都有聲音、自我感覺良好,若max console圖示右上方出現小紅點,請不要假裝沒看見,務必好好面對。

點擊標示處便會在視窗右側展開Max console

 

古人常說:「不要一昧相信自己,請相信Max Console」,有紅點一定就是有問題,之前請教同學的patch寫法,右邊的maxconsole滿江紅,令我驚心動魄,就算現在沒問題,以後一定會有問題,此禍害將遺千年哪!

出現bug的警示視窗

 

4. 善用滑鼠自動顯示的輸出輸入孔小說明

將滑鼠移到每個輸出輸入端口,就會自動顯示小說明,非常好用,請大家有事沒事滑鼠就多多移去各個端口看看!

Animated GIF - Find & Share on GIPHY

 

5. 卡關時,先詳讀與問題相關之物件的maxhelp檔案

之前在寫琶音器,因為不知道要如何在每次觸發琴鍵時,計數器都能從頭數,當時不斷思索:要用什麼數學算式才能寫出我想要的功能?

但查看maxhelp檔案後,我發現其實只要同時輸出一個bang給第四個輸入端就好了,事情如此簡單就解決了我搞那麼久~

我之前的練習patch

 

這件事情讓我以後在卡關時,一定會先詳讀與問題相關之物件的maxhelp檔案,不僅能提升編寫效率,也能讓我了解各物件的更多用途。

maxhelp檔案頁面

 

好用的物件經常是新手常用的物件(例如:output循環數列時,常用的計數器),這些熱門物件經常會有一些隱藏版用法。

Maxhelp檔案提供實用的物件功能圖解

 

Max/MSP的maxhelp檔案是非常好用的自學管道。只要點選物件+按右鍵,就會跳出其物件的maxhelp檔案,檔案右側皆有圖文並茂、簡單易懂的patch實例。有許多人會直接複製maxhelp檔案裡一部分的patch方便作業。

點選物件+按右鍵就會跳出maxhelp檔案

 

而右側的reference提供更為詳盡的說明書。關於能接什麼樣的message,以及直接寫在物件名稱後面的各種argument (參數)以及@attribute(屬性)都能在這裡找到資料。

右側的reference為更為詳盡的說明書

 

6. hot inlet 與cold inlet的差別

終於來到重頭戲了,如果各位天資聰穎的初心者們覺得前面幾點都在講廢話的話,請再給我一首歌的時間~

很多人會沒注意到其實Max/MSP的物件的輸入端,橘色藍色的區別是有它的意義的(至少我之前就沒想那麼多)。

Hot inlet 與 Cold inlet的差別

 

是不是有點抽象?來舉個加法的例子吧!

(1)左邊數值輸入hot inlet,改變數值會主動輸出運算結果。

hot inlet會主動觸發物件,輸出儲存值。

 

(2)右邊數值輸入cold inlet,改變數值不會主動輸出運算結果,僅會改變算式右邊的操作數(此例為:+1 中的“1”值)。

cold inlet不會主動輸出結果

 

(3)改變cold inlet的輸入值之後,若要重新輸出運算結果還是得透過hot inlet(送入bang)。

改變cold inlet的輸入值之後,仍需觸發hot inlet才能輸出結果。

 

由於hold inlet跟cold inlet的功能差異,在接線時要特別注意是否需要主動輸出結果,還是只需要替換儲存值。

但有時候需要邊改變儲存值,同時輸出結果,這時該怎麼辦呢?

 

【cold inlet要如何主動輸出結果】

只要在輸入值跟cold inlet之間再加上一個trigger物件就ok囉!

是 trigger bang integer的簡寫,顧名思義這個物件能夠trigger輸出一個bang跟整數值(如果需要浮點數的話就改成f)。

用這個物件就能夠讓我們在改變cold inlet的值時,不僅改變算式右方的操作數,也能同時輸出一個bang給左邊的hot inlet,達到cold inlet主動輸出結果的效果。

t b i物件能使cold inlet在輸出數值之餘,再多送一個bang給hot inlet以便送出運算結果。

 

7. 留意邏輯判斷與運算規則

如同我們在之前的文章Max基本教程(1)-邏輯判斷與程式規則所說:「因為Max畢竟還是一種程式語言,將這個語言的規則、邏輯搞懂,是相當重要且能節省之後大量除錯時間的重要工作。首先我們需要理解物件的類別與處理順序。例如:在Max中,同階層的物件與訊息,執行順序都是『由上至下』、『由右至左』」。留意Max/MSP的程式規則與邏輯也是新手需要常常留心的事!

Max/MSP的運算順序為「由右至左」,因此改變物件順序會影響輸出的結果。(將print 1 從最右處移至最左處,Bang的順序從1, 2, 3變成2, 3, 1) 圖片來源:c74 tutorial

 

下篇將介紹patching的方便技巧,絕對夠實用,大家下回見呦!

Write a comment