一個簡單的節拍器,看看Reaktor、Pd和SuperCollider它們都怎麼做!

一個簡單的節拍器,看看Reaktor、Pd和SuperCollider它們都怎麼做!

簡單節拍器要求:

第一、聲音要是正弦波;

第二、頻率分別是440Hz和880Hz;

第三、按照 (880, 440, 440, 440) 的順序滴答。

注意:(880, 440, 440, 440)這裡用括弧代表它是一個音序列。

1、Reaktor

首先,根據上面要求的第一點,要有正弦波,所以有個正弦波模塊是必須的:

很好,有個我要的F頻率輸入,不過為了讓F只作用於Sine FM模塊,對P音高輸入必須給它設置一個-300的值,當然這遠遠不夠,因為還需要Envelope包絡器的控制,所以一個簡單的節拍器聲音發生器就如下面這樣:

上面我把F和Trig獨立分離出來作為控制,因為根據上面節拍器的第二點要求,我是需要兩個不同頻率的正弦波。

而接下來我需要去創建一個Clock時鐘,它的目的主要是用來觸發正弦波發出聲音,除此之外它還要能有序地觸發頻率440Hz和880Hz這兩個正弦波聲音,所以正確的Clock時鐘是這樣的:

根據上面節拍器的第三點要求,一開始的頻率應該是880Hz,因此為了讓時鐘一開始觸發的也要是880Hz,上面Counter模塊一開始的數值很重要,所以上面情況的其Set輸入應當設置為-1,除了這個以外,還需要滴答4下,通過Modulo求4的餘數便可有效地解決了這個問題,這樣最終的結果就是:

2、Puredata

對於Pd而言,要創建個節拍器,也是必須要先創建個能發出指定頻率的正弦波發聲器,所以一個簡答的Pd正弦波發聲器就如下這樣:

我可以把上面這個保存成sine.pd作為接下來的調用,比如這樣:

好的,接下來我要實現滴答的部分,同樣也需要一個時鐘來觸發,這邊直接給出結果:

上面同樣也用到了counter,當然為了讓一開始的頻率是880Hz,打開metro之前同樣應該對counter進行複位設置,讓它等於0。

3、SuperCollider

終於說到了SuperCollider,貌似就更簡單了,首先一個好的正弦波發聲器是這樣的:

(SynthDef.new(sine, { arg freq=440, pan=0, amp=1; var env, sig; env = EnvGen.kr(Env.perc(0.01, 0.1), doneAction: 2); sig = SinOsc.ar(freq); sig = sig * env; sig = Pan2.ar(sig, pan, amp); Out.ar(0, sig);}).add)

然後關鍵的時候來了:

(Pbind.new( instrument, sine, dur, 0.5, freq, Pseq([880, 440, 440, 440], inf), amp, 1).play)

推薦閱讀:

在安靜環境下,你為何能聽到不存在的聲音?
我要大聲說話
如何在Unity中使用Fmod Studio?
4分鐘顯著提高你聲音的穿透力!
科學家排出了全球最難忍受噪音排行榜

TAG:聲音 | 軟體 | 設計 |