C++ 多路音频pcm混音算法

1、均值化混音算法

不适合商用,声音的损失比较大,不建议用,建议用第二种声音混音

short remix(short pcm1,short pcm2){

int value = pcm1+ pcm2;

return (short)(value/2)

}

2、归一化混音算法

输入数据为48Khz-2-16bit音频数据

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

//归一化混音

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 / channels; i++)

{

int temp = 0;

for (j = 0; j < channels; j++)

{

temp += *(short*)(src_dataj + i * channels);

}

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;

}

}

调用方法:

char *testSrcData2 = { NULL };

testSrcData0 = 声音通道1数据

testSrcData1 = 声音通道2数据

mix(testSrcData, mix_data, 2, buffer_size);

3、其他方法本人没用过,不好评价,不过感觉第二种够用了,至少目前没什么特别大的反馈
4、混音的思路

采集多路pcm数据-》统一重采样成48Khz-2通道-16bit-》归一化混音

相关推荐
听我哔哔33 分钟前
口播视频唇形总对不上?Seedance 2.5 在 zeekeAI 里的同步实操
人工智能·音视频
YWamy9 小时前
如何降低RTC SDK在复杂网络环境下的运行成本
网络·音视频·实时音视频
FlightYe11 小时前
视界原理之3D视频(四):裸眼、眼镜和头显
android·linux·c++·3d·ffmpeg·音视频
小豆庄12 小时前
本地视频打码:多模型检测、帧间追踪与18种模糊的选型
opencv·目标检测·ai·自然语言处理·音视频·视频
TST-魚爷17 小时前
小型视频会议室音频踩坑:一体化拾音扩音方案实测分享(易视讯)
stm32·电脑·音视频·钉钉·腾讯会议·zoom会议
Sayai18 小时前
让动漫角色复刻真人动作!MiniMax H3 动作控制实战:一段视频驱动角色动画(12G 显存,附模型下载)
人工智能·aigc·音视频·comfyui·动作捕捉·minimax
美狐美颜SDK开放平台1 天前
开发直播APP、电商短视频与视频社交平台时,能否共用一套美颜SDK?
android·图像处理·人工智能·音视频·直播美颜sdk
AI日报派送佬1 天前
2026年11月02日 AI 行业日报|商汤开源 Loop-9B、Pika 发布 H3 Flex 音视频模型、Meta× 傅利叶推出人形机器人 Max
人工智能·微软·开源·音视频·openai·1024程序员节·ai日报
揽秀亭长1 天前
音频、五线谱、MIDI 如何转成简谱?
人工智能·音视频
Likeadust1 天前
说开就开:临时发起的私有化音视频实时通信EasyDSS视频会议,让跨城协作不再“等排期”
网络·音视频·easydss