• 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-》归一化混音

  • 相关阅读:
    【PyTorch深度学习项目实战100例】—— 基于RNN+CNN实现NLP判别新闻真伪 | 第45例
    固定资产管理口号标语怎么写
    python实现批量pdf转txt和word
    Android finishInputEvent 流程分析
    【Linux】进程概念讲解
    Mybatis映射文件中动态sql语句
    Vue项目前端代码防止被调试
    textarea文本展示,定时器模仿一个一个出字的效果。
    攻防世界之Web_python_template_injection (web进阶)
    C#基础学习(二十三)_窗体与事件
  • 原文地址:https://blog.csdn.net/2403_83063732/article/details/136712196