電腦怎樣「聽」音樂?

談到以電腦處理音樂,先要以適當方式將音樂資訊數碼化(digitization)。以較常見的圖像方式解說的話,數碼化意思就是把眼睛可見的影像,經過相機轉換成電腦的像素(pixel),成為一個個顏色點陣在螢幕顯示,或儲存為檔案。

聲音本來是空氣或其他媒介的粒子振動(vibration),耳朵感到振動能量就可轉為腦內的聽覺。聲音數碼化的單位是取樣(sample),每個取樣都記下某時刻振動能量的強弱。故此播放聲音檔案時,按此強弱去振動掦聲器/喇叭內的振膜¹就可以重現聲音了。

聲音從振動而來 (Icons from icons8)

振動要產生聲音,先有兩個要求:

  1. 週期性(periodic):
    振動要有一定程度的重覆,即「頻率」(frequency),通常以每秒次數量度。每秒一次稱作 1 個赫茲(1 Hertz),或簡稱 1 Hz 。
  2. 人耳可探測範圍內:
    人耳對約 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 表示。按播放收聽。

一秒的 440 Hz 純音

現在流行用 Python 編程,我們大部份編程示範都會如此展示,文末也會提供 Google Colab / Deepnote 上的完整內容。有興趣的讀者可以自行更改數值試試。

那這段程式碼到底做甚麼呢?簡單來說, t 是時間線,純粹就是從 0 開始,以極微小的距離漸漸加到 tmax的數值,即是 1 。而 x 就是此刻 sine wave 的數值,以算式 sin(2πft) 算出,數值介乎 -11 之間。下面為首 100 個 sample 的內容。

太複雜了吧!編程方面容後再談。

好了好了,有圖有真相,到底這聲音相貌如何?這個是放大好多好多倍(見時間軸,全圖只長 0.01 秒)的音波圖(waveform)。

440 Hz 純音放大看⋯

這一秒的聲音全貌並不像平常在錄音 App 可以見到的聲波形狀,因為這是一個毫無強弱變化的純音。但簡單來說,聲波數碼化後就是好多的 0 → 1 → 0 → -1 → 0 → … (其實有機會是以其他方法表達,例如 0–65536 等)。

整個一秒鐘的平淡 440 Hz

符號表示法 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 。

MIDI 音高號碼與其對應的琴鍵

明白了音高,下面的小段 Python 程式碼大概容易一點理解。 melody 裏的就是我們要的音高,然後把每個音逐一放進 s (一段音樂 / stream)。顯 示出來的就是預設音長、強弱等的平淡「電腦聲」,按播放收聽。

MIDI 只有簡單音樂指令,佔用空間不多。只要製作用心,再配合好的播放系統, MIDI 音樂也還算是「動聽」。在寬頻上網普及令 MP3 成為主流之前,很多人要在電腦儲存音樂就是靠 MIDI 。那時候 Windows/Mac 都有系統內置的 MIDI 播放器,能夠播放簡單音樂。現在 MIDI 檔雖不再常見, MIDI 格式依舊在各類音樂製作軟件可見其蹤影,例如 Apple 的各種 software instrument ,MuseScore 等樂譜製作軟件都用到 MIDI 等符號表示的音樂格式。

同樣的旋律在 Logic Pro 以「符號表示法」(上)與「音頻表示法」(下)記錄

音頻符號表示法各擅勝場。音頻檔內所有聲音都像真而完整的記下,但修改不易。符號檔依賴播放系統重新合成聲音,方便製作,但對非樂器聲音則愛莫能助。符號檔變音頻檔不難,只需播放一次就可以;反之卻甚為艱巨,暫時仍是電腦音樂研究的熱門題目— — 自動音樂記譜 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

--

--

電腦音樂研究筆記 Computer Music Research Notes
電腦音樂研究筆記 Computer Music Research Notes

Published in 電腦音樂研究筆記 Computer Music Research Notes

電腦音樂科技研究科普文不多,就讓我們拋磚引玉淺談一下,帶讀者涉獵這個科技與藝術交融的領域。

Chuck-jee Chau 周卓之
Chuck-jee Chau 周卓之

Written by Chuck-jee Chau 周卓之

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