製作較複雜的音效

就像漫畫與動畫造成的視覺衝擊有根本上的差異一樣,毫無頻率(音高)與振幅(音量)變化的音效,雖然也足以構成旋律,但在聽覺上的審美很難真正被稱為「音樂」,在上一段教學的最後,我們利用了sleep指令,間接達成隨時間更換音高的效果,聰明的你或許會想到藉由大量的sleep指令,搭配對.frequency.amplitude的調整,就能模擬有情感起伏的音效了!

當然,這是完全正確的想法!但作為一個完整的音效框架,AudioKit早就幫我們準備好了像是CAAnimation一樣簡單、易操作的「音效動態」介面,我們無須自己撰寫如此繁雜的程式碼。在呼叫振盪器的start指定前,加入以下程式碼,你可以直接使用上一段教學最後的音階,或者(如果有)自己嘗試編制的歌曲。

oscillator.rampTime = 0.5

.rampTime屬性將會在我們更改一個AudioUnitAudioKit中可發聲的基本單元,目前使用的oscillator就是其中之一)的屬性時,不會立即置換到新的值,而是在指定的秒數內以漸變的方式更改為新值,可以想像在上一段教學中的正弦波影片慢慢變得緊湊或鬆弛,從而造成加入了這行程式碼後的音效效果。

rampTime與振盪器結合後,就成為了一種現代還時常被使用的樂器:特雷門琴(Theremin1,這個樂器是俄國科學家里昂・特雷門(Léon Theremin)在1920年發明的,順理成章地以他的名字命名。特雷門琴是一系列配置了天線的振盪器,利用手與天線構造的距離遠近,改變其電容的大小,從而影響振盪器迴路的振盪頻率,通過了混合器(Mixer)和濾波器(Filter)等裝置處理、合成,輸出訊號發出聲音,被視為是人類歷史上的第一個合成器。

由於音色特殊,且演奏難度非常的高,特雷門琴發明後並未得到社會的關注,直到最有名的特雷門琴演奏家:克萊拉・洛克摩爾(Clara Rockmore)展現她對這種樂器的完美駕馭後2,才出現在音樂界的視野內,在二十世紀的搖滾樂史中,時常可見這個樂器的身影,傳奇樂團「齊柏林飛船」(Led Zeppelin)的吉他手就對特雷門琴情有獨鍾,大家或許比較熟悉的「聯合公園」(Linkin Park)也將特雷門琴列為制式配備之一,甚至在古典音樂會的演奏上也有以特雷門琴為主角的配置3

在特雷門琴的結構圖中,我們會發現幾個新部件,混合器的用途是接受演奏者手部動作影響的音調振盪器,和另一個固定電容的參考振盪器的輸入做運算後,得到兩個頻率(相加及相減),再通過濾波器過濾掉相加的部分,輸出正確的音調,這稱為「相減合成」(Subtractive synthesis),藉由移除特定頻率的音調,改變整體音效的音色(Timbre)。

回到程式設計的部分,在這個單元中要進行研討的是「相加合成」(Additive synthesis),首先要介紹的角色是AKMixer,它是另一種AudioKit中的基本單元,其效果為接收一個或多個其他基本單元作為輸入,並且將它們組合後提供單一的輸出,我們原先使用的振盪器只會發出單一頻率的音效,因此整體效果聽起來非常人工、單調,我們在下面的程式碼中,試著用AKMixer組合多個不同頻率的震盪器,觀察相加合成對音色的影響:

// 1. 新建一個振盪器陣列
var oscillators:Array<AKOscillator> = [] 

// 2. 以for-in迴圈設置不同頻率的振盪器,增加至陣列中
for i in 1...5 {
    let o = AKOscillator()
    o.frequency = i * 261.62
    oscillators.append(o)
}

// 3. 新建AKMixer物件,串連振盪器,並呼叫start()
let mixer = AKMixer()
for o in oscillators {
    o.start()
    mixer.connect(o)
}

// 4. 串連mixer物件到AudioKit作為輸出
AudioKit.output = mixer
AudioKit.start()
sleep(10)

是否聽起來和上個單元中的中央C,聲音有很大的不同呢?在這段程式碼中,所有五個振盪器的振幅(音量)都預設為1,它們的頻率則是同一個浮點數(稱為「基頻」)的整數倍,我們可以嘗試對每個振盪器各自的振幅作出修改,觀察輸出的音效變化。

...
for i in 1...5 {
    let o = AKOscillator()
    o.frequency = i * 261.62
    o.amplitude = 1.0 - (i-1) * 0.225 // 降低頻率較高的振盪器的振幅
    oscillators.append(o)
}
...

把高頻率部位的振盪器音量降低後,我們發現合成器產生的音效柔和多了,如同上個單元一樣,各位不妨試試看使用各種不同的基頻和振幅,也可以嘗試實驗用毫無關聯的頻率來組合(是否很像噪音呢?)。

1. 參考自網路文章「How to Build a Theremin」,連結點此
2. Clara Rockmore 使用特雷門琴演奏「Song of Grusia」的影片
3. 近代古典音樂家 Katica Illényi 演奏「Once Upon a Time in the West」的影片

results matching ""

    No results matching ""