C++ 调节PCM音频音量大小

在用解码器解码音频数据得到PCM音频数据块之后,可以在将数据送给声卡播放之前调节其音量大小,具体的实现函数如下:

 

[cpp]  view plain  copy
 
  1. void RaiseVolume(char* buf, UINT32 size, UINT32 uRepeat, double vol)//buf为需要调节音量的音频数据块首地址指针,size为长度,uRepeat为重复次数,通常设为1,vol为增益倍数,可以小于1  
  2. {  
  3.     if (!size)  
  4.     {  
  5.         return;  
  6.     }  
  7.     for (int i = 0; i < size;)  
  8.     {  
  9.         signed long minData = -0x8000; //如果是8bit编码这里变成-0x80  
  10.         signed long maxData = 0x7FFF;//如果是8bit编码这里变成0xFF  
  11.   
  12.         signed short wData = buf[i + 1];  
  13.         wData = MAKEWORD(buf[i], buf[i + 1]);  
  14.         signed long dwData = wData;  
  15.   
  16.         for (int j = 0; j < uRepeat; j++)  
  17.         {  
  18.             dwData = dwData * vol;  
  19.             if (dwData < -0x8000)  
  20.             {  
  21.                 dwData = -0x8000;  
  22.             }  
  23.             else if (dwData > 0x7FFF)  
  24.             {  
  25.                 dwData = 0x7FFF;  
  26.             }  
  27.         }  
  28.         wData = LOWORD(dwData);  
  29.         buf[i] = LOBYTE(wData);  
  30.         buf[i + 1] = HIBYTE(wData);  
  31.         i += 2;  
  32.     }  
  33. }  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值