用 coding 做音樂,其實不難
音樂與編程像乎「大纜都扯唔埋」,但其實現在越來越多編程工具可以選擇,用以電腦製作獨特的聲音。編程課一開始我們常說「Hello World」,音樂課我們就來個 Middle C 吧。
Middle C 的 MIDI number 是 60 , 聲音頻率是 261.63 Hz ,除了查對數表,亦有數得計。下面算式 p 為 pitch (MIDI number), f 為 frequency 。
通用編程語言
先說最常見、用途廣範的 Python ,只要能表現到算式 sin(2𝜋ft) 的連串數值就可以丟到播放器了。我們往往用到善於處理大型數據的 NumPy ¹ 插件,方便儲存和使用各式資料陣列(array)。 NumPy 裏有很多數學函式(function)和常數(constant)可以用,如 numpy.linspace
numpy.sin
numpy.pi
等。
Python 和 NumPy 合作起來很有 MATLAB 的味道,有取而代之之勢。 MATLAB 曾是科學運算(scientific computing)的翹楚,但始終價格昂貴,在科研實驗室外常人難以負擔(免費使用可參考 GNU Octave ² 等)。MATLAB 基本發聲原理跟 Python 也差不多,也是一大串的數值。
音頻編程語言
通用語言始終不是為音樂而設,雖然萬能也百搭,對聲音處理不及專用語言便利,往往已內置了各式振動器、合成器等音訊工具。
電子音樂人常用的語言不可不提到 CSound ³。編程檔案裏包含了 orchestra
和 score
兩部份,分別處理「如何發聲」和「發甚麼聲」兩方面。
另一著名語言叫 SuperCollider ⁴ 。與 CSound 不同,聲音預設連續不斷,除非定下清晰的時間點,或者手動中斷。
圖形音頻編程語言
文字編程局限了想像力?圖形編程語言也甚受電子樂手歡迎。
Max/MSP ⁵ 編程像繪圖,用線(patch cord)把不同的元件連結起來,從音頻處理到數字換算都是一個個的小格子。因為使用容易,可說是互動電子電腦音樂製作的首選平台。
Max/MSP 作為商業軟件,使用和作品發行都有一定限制。 Max 的原作者 Miller Puckette 也就做了個開源版本,多一個選擇,名稱叫 Pure Data ⁶ (PD) 。
最後加送一個可以手動操作的 JavaScript 發聲器,用上了簡單的 Web Audio API ⁷ ,可以控制聲音的頻率。
稍後再詳談,大概每種語言都可以說上幾篇!
[1] Numpy https://numpy.org
[2] GNU Octave https://octave.org
[3] CSound https://csound.com
[4] SuperCollider https://supercollider.github.io
[5] Max https://cycling74.com/products/max
[6] Pure Data https://puredata.info
[7] Web Audio API https://developer.mozilla.org/en-US/docs/Web/API/Web_Audio_API