C++ 调节PCM音频音量大小
在用解码器解码音频数据得到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;
- }
- }
C++ 调节PCM音频音量大小的更多相关文章
- 手机作为蓝牙音频源连接到Linux时,如何通过音量键调节传入的音量大小
背景一: 我们知道,把手机作为音频源通过蓝牙连接到电脑,就可以把手机的声音转移到电脑上. 背景二: 我喜欢带着耳机用我的Linux本刷youtube,也喜欢用我的iPhone听音乐.为了同时做这两件事 ...
- moviepy音视频开发:使用volumex调节音量大小及其花式用法
☞ ░ 前往老猿Python博文目录 ░ 一.概述 音频数据的音量体现为声音的振幅,振幅越大则声音越大,具体到音频帧数据上,体现为声音的绝对值越大则振幅越大音量越大,调节音量大小的本质是调整帧数据的绝 ...
- linux下调整音量大小
不得不说,在linux下整音频和视频真是不容易.在windows中自带了关于音频和视频的工具,在linux下要两眼一抹黑地使用命令进行操作. 主要还是在linux下没找到合适的gui的调整工具. 几番 ...
- 使用AudioTrack播放PCM音频数据(android)
众所周知,Android的MediaPlayer包含了Audio和video的播放功能,在Android的界面上,Music和Video两个应用程序都是调用MediaPlayer实现的.MediaPl ...
- Android 获取 AudioRecord 麦克风音量大小并做选择性发送
extends:http://blog.csdn.net/alvinhuai/article/details/8955127,http://mikespook.com/2010/11/android- ...
- Android OpenSL ES 开发:Android OpenSL 录制 PCM 音频数据
一.实现说明 OpenSL ES的录音要比播放简单一些,在创建好引擎后,再创建好录音接口基本就可以录音了.在这里我们做的是流式录音,所以需要用至少2个buffer来缓存录制好的PCM数据,这里我们可以 ...
- Android OpenSL ES 开发:OpenSL ES利用SoundTouch实现PCM音频的变速和变调
缘由 OpenSL ES 学习到现在已经知道 OpenSL ES 不仅能播放和录制PCM音频数据,还能改变声音大小.设置左声道或右声道播放.还能变速播放,可谓是播放音频的王者.但是变速有一点不好的就是 ...
- 视音频数据处理入门:PCM音频采样数据处理
===================================================== 视音频数据处理入门系列文章: 视音频数据处理入门:RGB.YUV像素数据处理 视音频数据处理 ...
- moviepy音视频开发:audio_normalize调整剪辑音量大小到正常
☞ ░ 前往老猿Python博文目录 ░ 概述 audio_normalize函数用于将一个剪辑的音量大小调整到正常,调整的思路就是将剪辑中音频帧数据的最大值取出来,当其值小于1时,表示剪辑的音量偏小 ...
随机推荐
- 2037: [Sdoi2008]Sue的小球
2037: [Sdoi2008]Sue的小球 链接 题解 论文 代码 #include<cstdio> #include<algorithm> #include<cstr ...
- laravel5.5容器
目录 1. 比较典型的例子就是 cache 缓存 2. 容器顾名思义,其实就是完成存取过程 2.1 绑定过程 简单绑定 绑定单例 绑定实例 绑定初始数据 2.2 解析过程 容器主要是为了实现控制反转, ...
- VS Extension+NVelocity系列(二)——让VS支持 NVelocity的智能提示(上)
一.基础概念 应该庆幸的是,VS的插件是靠着MEF实现而不是MAF,这让你所做的工作减轻了许多.如果在这之前,您已经了解了MEF的原理,我想对于VS插件的编写,您应该是很容易就能理解的.看看几个VS2 ...
- 玩转Openstack之Nova中的协同并发(二)
玩转Openstack之Nova中的协同并发(二) 昨天介绍了Python中的并发处理,主要介绍了Eventlet,今天就接着谈谈Openstack中Nova对其的应用. eventlet 在nova ...
- 基于Xtrabackup备份集来恢复某个误删除的表(drop)
Preface Yesterday,I've demonstratated how to rescue a droped and a truncated table based on ...
- JFinal Template Engine 使用
官方文档:JFinal Template Engine 文档
- flask-ssti,xss的防止
源码 import uuid from flask import Flask, request, make_response, session,render_template, url_for, re ...
- mongoDB坑
1 mongodb.cnf文件中有个选项为bind_id:127.0.0.1,如果是测试环境,需要远程访问的话,就先改成0.0.0.1 auth:如果只是学习的话,建议先改成false,否则后面会有各 ...
- excel批量导入
https://www.cnblogs.com/mingyue1818/p/4828865.html
- Entity Framework(四)--EF原理和状态管理
一.原理: 如何查看真正执行的SQL是怎样的? DbContext有一个Database属性,Database属性有一个Log属性,是Action委托类型其中的参数就是sql语句,每次EF执行sql语 ...