PCM音频混合的方法

news/2024/12/27 1:14:57/

音频混音算法的实现

1、线性叠加后求平均

优点:不会产生溢出,噪音较小;

缺点:衰减过大,影响通话质量;

    short  remix(short buffer1,short buffer2)  {  int value = buffer1 + buffer2;  return (short)(value/2);  } 

2、归一化混音(自适应加权混音算法)

思路:使用更多的位数(32 bit)来表示音频数据的一个样本,混完音后在想办法降低其振幅,使其仍旧分布在16 bit所能表示的范围之内,这种方法叫做归一法;

方法:为避免发生溢出,使用一个可变的衰减因子对语音进行衰减。这个衰减因子也就代表语音的权重,衰减因子随着音频数据的变化而变化,所以称为自适应加权混音。当溢出时,衰减因子较小,使得溢出的数据在衰减后能够处于临界值以内,而在没有溢出时,又让衰减因子慢慢增大,使数据较为平缓的变化。

void mix(char **src_data, char *mix_data, int channels, int buffer_size)  
{  //归一化混音  int const MAX=32767;  int const MIN=-32768;  double f=1;  int output;  int i = 0,j = 0;for (i=0; i < buffer_size / 2; i++)  //for (i=0; i < buffer_size; i++)  {  int temp = 0;  for (j = 0; j < channels; j++)  {  //两个文件对应音轨值相加temp += *(short*)(src_data[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*)(mix_data + i * 2) = (short)output;  }  
}  

3、PCM脉冲编码的音频信号的混音实现,

#define WIDEN_TEMP_TYPE int	
#define AUDIO_DATA_TYPE short
#define AUDIO_DATA_TYPE_MAX 32767	// 2^15(short)
#define AUDIO_DATA_TYPE_MIN -32768
void mix1(char **src_data, char *mix_data, int channels, int buffer_size)  
{  
// 初始化中间变量WIDEN_TEMP_TYPE tempMul = 1;WIDEN_TEMP_TYPE tempSum = 0;WIDEN_TEMP_TYPE mixedTempData;int howManyPointsArePos = 0;int sz = channels;int i = 0;int j = 0;for ( i = 0; i < buffer_size / 2; ++i){// 复位中间变量tempMul = 1;tempSum = 0;// 求中间变量howManyPointsArePos = 0;								// 统计每个点是不是都是正数for ( j = 0; j < sz; ++j){tempMul *= *(short*)(src_data[j] + i * 2); tempSum += *(short*)(src_data[j] + i * 2); if (*(short*)(src_data[j] + i * 2) < 0)++howManyPointsArePos;}// 混音if (howManyPointsArePos == sz)mixedTempData = tempSum - (tempMul / -(pow(2, 16 - 1) - 1));elsemixedTempData = tempSum - (tempMul / (pow(2, 16 - 1) - 1));// 防止上下溢出if (mixedTempData > AUDIO_DATA_TYPE_MAX)mixedTempData = AUDIO_DATA_TYPE_MAX;else if (mixedTempData < AUDIO_DATA_TYPE_MIN)mixedTempData = AUDIO_DATA_TYPE_MIN;*(short*)(mix_data + i * 2) = (short)mixedTempData;  }
}  


http://www.ppmy.cn/news/881538.html

相关文章

极兔68亿收购百世快递

近日&#xff0c;极兔速递&#xff08;下称极兔&#xff09;与百世集团&#xff08;NYSE&#xff1a;BEST&#xff09;签订收购协议&#xff0c;极兔以68亿元的价格收购了百世集团国内快递业务。完成收购后&#xff0c;极兔在国内快递市场份额将从6%上升至14%&#xff0c;仅次于…

通达系虽然与极兔产生纠葛,不过它们与拼多多依然紧密合作

通达系与极兔产生纠葛&#xff0c;一度让人觉得这是它们身后的阿里和拼多多的较量&#xff0c;不过日前笔者从拼多多选购商品的时候却发现拼多多与通达系的合作依然紧密。 通达系的成长离不开阿里巴巴的支持&#xff0c;早几年通达系成长的时候正是伴随阿里巴巴在电商行业的快速…

逛飙极兔牵手百世,快递行业三分江湖

本文概要&#xff1a;双十一大战已经落下帷幕&#xff0c;和往年不同的是&#xff0c;今年的电商平台们纷纷对GMV保持缄默&#xff0c;但在双十一的下游&#xff0c;快递行业却难掩战火。就在刚过去的十月里百世快递宣布将国内的快递业务全部易主极兔。这场价值65亿的交易被外界…

申通快递在双11的云原生应用实践

溪恒、遥方 阿里巴巴云原生 读完需要 20分钟 速读仅需 5 分钟 一年一度的 “双11” 大促中&#xff0c;交易额每年都在刷新&#xff0c;承接这些交易商品的快递包裹的数量也在成倍增长。这些快速的增长对物流系统带来了巨大的挑战&#xff0c;让物流管理更加敏捷来应对 “双11”…

三一重工首家海外灯塔工厂建成投产;极兔速递扩建印尼转运中心 | 美通企业日报...

美通社要闻摘要&#xff1a; 三一重工首家海外灯塔工厂建成投产。通用汽车在两年多后恢复季度派息。极兔速递扩建印尼转运中心。美的工业技术低碳智能微电网解决方案发布。数数科技完成1亿元C轮融资。博腾生物获数亿元B轮融资。美国FDA授权对青少年扩展紧急使用新冠疫苗。中国哮…

天载股票开户芯片业布局升级 难解汽车缺芯“近渴”

近年来&#xff0c;在新一轮科技革命和产业变革的大背景下&#xff0c;我国以网络购物、移动支付、线上线下融合等新业态新模式为特征的新型消费快速发展&#xff0c;对满足居民生活需要、释放国内消费潜力、促进经济平稳健康发展发挥了重要作用。狭义讲&#xff0c;新型消费是…

申通单号如何批量跟踪已揽收单号

一般商家下午会发货&#xff0c;到第二天就会去跟踪下物流信息&#xff0c;看下有没有揽收呢&#xff0c;大量单号要如何去跟踪呢&#xff0c;大家都说跟踪方法很多种&#xff0c;比如一个一个单号复制到百度上去查询&#xff0c;或一次复制10个或20个单号到快递官网上也可以跟…

国内快递或没有永久第一,但“印尼极兔”却试图搅局?

双十一将至&#xff0c;快递企业们正磨刀霍霍向更大的电商节订单量“蛋糕”而去。 但有一只来自印尼的快递“兔子”却正被同行围剿&#xff0c;这是为什么呢&#xff1f; 这只兔子正是极兔速递&#xff0c;其靠着烧钱打法又如何化险为夷&#xff1f;真能搅动中国快递市场吗&a…