这是音效系列编程之三: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等音效原理
。只是研究音效的同志们不多。没的讨论