C++ 调节PCM音频音量大小
2017-05-10 09:28
816 查看
在用解码器解码音频数据得到PCM音频数据块之后,可以在将数据送给声卡播放之前调节其音量大小,具体的实现函数如下:
[cpp] view plain copy
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;
}
}
[cpp] view plain copy
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;
}
}
相关文章推荐
- C++ 调节PCM音频音量大小
- C++ 调节PCM音频音量大小
- PCM音频数据音量大小调节
- PCM音频数据音量大小调节
- FFMPEG调节音频的音量大小,混音
- Cocos2D-x 用CCControlSlider设置调节音量的大小
- VC++音频技术之调节音量及设置静音
- 使用C语言实现pcm格式音频音量的调整
- Android获取、设置音频的音量大小
- 小弟需要一个能显示播放音频的各频率音量大小(不知道叫什么东东)的控件~!
- 音频技术之调节音量及设置静音
- [小笔记]Android 调节音乐音量大小&改变闹钟铃声大小
- activity中点击系统音量键无法调节大小
- 红米音量大小调节教程
- 【VC++技术杂谈001】音频技术之调节音量及设置静音
- 【C语言】PCM音频数据处理---音量增大或减小
- 调节音量大小
- cocos2d-x 控制android硬件音量大小调节按钮
- 音频引擎FMOD学习记录02:控制暂停/继续,调节音量,设置声效
- html音频音量调节