首页 > 编程语言 >音频混音算法及应用

音频混音算法及应用

时间:2024-04-08 20:33:28浏览次数:15  
标签:MIN MAX 音频 算法 因子 混音 output 衰减

 一、音频算法和原理简介


在视频会议系统中,音频模块有着很大的重要性,也是评测一个视频会议系统质量的重要方面,相比起视频模块来说,音频质量的好坏涉及到会议内容,有可能会影响到交流的准确性,而质量稍微差一点的视频则是可以承受的.在音频模块中,传统上是使用控制发言权的方法,即某一时刻只允许一个人发言,发言前需要向会议主席申请发言权,发言结束以后释放发言权。这种方法限制了会议成员之间的交流。因此,音频的混合也是一个不可或缺的特性。

       我总结了几种音频流混合的方法:
1.直接混合法

       就是将两端音频直接相加。

2.平均调节权重法

       将每一路的语音线性相加,再除以通道数,该方法虽然不会引入噪声,但是随着通道数成员的增多,各路语音的衰减将愈加严重。具体体现在随着通道数成员的增多,各路音量会逐步变小。

3.自适应混音加权法(改进后的归一化算法)

       使用可变的衰减因子对语音进行衰减,该衰减因子代表了语音的权重,该衰减因子随着数据的变化而变化,当数据溢出时,则相应的使衰减因子变小,使后续的数据在衰减后处于临界值以内,没有溢出时,让衰减因子慢慢增大,使数据变化相对平滑。

今天作者做的就是一个方法三:自适应混音加权法(改进后的归一化算法)。

算法如下所述:
1.广初始化为f=1
2.对于一帧中的样本按顺序处理:
(A)输出 output=mix*f
(b)如果 output[i]>MAX,求得最大的f满足: output[i] xf<MAX,然后f=f,output[i]=MAX.
(c)如果output[i]<MIN,求得最大的f满足 output[i]xf>MIN,然后f=f,output[i]=MIN.
3.如果f<1,则f=f+步长。继续处理下一帧,转2.
其中f为衰减因子,f为新的衰减因子;混合为所有音频流的某一帧线性叠加值,实际实现的时候如式(4)所示;output0为归一化以后的输出顿.MAX为正的最大值:MIN为负的最大值.STEPSIZE为f变化的步长,通常取为(1-f)/16或者(1-f)/32.
       我们对所做的改进只有一个地方,就是在衰减以后的值溢出的情况下,求新的衰减因子f的方法不同,新的f需要满足output[i]xf'<MAX 或者output[xf>MIN,而不是使用mixing.也就是说,使用衰减以后的值output来计算f,而不是原始值mix.
       用数学来表达,S为溢出的一个样本值,在S*f仍然溢出的情况下,我们比较一下计算出来的新衰减因子的大小。

二、代码实现


以下是功能函数实现代码(不齐全):

void adaptiveWeightingMixing(int frame_length,int16_t SpeechOut[],int16_t SpeechIn1[],int16_t SpeechIn2[])
//NEWLC();
{
    int MAX = 32768;
	int MIN = -32768;                             
	float f = 1;
	int i;
	for(i=1;i<frame_length;i++)
	{
//		(float)(SpeechOut[i])= (SpeechIn2[i] + SpeechIn2[i]) * f;
        SpeechOut[i]= (SpeechIn1[i] + SpeechIn2[i]) * f;
		if(SpeechOut[i]>MAX)
		{
			f = MAX/SpeechOut[i];
			SpeechOut[i] = MAX;
		}
		if(SpeechOut[i]<MIN)
		{
			f = MIN / SpeechOut[i]; 
			SpeechOut[i] = MIN;	
		}
		if(f<1)
		{
			f += (1-f) / 32; 	
		}
	}	
//	SpeechOut[frame_length] = (int16_t)(SpeechOut[frame_length]);
	
	
	
}

输出效果还算可以。

标签:MIN,MAX,音频,算法,因子,混音,output,衰减
From: https://blog.csdn.net/weixin_66072154/article/details/137522076

