這是音效系列編程之三:FadeOut和FadeIn音效
二者都分別控制音樂的淡出和淡入
解釋下淡出效果的含義:就在是音樂播放即將結束之前通過一定的手法控制音樂響度-直至結束。
很顯然,使用線性關系基本可以達到目的
假定數據關系為y = kx + b;
另外需要控制淡出的坡度,或者直接說需要知道從結束之前多少個數據開始需要使用FadeOut音效。所以我們需要一個參數len。
假定我們使用下列的一句話算法來說明問題:
for(int i = 0; i != len ;i++)
bufer[i]*= (a-i)*b;
其中a,b為待定參數
因為有一個前提:當i = len-1的時候buffer[len-1] = 0;
所以有a=len-1
另外當fadeout發揮作用之前buffer數據并未變化,故有
b=(len-1)
故基本的Fadeout核心算法就是一句:
y=y*(1-t/k)
簡單吧。
理所當然
基本的FadeIn核心算法就是
y*=(t/k-1)
雖然在具體場合,算法有所變形,但是基本的原理就是這個樣子
PS:基本的函數關系雖然簡單,但是比較實用
以后有空還會講Echo,Reverb,Treble Booster,Compressor,High Filter等音效原理
。只是研究音效的同志們不多。沒的討論