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_data[j] + 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 *testSrcData[2] = { NULL };

testSrcData[0] = 声音通道1数据

testSrcData[1] = 声音通道2数据

mix(testSrcData, mix_data, 2, buffer_size);

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

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

相关推荐
ai产品老杨20 分钟前
终结碎片化:基于GB28181/RTSP协议网关与边缘协同的企业级AI视频平台架构深度解析(附源码交付)
人工智能·架构·音视频
EasyGBS27 分钟前
实战落地:国标GB28181视频平台EasyGBS+国密GB35114协议,双重保障赋能智慧安防全场景安全高效联网
人工智能·安全·音视频
正宗咸豆花37 分钟前
Sora关停,实时AI交互如何破解视频生成的高成本困境?
人工智能·音视频
愚公搬代码42 分钟前
【愚公系列】《剪映+DeepSeek+即梦:短视频制作》031-调色:废片秒变氛围感大片(滤镜的风格化调节)
音视频
无线图像传输研究探索1 小时前
无人机、DV 摄像机视频画面无距离限制实时回传,这款 5G多卡单兵图传设备你怎么看?
5g·音视频·无人机·无线图传·5g单兵图传·单兵图传
九天轩辕2 小时前
Chromium 内核深度剖析:HTML 属性解析限制导致的视频静音失效问题
前端·html·音视频
EasyGBS2 小时前
告别低效巡检,国标GB28181视频分析平台EasyGBS视频质量诊断助力智慧城市安防精细化落地
数据库·音视频·智慧城市
weixin_446260852 小时前
[特殊字符] Insanely Fast Whisper - 超快音频转录工具!
whisper·音视频
llilian_162 小时前
音频分析仪 专业音频分析仪破解行业测试痛点实战解析 音频测试仪 专业音频分析仪
大数据·功能测试·单片机·测试工具·音视频
王江奎11 小时前
FFmpeg 中编译和使用 soxr 重采样引擎
ffmpeg·音视频