在用解碼器解碼音頻數據得到PCM音頻數據塊之后,可以在將數據送給聲卡播放之前調節其音量大小,具體的實現函數如下:
- void RaiseVolume(char* buf, UINT32 size, UINT32 uRepeat, double vol)//buf為需要調節音量的音頻數據塊首地址指針,size為長度,uRepeat為重復次數,通常設為1,vol為增益倍數,可以小於1
- {
- if (!size)
- {
- return;
- }
- for (int i = 0; i < size;)
- {
- signed long minData = -0x8000; //如果是8bit編碼這里變成-0x80
- signed long maxData = 0x7FFF;//如果是8bit編碼這里變成0xFF
- signed short wData = buf[i + 1];
- wData = MAKEWORD(buf[i], buf[i + 1]);
- signed long dwData = wData;
- for (int j = 0; j < uRepeat; j++)
- {
- dwData = dwData * vol;
- if (dwData < -0x8000)
- {
- dwData = -0x8000;
- }
- else if (dwData > 0x7FFF)
- {
- dwData = 0x7FFF;
- }
- }
- wData = LOWORD(dwData);
- buf[i] = LOBYTE(wData);
- buf[i + 1] = HIBYTE(wData);
- i += 2;
- }
- }