混音算法

阅读: 评论:0

杨印海混音算法的研究2009-03-24 17:59在一个VOIP电话会议系统中,音频模块起着非常关键的作用,衡量一个系统质量好坏的标准也往往在此。
1、混音的理论依据
对语音信号的处理往往就是对语音样本以缓冲区为单位进行处理,也就是对输入的语音样本分成一帧一帧;
当多个音频源一起播放时,人耳听到的声波是各个声源声波的线性叠加,这就是模拟混音的基础,这也表明了数字语音也是可以进行线性叠加的;
2、混音算法
2.1、传统的混音算法 倒霉一词的来源于哪里
方法:对所有输入的音频数据进行线性叠加,这是所有混音算法的基础;
缺点:极易产生溢出
改进方法1:箝位:当发生上溢时,箝位以后的值为所能表示的最大值,当发生下溢时,箝位后的值为所能表示的最小值;
缺点:在溢出的地方引入了严重的噪音;
改进方法2:平均值:叠加之后取平均;
双缩脲试剂优点:不会产生溢出,噪音较小;
缺点:衰减过大,影响通话质量;
2.2、自适应加权混音算法
思路:使用更多的位数(32 bit)来表示音频数据的一个样本,混完音后在想办法降低其振幅,使其仍旧分布在16 bit所能表示的范围之内,这种方法叫做归一法;
方法:为避免发生溢出,使用一个可变的衰减因子对语音进行衰减。这个衰减因子也就代表语音的权重,衰减因子随着音频数据的变化而变化,所以称为自适应加权混音。当溢出时,衰减因子较小,使得溢出的数据在衰减后能够处于临界值以内,而在没有溢出时,又让衰减因子慢慢增大,使数据较为平缓的变化。
2.3、几种混音算法的比较
3、自定义的一种混音算法:
void Mix(char sourseFile[10][SIZE_AUDIO_FRAME],int number,char *objectFile)
{
//归一化混音
int const MAX=32767;
职业指导与服务
int const MIN=-32768;
double f=1;//衰减因子
int output;//归一化后输出帧
for (int i=0;i<SIZE_AUDIO_FRAME/2;i++)
{
int temp=0;
for (int j=0;j<number;j++)
{
temp+=*(short*)(sourseFile[j]+i*2);
}               
output=int(temp*f);
if (output>MAX)
{
f=(double)MAX/(double)(output);
output=MAX;
}
if (output<MIN)
{
f=(double)MIN/(double)(output);
output=MIN;
}
if (f<1)
皮黔生>挂网喷浆{
f+=((double)1-f)/(double)32;
}
*(short*)(objectFile+i*2)=(short)output;
}
}

本文发布于:2023-07-11 16:26:41,感谢您对本站的认可!

本文链接:https://patent.en369.cn/xueshu/202181.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:衰减   溢出   混音
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 369专利查询检索平台 豫ICP备2021025688号-20 网站地图