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. }  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM