之前做的音频API都是使用的第三方的库或者代码
不过这段时间一直比较忙
没什么时间来玩玩音频引擎了
不过为了不至于本博客长草
我就整理下以前接触过的音频处理这块吧
首先上一个简单的音效基类吧
class AudioEffect
{
public:
virtual ~AudioEffect(){}
virtual std::vector<float> Filter(const std::vector<float>& data) = 0;
protected:
std::vector<float> data;
};
通过调用Filter就可以获取给定pcm处理后的音效数据
然后再谈下什么是Distortion音效
Distortion主要使用于电吉他等电子类乐器,
Distortion音效主要有以下参数:
1.edge 临界值
2.gain 增益
3.低通剪切值(当然还有其他几个参数,...)
其简易化的音效处理原则就是
使用使用给定临界值对原有数据做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等音效算法和音频傅里叶变换等
等弄完了这些,音频引擎也就该升级了(我早已构思好了下个版本的音频API功能了)
下篇tremolo音效