首页 > 编程语言 >直播系统源码,常见的混音算法有哪些?

直播系统源码,常见的混音算法有哪些?

时间:2023-12-09 16:24:59浏览次数:44  
标签:short int mixVal trackOffset 直播 混音 coloum inputAudios 源码

声音是由于物体的振动对周围的空气产生压力而传播的一种压力波,转成电信号后经过抽样,量化,仍然是连续平滑的波形信号,量化后的波形信号的频率与声音的频率对应,振幅与声音的音量对应,在直播系统源码中,量化的语音信号的叠加等价于空气中声波的叠加,所以当采样率一致时,混音可以实现为将各对应信号的采样数据线性叠加。反应到直播系统源码的音频数据上,也就是把同一个声道的数值进行简单的相加而问题的关键就是如何处理叠加后溢出问题。

所以在直播系统源码中进行混音之前要先保证需要混合的音频 采样率、通道数、采样精度一样。

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

 

public static short[] mixRawAudioBytes(short[][] inputAudios) {
int coloum = finalLength;//最终合成的音频长度
// 音轨叠加
short[] realMixAudio = new short[coloum];
int mixVal;
for (int trackOffset = 0; trackOffset < coloum; ++trackOffset) {
mixVal = (inputAudios[0][trackOffset]+inputAudios[1][trackOffset])/2;
realMixAudio[trackOffset] = (short) (mixVal);
}
return realMixAudio;
}

 

二、归一化
全部乘个系数因子,使幅值归一化,但是个人认为这个归一化因子是不好确认的。

 

public static short[] mixRawAudioBytes(short[][] inputAudios) {
int coloum = finalLength;//最终合成的音频长度
float f = divisor;//归一化因子
// 音轨叠加
short[] realMixAudio = new short[coloum];
float mixVal;
for (int trackOffset = 0; trackOffset < coloum; ++trackOffset) {
mixVal = (inputAudios[0][trackOffset]+inputAudios[1][trackOffset])*f;
realMixAudio[trackOffset] = (short) (mixVal);

}
return realMixAudio;

}

 

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

public static short[] mixRawAudioBytes(short[][] inputAudios) {
int coloum = finalLength;//最终合成的音频长度
float f = 1;//衰减因子 初始值为1
//混音溢出边界
int MAX = 32767;
int MIN = -32768;
// 音轨叠加
short[] realMixAudio = new short[coloum];
float mixVal;
for (int trackOffset = 0; trackOffset < coloum; ++trackOffset) {
mixVal = (inputAudios[0][trackOffset]+inputAudios[1][trackOffset])*f;
if (mixVal>MAX){
f = MAX/mixVal;
mixVal = MAX;
}
if (mixVal<MIN){
f = MIN/mixVal;
mixVal = MIN;
}
if (f < 1)
{
//SETPSIZE为f的变化步长,通常的取值为(1-f)/VALUE,此处取SETPSIZE 为 32 VALUE值可以取 8, 16, 32,64,128.
f += (1 - f) / 32;
}
realMixAudio[trackOffset] = (short) (mixVal);

}
return realMixAudio;

}

  

 