相关文章

  • 数字图像处理项目——模糊图像边缘检测算法设计及实现(论文/代码)
    完整的论文代码见文章末尾以下为部分内容摘要本研究旨在针对大脑核磁图像中的黑色腔体进行有效分割,以提供可靠的腔体定位和分析。为此,采用了三种常用的图像分割方法:8邻域区域生长法、Canny算子边缘检测和8邻域边界跟踪法。首先,应用8邻域区域生长法来识别具有相似性质的......
  • 【数据结构与算法】:堆排序和选择排序
    1.堆排序堆排序是一种比较复杂的排序算法,因为它的流程比较多,理解起来不会像冒泡排序和选择排序那样直观。1.1堆的结构要理解堆排序,首先要理解堆。堆的逻辑结构是一棵完全二叉树,物理结构是一个数组。(如果不知道什么是二叉树,请前往我的主页查看)。所以堆是一个用数组表......
  • TSINGSEE青犀边缘计算AI智能分析网关V4客流统计算法的配置步骤及使用
    TSINGSEE青犀AI智能分析网关V4内置了近40种AI算法模型,支持对接入的视频图像进行人、车、物、行为、烟火等实时检测分析,上报识别结果,并能进行语音告警播放。硬件支持RTSP、GB28181协议、以及厂家私有协议接入,可兼容市面上常见的厂家品牌设备,可兼容IPC、网络音柱等。同时也支持智能......
  • TSINGSEE青犀边缘计算AI智能分析网关V4客流统计算法的配置步骤及使用
    TSINGSEE青犀AI智能分析网关V4内置了近40种AI算法模型,支持对接入的视频图像进行人、车、物、行为、烟火等实时检测分析,上报识别结果,并能进行语音告警播放。硬件支持RTSP、GB28181协议、以及厂家私有协议接入,可兼容市面上常见的厂家品牌设备,可兼容IPC、网络音柱等。同时也支持智......
  • 最短路算法
    最短路算法一、Dijkstra简介用于计算一个节点到其他节点的最短路径。它的主要特点是以起始点为中心向外层层扩展(广度优先遍历与贪心思想,如果权重为1的话就是BFS寻找最短路了),直到扩展到终点为止。按长度递增的次序产生最短路径适用于正权图,可以有环,不可以有负权边代码fr......
  • 算法打卡day37|动态规划篇05| Leetcode1049.最后一块石头的重量II、494.目标和、474.
    算法题Leetcode1049.最后一块石头的重量II题目链接:1049.最后一块石头的重量II 大佬视频讲解:最后一块石头的重量II视频讲解 个人思路和昨天的分割等和子集有些相像,这道题也是尽量让石头分成重量相同的两堆,相撞之后剩下的石头最小,这样就化解成01背包问题了。解法......
  • 视频监控汇聚平台智能边缘分析一体机视频智能分析平台室内消防逃生通道占用检测算法
    随着城市化进程的不断推进,人口密集的建筑物中,室内消防逃生通道的畅通显得尤为重要。然而,在紧急情况下,如火灾或其他灾害事件,通道被占用可能导致人员无法及时安全撤离,增加事故风险。为此,智能边缘分析一体机室内消防逃生通道占用检测算法应运而生,以确保逃生通道的畅通和人员的安全......
  • 19天【代码随想录算法训练营34期】第六章 二叉树 part06(● 654.最大二叉树 ● 617.合
    654.最大二叉树#Definitionforabinarytreenode.#classTreeNode:#def__init__(self,val=0,left=None,right=None):#self.val=val#self.left=left#self.right=rightclassSolution:defconstructMaximumBinaryTree(s......
  • python WAV音频文件处理—— (1)读写WAV文件
    https://realpython.com/python-wav-files/#visualize-audio-samples-as-a-waveform了解WAV文件格式WAV是一种波形音频文件格式(WaveformAudioFileFormat)。虽然是一种古老的格式(九十年代初开发),但今天仍然可以看到这种文件。WAV具有简单、可移植、高保真等特点。WA......
  • 算法小白刷了一周 LeetCode 后的思考
    Hi,我是itchao我自己工作有2两年多的前端开发经验,但是数据结构与算法一直不好,基本就是一个算法小白的水平。听说大公司面试都要手写算法题,最近为了以后能去更好的公司,然后其实心里比较着急,打算在LeetCode刷题,到现在刷了差不多一周,也一直在掘金发博客分享刷题经历,其实也就6......