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

  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. signed short wData = buf[i + 1];
  12. wData = MAKEWORD(buf[i], buf[i + 1]);
  13. signed long dwData = wData;
  14. for (int j = 0; j < uRepeat; j++)
  15. {
  16. dwData = dwData * vol;
  17. if (dwData < -0x8000)
  18. {
  19. dwData = -0x8000;
  20. }
  21. else if (dwData > 0x7FFF)
  22. {
  23. dwData = 0x7FFF;
  24. }
  25. }
  26. wData = LOWORD(dwData);
  27. buf[i] = LOBYTE(wData);
  28. buf[i + 1] = HIBYTE(wData);
  29. i += 2;
  30. }
  31. }

最新文章

  1. java基础2.-------interface接口类,实现接口
  2. [转]Android App整体架构设计的思考
  3. ASProtect注册码使用教程|ASProtect SKE(加壳脱壳工具) 2.56 汉化注册版
  4. viewpager实现酷炫侧滑demo
  5. 小米miui5系统的webview在处理动画事件transitionEnd事件时,竟然要用transitionend才行
  6. params参数的使用方法
  7. CodeForces 13E. Holes 分块处理
  8. Eureka源码分析:Eureka不会进行二次Replication的原因
  9. 通过VuePress管理项目文档(一)
  10. vue---slot,slot-scoped,以及2.6版本之后插槽的用法
  11. bzoj 3620 暴力KMP
  12. Linux ugo 权限
  13. tf.trainable_variables() and tf.all_variables()
  14. Django -- settings 详解
  15. Jquery 只保留数字和小数点(正则)
  16. spring MVC 统一异常处理(webapi和web分开处理)
  17. intellij idea14 +svn配置
  18. poj1953 World Cup Noise
  19. SQL Server触发器的基本使用
  20. vista风格的cms企业html后台管理系统模板——后台

热门文章

  1. spark的排序方法
  2. Git-历史穿梭
  3. 9.5web service基础知识
  4. 图的深度优先遍历&amp;广度优先遍历
  5. Oracle 11g数据库安装与卸载的方法图解(windows)
  6. linux socket下send()&amp;recv()调用
  7. 剑指Offer - 九度1372 - 最大子向量和(连续子数组的最大和)
  8. 《Cracking the Coding Interview》——第17章:普通题——题目3
  9. express 热启动 静态文件部署 跨域解决 调试
  10. Pythontutor:可视化代码在内存的执行过程