四、newlc算法
if A < 0 && B < 0
Y = A + B - (A * B / (-(2 pow(n-1) -1)))
else
Y = A + B - (A * B / (2 pow(n-1))

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;
int i = 0,j = 0;
for (i=0;i<SIZE_AUDIO_FRAME/2;i++)
{
int temp=0;
for (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;
}
}

以上就是直播系统源码,常见的混音算法有哪些的全部内容了,更多内容欢迎关注后续的文章

标签:short,int,mixVal,trackOffset,直播,混音,coloum,inputAudios,源码
From: https://www.cnblogs.com/yunbaomengnan/p/17891102.html

相关文章

  • 成品直播源码,如何在开发时自定义缓存策略
    缓存在成品直播源码中所占用的空间往往会成为迫使用户卸载应用的最后一根稻草。开发者不能无上限对音视频资源进行缓存,通常的维护手法是通过限制空间大小,比如,用户通常可以接受视频类应用有1G左右的缓存空间,即时通信类应用也许会更大些。因此我们的成品直播源码缓存库也需要提供......
  • 视频直播app源码,在开发时配置 lint 风格检查与修正
    在开发视频直播app源码时引入工具辅助,可以强制性地实现编码书写和提交过程中的lint校验。下面以当前流行的GitHook方案举例供参考。一、开发编辑器及lint工具配置我们在视频直播app源码中配置TSLint插件以校验typeScript;配置styleLint插件以校验CSS/LESS。我们约定......
  • 基于mysql、laravel、vue2框架开发的手术麻醉临床信息系统源码,自主版权
    手术麻醉系统源码技术架构:PHP、js、mysql、laravel、vue2手术麻醉临床信息管理系统是数字化手段应用于手术过程中的重要组成部分,用数字形式获取并存储手术相关信息,既便捷又高效。既然是管理系统,那就是一整套流程,管理患者手术、麻醉的申请、审批、安排以及术后有关各项数据的记录......
  • Spring Security 6.x 系列(10)—— SecurityConfigurer 配置器及其分支实现源码分析(二)
    一、前言在本系列文章:SpringSecurity6.x系列(4)——基于过滤器链的源码分析(一)中着重分析了SpringSecurity在SpringBoot自动配置、 DefaultSecurityFilterChain和FilterChainProxy 的构造过程。SpringSecurity6.x系列(7)——SecurityBuilder继承链源码分析中详细分析了......
  • PACS医学影像报告管理系统源码带CT三维后处理技术
    从各种医学影像检查设备中获取、存储、处理影像数据,传输到体检信息系统中,生成图文并茂的体检报告,满足体检中心高水准、高效率影像处理的需要。自主知识产权:拥有完整知识产权,能够同其他模块无缝对接国际标准:按照国际规范DICON3.0标准处理医学影像数据无缝对接:无缝对接各种体检影......
  • Nacos源码(七):客户端实例变更事件机制源码分析
    在给出的NamingExample示例中,给出客户端订阅的代码,详情如下:客户端的订阅机制是通过事件完成的,NacosNamingService#subscribe()详情如下:客户端订阅主要步骤:1、注册事件监听器2、客户端订阅客户端订阅在Nacos源码(六):客户端服务发现源码分析中已经做了......
  • C#区域医院检验系统源码,SaaS服务
    LIS是将医院检验仪器与计算机组成网络,使得医院检验工作从医生检验申请——收费——样品采样与登记——数据采集与审核——报告单传输与打印——质量控制——统计与分析等一系列流程中,实现智能化、自动化和规范化,大大提高了业务效率。本套LIS检验系统面向医院实验室、医院集团、区域......
  • Nacos源码(五):服务端健康检查源码分析
    服务注册到Nacos后,其他服务就可以获取该服务的实例信息,调用此服务;当服务宕机,Nacos会将该服务信息从维护的服务实例列表中删除,此时,其他服务获取不到该服务的实例信息,无法调用该服务。该服务是否应该被删除,取决于该服务是否健康,Nacos提供健康检查机制,判断服务是否有问题,将不健康......
  • Spring源码系列:MyBatis整合和原理
    前言Mybatis是啥?Mybatis是一个支持普通SQL查询、存储过程以及映射的一个持久层半ORM框架。那么在了解Spring整合Mybatis这部分源码之前,我们先来看下Mybatis的实际运用。一.Mybatis的使用首先,项目的结构如下:pom依赖:<dependency><groupId>org.mybatis</groupId><artifactId......
  • C语言源码的陷波器设计及调试总结
    一前记音频信号处理中,限波器是一个常用的算法。这个算法难度不是很高,可用起来却坑很多。二源码解析1滤波器的核心函数,这里注意两点,一个是带宽不能太宽了,太宽了杀伤力太大了,容易出问题。另外一个就是滤波器的阶数非常重要,假如想滤波宽度尽量窄一些,那就阶数尽量高一些......