109 lines
4.9 KiB
C
109 lines
4.9 KiB
C
#ifndef effectSUR_api_h__
|
||
#define effectSUR_api_h__
|
||
|
||
/*单耳输入时,channel设置*/
|
||
enum {
|
||
EFFECT_CH_L = 0x10, //单声道输入,输出左声道
|
||
EFFECT_CH_R = 0x20, //单声道输入,输出右声道
|
||
EFFECT_CH2_L = 0x30, //双声道输入,输出2个左声道
|
||
EFFECT_CH2_R = 0x40, //双声道输入,输出2个右声道
|
||
};
|
||
|
||
enum {
|
||
EFFECT_3D_TYPE0 = 0x01,
|
||
EFFECT_3D_TYPE1 = 0x02, //这2个2选1 :如果都置上,优先用EFFECT_3D_TYPE1
|
||
EFFECT_3D_LRDRIFT = 0x04,
|
||
EFFECT_3D_ROTATE = 0x08, //这2个2选1 : 如果都置上,优先用EFFECT_3D_ROTATE
|
||
EFFECT_3D_TYPE2 = 0x10,
|
||
EFFECT_3D_LRDRIFT2 = 0x20,
|
||
};
|
||
|
||
|
||
typedef struct __SUR_FUNC_API_ {
|
||
unsigned int (*need_buf)(int flag);
|
||
unsigned int (*open)(unsigned int *ptr, int effectflag, int nch);
|
||
unsigned int (*init)(unsigned int *ptr, int rotatestep, int damping, int feedback, int roomsize);
|
||
unsigned int (*run)(unsigned int *ptr, short *inbuf, int len); // len是对点
|
||
unsigned int (*switch_effect)(unsigned int *ptr, int effectflag, int rotatestep, int damping, int feedback, int roomsize);//新增的切换音效参数接口
|
||
unsigned int (*switch_nch)(unsigned int *ptr, int nch);//新增的声道修改接口
|
||
} SUR_FUNC_API;
|
||
|
||
|
||
extern SUR_FUNC_API *get_sur_func_api();
|
||
|
||
|
||
|
||
#if 0
|
||
因为复用其他音效的参数接口,所以还是用了4个参数,EFFECT_3D_TYPE2具体参数对应名称应该是 : {
|
||
int rotatestep; //无效参数
|
||
int rot60_100ms; //范围0到150
|
||
int wetgain ; //范围0到100
|
||
int delay ; //范围0到100
|
||
}
|
||
|
||
默认参数可以用 FFECT_3D_TYPE2 {2, 90, 70, 100},
|
||
|
||
// 由于原本预留参数有些没留出来,为了可以调节频响之类的多效果,所以在原基础上通过把参数列表指针当做其中一个参数传进来
|
||
// 如果 rot60_100ms小于0,wetgain=100的话, 那最后一个参数就是参数列表,这样就可以支持配置更多参数。
|
||
|
||
设置如下:
|
||
|
||
flag = EFFECT_3D_TYPE2;
|
||
{ {2, -1, 100, surmode_present[MODE_SUR_KTV]},
|
||
{2, -1, 100, surmode_present[MODE_SUR_3DTHE]},
|
||
{2, -1, 100, surmode_present[MODE_SUR_HALL]},
|
||
{2, -1, 100, surmode_present[MODE_SUR_VOICE]},
|
||
{2, -1, 100, surmode_present[MODE_SUR_SUR]}
|
||
}
|
||
|
||
|
||
//其中参数示例:
|
||
|
||
enum {
|
||
MODE_SUR_KTV = 0, //ktv模式
|
||
MODE_SUR_3DTHE, //3D影院
|
||
MODE_SUR_HALL, //音乐厅
|
||
MODE_SUR_VOICE, //清澈人声
|
||
MODE_SUR_SUR, //全景环绕
|
||
MODE_SUR_MAX
|
||
};
|
||
|
||
//dry,wet,delay,rot60,Erwet,Erfactor,Ewidth,Ertolate,predelay,width,diffusion,dampinglpf,basslpf,bassB
|
||
const static int surmode_present[MODE_SUR_MAX][14] = {
|
||
{80, 100, 35, 9000, 80, 80, 80, 80, 20, 100, 70, 6500, 4000, 18},
|
||
{80, 100, 90, 10030, 90, 90, 90, 90, 18, 100, 75, 7000, 1000, 29},
|
||
{80, 100, 100, 13000, 100, 100, 100, 100, 20, 100, 72, 9000, 50, 3},
|
||
{80, 100, 20, 5010, 100, 70, 70, 100, 15, 100, 70, 5500, 3500, 60},
|
||
{80, 100, 100, 10000, 80, 80, 80, 90, 10, 100, 72, 8000, 500, 15},
|
||
};
|
||
|
||
|
||
//dry,wet,delay,Erwet,Erfactor,Ewitdh,Ertolate,width,diffusion 范围都是 0到 100
|
||
//rot60 范围是 0到15000, 单位ms
|
||
//basslpf: 低频增强频率,范围 0到10000
|
||
//dampinglpf: 高频衰减频率,范围 0到 10000
|
||
//bassB: 低频增强比例
|
||
|
||
|
||
混响调参说明:
|
||
1.dry: 干声增益
|
||
2.wet:
|
||
整体效果声增益
|
||
3.delay: 反射时间间隔,影响整体空间大小
|
||
4.rot60:
|
||
衰减60dB需要的时间, 即衰减速度,如果空间里面的物体吸声厉害,或者比较空旷,衰减比较快
|
||
5.Erwet:早反射声的增益, 早反射声的存在 会让混响听起来更真实。但是不同的增益会影响听感上距离感,空间构造
|
||
6.Erfactor: 早反射声的一个密集程度。 这个值大,早反射声之间间隔比较大。构造的空间感也会相对较大。 较小的话,就反射比较密集。空间感变小。
|
||
7.Ewidth:影响早反射声左右声道的声音差异
|
||
8.Ertolate:
|
||
影响漫反射声音反馈的大小
|
||
9.predelay:干声跟效果声的时间间隔。也会影响整体空间感。
|
||
10.width:左右声道的差异,左右声道的差异,会产生立体感。(某些版本的sdk上该参数无效)
|
||
11.diffusion: 发散程度, 影响 漫反射声音的变形程度。
|
||
12.dampinglpf:高频衰减过度频率。反射声的一个频率衰减,这是一个斜着往下掉的曲线,影响了反射声中的高频分量。高频分量越多,整体音色越亮,但是成分太多,声音有些乱
|
||
13.basslpf:反射声中的低频增强分量过度频率
|
||
14.bassB:
|
||
低频增强比例。 这里的低频增强,其实是压了高频。为了使整体频响不超过1,不引起反馈发散。所以加大了这个值感觉混响弱了。可以适量加大rot60或者Ertolate
|
||
#endif
|
||
#endif // reverb_api_h__
|