之前做的音頻API都是使用的第三方的庫或者代碼
不過這段時間一直比較忙
沒什么時間來玩玩音頻引擎了
不過為了不至于本博客長草
我就整理下以前接觸過的音頻處理這塊吧
首先上一個簡單的音效基類吧
class AudioEffect
{
public:
virtual ~AudioEffect(){}
virtual std::vector<float> Filter(const std::vector<float>& data) = 0;
protected:
std::vector<float> data;
};
通過調(diào)用Filter就可以獲取給定pcm處理后的音效數(shù)據(jù)
然后再談下什么是Distortion音效
Distortion主要使用于電吉他等電子類樂器,
Distortion音效主要有以下參數(shù):
1.edge 臨界值
2.gain 增益
3.低通剪切值(當(dāng)然還有其他幾個參數(shù),...)
其簡易化的音效處理原則就是
使用使用給定臨界值對原有數(shù)據(jù)做Clamp處理
簡單的例子如下:
#define DISTORTION_RATE 100.0
#define DISTORTION_THRESHOLD 0.4
class Distortion : public AudioEffect
{
public:
Distortion()
{
gain = DISTORTION_RATE;
value = DISTORTION_THRESHOLD;
}
std::vector<float> Filter(const std::vector<float>& data_)
{
this->data.clear();
for(int i = 0; i < data_.size(); i++)
{
float v = data_[i]*gain;
if(v > value)
v = value;
if(v < - value)
v = -value;
data.push_back(v);
}
reutrn data;
}
private:
float gain;
float value;
};
看上去似乎很簡單
那處理后的音效如何? 試試就知道了
接下來還有reverb,ring,echo,chorus等音效算法和音頻傅里葉變換等
等弄完了這些,音頻引擎也就該升級了(我早已構(gòu)思好了下個版本的音頻API功能了)
下篇tremolo音效