用 coding 做音樂,其實不難

音樂與編程像乎「大纜都扯唔埋」,但其實現在越來越多編程工具可以選擇,用以電腦製作獨特的聲音。編程課一開始我們常說「Hello World」,音樂課我們就來個 Middle C 吧。

各種編程語言裏的 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 裏的 Middle C

Python 和 NumPy 合作起來很有 MATLAB 的味道,有取而代之之勢。 MATLAB 曾是科學運算(scientific computing)的翹楚,但始終價格昂貴,在科研實驗室外常人難以負擔(免費使用可參考 GNU Octave ² 等)。MATLAB 基本發聲原理跟 Python 也差不多,也是一大串的數值。

MATLAB 裏的 Middle C (抱歉除了 Python 外其他語言較難在此執行)

音頻編程語言

通用語言始終不是為音樂而設,雖然萬能也百搭,對聲音處理不及專用語言便利,往往已內置了各式振動器、合成器等音訊工具。

電子音樂人常用的語言不可不提到 CSound ³。編程檔案裏包含了 orchestrascore 兩部份,分別處理「如何發聲」和「發甚麼聲」兩方面。

CSound 裏的 Middle C

另一著名語言叫 SuperCollider ⁴ 。與 CSound 不同,聲音預設連續不斷,除非定下清晰的時間點,或者手動中斷。

SuperCollider 裏的 Middle C (上下兩款)

圖形音頻編程語言

文字編程局限了想像力?圖形編程語言也甚受電子樂手歡迎。

Max/MSP ⁵ 編程像繪圖,用線(patch cord)把不同的元件連結起來,從音頻處理到數字換算都是一個個的小格子。因為使用容易,可說是互動電子電腦音樂製作的首選平台。

Max/MSP 作為商業軟件,使用和作品發行都有一定限制。 Max 的原作者 Miller Puckette 也就做了個開源版本,多一個選擇,名稱叫 Pure Data ⁶ (PD) 。

都是 Middle C,幾乎是最簡單的 Max(上)/PD(下)patch!

最後加送一個可以手動操作的 JavaScript 發聲器,用上了簡單的 Web Audio API ⁷ ,可以控制聲音的頻率。

JavaScript 裏的 Middle C ,按「Run Pen」試玩

稍後再詳談,大概每種語言都可以說上幾篇!

--

--

Chuck-jee Chau 周卓之
電腦音樂研究筆記 Computer Music Research Notes

Lecturer/Musician at Hong Kong, made an “Intro to Computer Music” course at CUHK, appears as a collaborative pianist/percussionist in shows 大學講師,以向學生推廣電腦音樂研究為己任