调整PCM语音数据的音量

通过编程实现调整PCM的音量,具体做法是乘上一个固定的数,但是要考虑数据的溢出问题,代码如下:

//调节PCM数据音量
//comment     : 对PCM数据的音量进行放大  
//parameter   :   
//            pData   PCM数据  
//            nLen    PCM数据的长度  
//            nBitsPerSample  每个Sample的位数,一般为8的整数  
//            multiple    放大倍数  
//result      : S_OK 成功  
int AmplifyPCMData(BYTE* pData, int nLen, int nBitsPerSample, float multiple)   
{   
    int nCur = 0;   
    if (16 == nBitsPerSample)   
    {   
        while (nCur < nLen)   
        {   
            short* volum = (short*)(pData + nCur);   
            *volum = (*volum) * multiple;   
            if (dwData < -0x8000)
            {
                dwData = -0x8000;
            }
            if (*volum > SHRT_MAX)//爆音的处理   
            {   
                *volum = SHRT_MAX;   
            }   
            *(short*)(pData + nCur) = *volum  ;   
            nCur += 2;   
        }   
           
    }   
    else if (8 == nBitsPerSample)   
    {   
        while (nCur < nLen)   
        {   
            BYTE* volum = pData + nCur;   
            *volum = (*volum) * multiple;   
            if (*volum > 255)//爆音的处理   
            {   
                *volum = 255;   
            }   
            *pData  = *volum  ;   
            nCur ++;   
        }   
           
    }   
    return S_OK;   
       
}  

调整完后效果可以使用Audacity对比:


image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 178,970评论 25 709
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 34,645评论 18 399
  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 14,121评论 1 92
  • 如果容颜老了, 那就藏到诗句里, 等入夜,溶入茶盏随你顾盼私语。 如果爱意淡了, 那就躲在烈酒里, 等入喉,点燃世...
    何来雍雅阅读 396评论 2 7
  • 门店销售会碰到很多类型的客户,怎么接待这些客户才能为下面的销售做好铺垫呢?下面是顶级销售高手总结的开场白的方法。 ...
    原中劲法120阅读 1,032评论 0 0

友情链接更多精彩内容