通过编程实现调整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