電腦怎樣「聽」音樂?
談到以電腦處理音樂,先要以適當方式將音樂資訊數碼化(digitization)。以較常見的圖像方式解說的話,數碼化意思就是把眼睛可見的影像,經過相機轉換成電腦的像素(pixel),成為一個個顏色點陣在螢幕顯示,或儲存為檔案。
聲音本來是空氣或其他媒介的粒子振動(vibration),耳朵感到振動能量就可轉為腦內的聽覺。聲音數碼化的單位是取樣(sample),每個取樣都記下某時刻振動能量的強弱。故此播放聲音檔案時,按此強弱去振動掦聲器/喇叭內的振膜¹就可以重現聲音了。
振動要產生聲音,先有兩個要求:
- 有週期性(periodic):
振動要有一定程度的重覆,即「頻率」(frequency),通常以每秒次數量度。每秒一次稱作 1 個赫茲(1 Hertz),或簡稱 1 Hz 。 - 在人耳可探測範圍內:
人耳對約 20 Hz 以下的頻率難以感知作聲音,反而往往是身體感到震動²。而在 15,000 Hz (15 kHz) 左右以上的感知因人而異,亦隨年紀逐漸消退。
音樂裏通常是週期性強的聲音,有較長的時間(至少約 0.1 秒)有固定頻率,可稱為有音高(pitch),頻率高就是較高音。樂團常用的調音音高通常是「 A440 」,即是一個 440 Hz 的標準 A 音。在本文往後的討論,我們先看有音高的聲音(pitched sound)。
音頻表示法 Audio Representation
最基本的「純音」是單獨一個正弦波(sine wave) — — 稍後我們再另文看為何其他聲音不只是 sine wave 。以下是一個長 1 秒的 440 Hz 純音,以 Python code 表示。按播放收聽。
現在流行用 Python 編程,我們大部份編程示範都會如此展示,文末也會提供 Google Colab / Deepnote 上的完整內容。有興趣的讀者可以自行更改數值試試。
那這段程式碼到底做甚麼呢?簡單來說, t
是時間線,純粹就是從 0
開始,以極微小的距離漸漸加到 tmax
的數值,即是 1
。而 x
就是此刻 sine wave 的數值,以算式 sin(2πft) 算出,數值介乎 -1
到 1
之間。下面為首 100 個 sample 的內容。
太複雜了吧!編程方面容後再談。
好了好了,有圖有真相,到底這聲音相貌如何?這個是放大好多好多倍(見時間軸,全圖只長 0.01 秒)的音波圖(waveform)。
這一秒的聲音全貌並不像平常在錄音 App 可以見到的聲波形狀,因為這是一個毫無強弱變化的純音。但簡單來說,聲波數碼化後就是好多的 0 → 1 → 0 → -1 → 0 → … (其實有機會是以其他方法表達,例如 0–65536 等)。
符號表示法 Symbolic Representation
把完整的聲音記下來,要重播的時候自然很方便,無論任何樂器音色甚至錄音場地的聲學環境都可以重現出來(當然要有一個好的錄音團隊)。但是音頻當中很多低層數據,對音樂人來說太過繁瑣,故有另外的「符號」方法,只把音樂內的重要資訊記下:音高、音長、強弱、樂器等等。
大部份電子樂器都支援此歷史悠久的標準:音樂數位介面 Musical Instrument Digital Interface ,簡稱 MIDI³ 。 1982 年 MIDI 1.0 出場,到 2020 年, MIDI 2.0 終於發表,為(電子)音樂界一大盛事。
MIDI 制式從 80 年代都沒大改變,最基本的訊號就是「音起/音完 — 音高 — 力度」(note on/off — note number — velocity)。音高是個 8-bit 數字,即是 0–127 內的數字,可對應西方音樂中的每個標準音高。例如 MIDI number 60 就是鋼琴上的 Middle C 。
明白了音高,下面的小段 Python 程式碼大概容易一點理解。 melody
裏的就是我們要的音高,然後把每個音逐一放進 s
(一段音樂 / stream)。顯 示出來的就是預設音長、強弱等的平淡「電腦聲」,按播放收聽。
MIDI 只有簡單音樂指令,佔用空間不多。只要製作用心,再配合好的播放系統, MIDI 音樂也還算是「動聽」。在寬頻上網普及令 MP3 成為主流之前,很多人要在電腦儲存音樂就是靠 MIDI 。那時候 Windows/Mac 都有系統內置的 MIDI 播放器,能夠播放簡單音樂。現在 MIDI 檔雖不再常見, MIDI 格式依舊在各類音樂製作軟件可見其蹤影,例如 Apple 的各種 software instrument ,MuseScore 等樂譜製作軟件都用到 MIDI 等符號表示的音樂格式。
音頻與符號表示法各擅勝場。音頻檔內所有聲音都像真而完整的記下,但修改不易。符號檔依賴播放系統重新合成聲音,方便製作,但對非樂器聲音則愛莫能助。符號檔變音頻檔不難,只需播放一次就可以;反之卻甚為艱巨,暫時仍是電腦音樂研究的熱門題目— — 自動音樂記譜 Automatic Music Transcription (AMT)。
如對編程有興趣,可參考以下連結,試試修改數值再執行一下。
Deepnote Notebook: https://deepnote.com/workspace/chuckjee-f06aaf72-cebf-4a01-bee7-1d8eb93c1d61/project/How-do-computers-hear-music-66fc2a65-4317-4a20-8902-9c66217ebe8a/%2Fnotebook.ipynb
Google Colab: https://colab.research.google.com/drive/1xNRJjm0qqWa08uKhklsBifvzjSKFJfxY?usp=sharing