Cpper
C/C++高级工程师 Android高级软件工程师 IT集成工程师 音频工程师 熟悉c,c++,java,c#,py,js,asp等多种语言 程序猿
接上文.
Tremolo音效比较酷的音效,听上去感觉是使用电子乐器演示的。
从感官上将Tremolo(颤音)音效是重击一个音符然后快速提高,减小音量

下面是颤音音效的几个参数:
1.深度控制:用来控制音量增减速度
2.阈值数据:说明控制音量的频率值
3.波形

其基本数学表达式为:
data = data * (1.0 + depth * sin(k* rate * index));

简易的c++代码如下:

class Tremolo : public AudioEffect
{
public:
    
static double def_depth;
    
static double def_rate;
    
double depth;
    
double rate;
    
double k;
    Tremole();
    std::vector
<float> Filter(const std::vector<float>& _data)
    {   
        data 
= _data;
        
for(int i = 0; i < data.size();i++)
           data[i] 
*= (1.0 + depth * sin(2.0 * PI * rate * i / k);
        
return data;   
    }    
};
当然有java版本的化应该是如下这个样子:
public class Tremolo extends AudioEffect
{
    
private static double final def_depth = ;
    
private static double final def_rate = ;
    
private double depth = def_depth;
    
private double rate = def_rate;
    Tremolo()
    {
       
    }
    
    
double[] Filter(double[] _data)
    {
        
int len = _data.length;
        
double[] ret = new double[len];
        
for(int i = 0;i<len;i++)
            ret[i] 
= _data[i]*(1+depth*Math.Sin(2*Math.PI*rate*i/k));
        
return ret;        
    }
}    
基本的源码就这个样子
不过有一个问题就是播放音效有少许杂音-不过不是大问题
posted on 2011-04-26 22:42 ccsdu2009 阅读(1605) 评论(0)  编辑 收藏 引用 所属分类: Game引擎音频视频Java Antroid

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