C++ 调节PCM音频音量大小
2024-09-05 10:34:19
在用解码器解码音频数据得到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;
- }
- }
最新文章
- java基础2.-------interface接口类,实现接口
- [转]Android App整体架构设计的思考
- ASProtect注册码使用教程|ASProtect SKE(加壳脱壳工具) 2.56 汉化注册版
- viewpager实现酷炫侧滑demo
- 小米miui5系统的webview在处理动画事件transitionEnd事件时,竟然要用transitionend才行
- params参数的使用方法
- CodeForces 13E. Holes 分块处理
- Eureka源码分析:Eureka不会进行二次Replication的原因
- 通过VuePress管理项目文档(一)
- vue---slot,slot-scoped,以及2.6版本之后插槽的用法
- bzoj 3620 暴力KMP
- Linux ugo 权限
- tf.trainable_variables() and tf.all_variables()
- Django -- settings 详解
- Jquery 只保留数字和小数点(正则)
- spring MVC 统一异常处理(webapi和web分开处理)
- intellij idea14 +svn配置
- poj1953 World Cup Noise
- SQL Server触发器的基本使用
- vista风格的cms企业html后台管理系统模板——后台
热门文章
- spark的排序方法
- Git-历史穿梭
- 9.5web service基础知识
- 图的深度优先遍历&;广度优先遍历
- Oracle 11g数据库安装与卸载的方法图解(windows)
- linux socket下send()&;recv()调用
- 剑指Offer - 九度1372 - 最大子向量和(连续子数组的最大和)
- 《Cracking the Coding Interview》——第17章:普通题——题目3
- express 热启动 静态文件部署 跨域解决 调试
- Pythontutor:可视化代码在内存的执行过程