製作第一個電子音效

在上一個步驟中,若輸入了import AudioKitXcode並沒有給予任何錯誤,即代表你已經成功的導入了此框架,我們首先撰寫一些簡單的程式碼:

import AudioKit

let oscillator = AKOscillator()
AudioKit.output = oscillator
AudioKit.start()
oscillator.start()

sleep(10)

這段程式碼的核心邏輯是第二行到第五行,AKOscillator是一個AudioKit框架中的基礎單元之一:振盪器,這四行程式碼建立了一個振盪器物件,並且讓AudioKit接收此物件的數位訊號輸出,接著開始播放。最後的sleep(10)讓程式碼暫停10秒,因此執行時你將會聽到長達10秒的振盪器音效「嘟」,如果沒有這行程式碼,只會聽到短促的一聲「嘟」。

在更深入的探索此框架前,我們先來說說關於電子音效史的小故事。(在本教學中,會穿插許多電子音樂發展史中的小故事,以及聲音背後的科學原理,如果你沒有興趣,當然可以快速帶過!)

樂器的誕生源自人類一個重要的發現:物質的震動會發出聲音,而藉由規律性的敲擊、播動、彈奏設計了某種發聲機制的物件,我們得以製造有規則的聲音效果,超越了一定程度的審美程度,即可稱為音樂。

在西元1876年,加拿大發明家貝爾(Alexander G. Bell)因意外打翻了一瓶酸性溶液,緊急呼叫他的助理,在隔壁房間的華生赫然聽見桌上那件仍在改進中的受話器,竟然傳出了貝爾的聲音,這就是現代教科書中著名的「史上第一通電話」。同年的2月14日,情人節當天,他委託了律師提出電話的專利申請,最終讓他成為了電話的發明者,巧合的是另一份電話的專利申請書,也在同一天的稍晚時分送抵美國專利局,這一份專利由伊利沙・格雷(Elisha Gray)提出,最後因為種種因素,貝爾在這場專利爭奪中勝出,但格雷卻並未在歷史上消聲匿跡,他留下了另一條既科學又與藝術不可分割的足跡:振盪器之父。

格雷曾偶然見到他的姪子出於好奇的把玩他的器材:他把一塊電池的一端連到自己身上,另一端則置於裝滿水的浴缸中,接著用手摩擦浴缸的水面,浴缸因此發出與電流成比例的聲響。這是對自振電磁電路可發聲的最早發現,應用此理論,格雷設計了「電傳琴」,使用一系列調好音的簧片,受電磁電流驅動,產生擁有不同頻率的聲響,此裝置就是我們的程式碼創建的振盪器,被認為是人類歷史上最早的電子樂器。

在我們的程式碼中,振盪器產生了一條正弦波(Sine wave),作為輸出傳送至AudioKit框架上,這個數位波被AudioKit處理後,再次作為輸出傳送至我們的喇叭或耳機中,它們以與此正弦波完全相同的頻率震動,並且將震動傳到你耳朵外的空氣中,隨後你的耳朵作為受器,將此聲音訊息傳送至大腦,完成了此聲音的生命週期。

藉由一些簡單的代碼,我們可以改動這個振盪器的頻率(決定音高)和振幅(決定音量大小):

oscillator.frequency = 523
oscillator.amplitude = 0.5

這也是我在十幾年前製造的第一個電子音效,當時即將迎來第二個千禧年,正在讀小學的我正嘗試用QBasic語言撰寫音樂,QBasic是那個年代的高階語言之一,但為了製作一首歌,在程式碼上還必須每個音符指定頻率和音長,和這個專案中我們播放聲音的方式有異曲同工之妙。(當然,在本教學的後段會製作更複雜的音效,就是QBasic很難企及的程度了)當時我閱讀的教學所介紹的第一個音就是523赫茲:中央C,你可以試著執行程式,並且試著彈奏周圍可及的樂器來比較。

現代樂理稱261.63赫茲的音高($$C_4$$)為中央C,少數的樂器仍然以523.25赫茲的音高($$C_5$$)為中央C。

你可以做出更多實驗,例如下面的程式碼可以播放一個音階,你甚至可以開始試著撰寫小星星之類的簡單歌曲!

// ...初始化的程式碼
oscillator.start()
oscillator.frequency = 523 //C,DO
sleep(1)
oscillator.frequency = 587 //D,REI
sleep(1)
oscillator.frequency = 659 //E,MI
sleep(1)
oscillator.frequency = 698 //F,FA
sleep(1)
oscillator.frequency = 784 //G,SO
sleep(1)
oscillator.frequency = 880 //A,RA
sleep(1)
oscillator.frequency = 988 //B,SI
sleep(1)

results matching ""

    No results matching ""