Cpper
C/C++高级工程师 Android高级软件工程师 IT集成工程师 音频工程师 熟悉c,c++,java,c#,py,js,asp等多种语言 程序猿

之前做的音频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音效
posted on 2011-04-25 22:48 ccsdu2009 阅读(1650) 评论(0)  编辑 收藏 引用 所属分类: Game引擎音频视频

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理