在KTV唱歌的時候,常常會使用到回音(echo)音效,修飾聲音,掩蓋瑕疵(?)。在Csound中,也可以做到回音效果哦!這裡的回音講的並不是在山中大喊、在浴室唱歌、在禮堂講話等等的環境上的複雜回音,而是單純的延遲漸弱的回音。
舉個回音的例子,當我們喊一聲「啊~」,隨後會聽到「啊~啊~啊~啊~」愈來愈小聲的重複「啊」聲,這就是回音啦!
從物理的角度來看,回音是原本的聲波打中障礙物後,反彈回來的聲波。由於障礙物會吸收掉原本聲波的部份能量,因此反彈回來的聲波的音量會相對較小,如果再經過數次反彈,音量就會小到聽不見了。人耳若要分辨出回音,兩聲波到達耳朵的時間必須要大於0.1秒。如果時間距離太近,聲波會重疊在一起,聽起來就只是比較大聲的聲音而已。
回音波形:
Csound 回音設計
csound提供運算子「delayr」和「delayw」,可以用來設定與存取Delay Line。利用全域變數儲存樂器的輸出,再延遲放進Delay Line中等待輸出,程式實作方式如下:
gasig init 0
instr 1
;p4=pitch
;p3=duration
iamp = 50
ifreq = cpspch(p4) ;convert pitch to frequent
av linen iamp, 0.1, p3, 0.1 ;ring the amplitude
a1 oscil av, ifreq, 1 ;oscillate f1
gasig = gasig + a1 ;output
endin
instr 99
gaecho delayr 0.35 ;delay line length, echo delay 0.35 seconds
gaout = gaecho*0.6 + gasig ;echo amplitude reduce to 0.6 ratio
delayw gaout ;write gaout into delay line
out gaout ;out delay line
gasig = 0 ;clear instruments' previous signals
endin
製作回音一定要注意到如果聲音的長度太長、回音的間隔太短或是回音的衰減量太少的話,聲音的Amplitude(強度)可能會超過最大值,會導致失真。