PCM音频数据音量大小调节
转载:http://blog.csdn.net/timsley/article/details/50683084
PCM音频数据增大或减小的原理主要是,将采样的数据乘上一个数字或者是除以一个数字,但要注意溢出处理。具体实现如下
C语言实现
#define OLD_FILE_PATH "file.pcm"
#define VOL_FILE_PATH "vol.pcm"int volume_adjust(short * in_buf, short * out_buf, float in_vol)
{int i, tmp;// in_vol[0, 100]float vol = in_vol - 98;if(-98<vol && vol<0)vol = 1/(vol*(-1));else if(0<=vol && vol<=1)vol = 1;/*else if(1<=vol && vol<=2)vol = vol;*/else if(vol<=-98)vol = 0;else if(vol>=2)vol = 40; //这个值可以根据你的实际情况去调整tmp = (*in_buf)*vol; // 上面所有关于vol的判断,其实都是为了此处*in_buf乘以一个倍数,你可以根据自己的需要去修改// 下面的code主要是为了溢出判断if(tmp > 32767)tmp = 32767;else if(tmp < -32768)tmp = -32768;*out_buf = tmp;return 0;
}void pcm_volume_control(int volume)
{short s16In = 0;short s16Out = 0;int size = 0;FILE *fp = fopen(OLD_FILE_PATH, "rb+");FILE *fp_vol = fopen(VOL_FILE_PATH, "wb+");while(!feof(fp)){size = fread(&s16In, 2, 1, fp);if(size>0){ volume_adjust(&s16In, &s16Out, volume);fwrite(&s16Out, 2, 1, fp_vol); }}fclose(fp);fclose(fp_vol);
}int main(void)
{pcm_volume_control(100); return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
上面程序中,main函数中pcm_volume_control(100),这里设置为100主要是为了让其走入volume_adjust函数中的最后一个else语句,而最终放大的数据,是将其乘上一个40,这个值可以根据你自己的需求去调整。
vol = 40;
tmp = (*in_buf)*vol;
- 1
- 2
- 1
- 2
经过上面的算法放大后,可以用Audacity工具去查看,放大后的PCM数据,如下图所示,上面的波形是原始数据,下面的波形是经过音量放大后的数据
PCM音频数据音量大小调节相关推荐
- 基于C的PCM音频数据的读取、处理与写入(一)
PCM音频数据,是模拟音频信号经过数模转换后直接形成的二进制序列,是一种罕见的音频文件格式,因此在对pcm文件进行读写的时候,要选用以二进制的形式打开. 此次读写的PCM文件,单声道,采样率是16KH ...
- 【C语言】PCM音频数据处理---音量增大或减小
PCM音频数据增大或减小的原理主要是,将采样的数据乘上一个数字或者是除以一个数字,但要注意溢出处理.具体实现如下 C语言实现 #define OLD_FILE_PATH "file.pcm& ...
- Java Mp3转化WAV/PCM音频数据,解码详细解析,提取每一帧数据集合/比特流/播放,一行代码!
导言 大家好!我是原子君 1.因为Java本身只支持,wav,缺少mp3的解码器,所以Java自带的无法对mp3进行处理,这种MPEG-*音频有损压缩标准编码,更不要说使用Java的音频格式和音频流就 ...
- Android OpenSL ES 开发:Android OpenSL 录制 PCM 音频数据
一.实现说明 OpenSL ES的录音要比播放简单一些,在创建好引擎后,再创建好录音接口基本就可以录音了.在这里我们做的是流式录音,所以需要用至少2个buffer来缓存录制好的PCM数据,这里我们可以 ...
- Android录音,PCM音频数据打包成AAC
之前做TUTK音视频流的拉流APP时踩了很多坑,曾经因为编解码问题熬了好几次夜,网上的资料也很有限,自己一点点拼凑来的,在这里Mark一下曾经走过的路. android的音频采集,我用的是androi ...
- 【C++】基于OpenGL的音乐可视化(一):PCM音频数据的解析
PCM的数据解析出音量信息首先要知道的一些基础常识: 采样频率,指每秒钟取得声音样本的次数,采样频率越高,包含的声音信息自然就越多,声音也就越好,频率越高,保存需要的空间也会高. 采样位宽,即采样值, ...
- PCM音频数据、DSD音频数据,spdif,以及DOP格式说明
了解PCM音频数据.DSD音频数据,spdif看下面连接 https://blog.csdn.net/LINZAI508/article/details/111413061#commentBox DO ...
- SDL播放PCM音频数据
SDL播放PCM音频数据 1.PCM简介 PCM(Pulse CodeModulation,脉冲编码调制)音频数据是未经压缩的音频采样数据裸流,它是由模拟信号经过采样.量化.编码转换成的标准数字 ...
- PCM音频和音量调节
声音的本质是一种能量波,由振动而产生的能量波,通过传输介质传输出去.声音有三个属性: 音调(Pitch):声音频率的高低.表示人的听觉分辨一个声音的调子高低的程度.音调主要由声音的频率决定,同时也与声 ...
最新文章
- Java数据库foreign,mysql中的外键foreign key 作者:Java_xb
- CVPR一区审稿人分享:图像分割论文通关攻略
- Memcache知识点梳理
- 数据结构第二版之(课后题)BF算法病毒感染检测
- androidstudio返回之前界面_charles 如何修改服务器返回内容 - Breakpoints
- java中的字符,字符串,数字之间的转换(亲测)
- CSS的@media与@media screen,媒体查询
- 羽枭android,【答疑】Unreal Engine 4 是怎样发布android的? - 视频教程线上学
- SQL 动态创建临时表
- Mac配置maven环境变量
- 征途私服门:一个程序员和一个黑客群的故事
- 计算机的开机自检是由什么完成的,什么是开机自检 取消开机自检方法【方法详解】...
- OpenGL--摄像机
- pc版qq登录及移动版qq登录的申请过程
- 自动化 计算机方向非核心期刊,自动化控制方向好中的核心期刊
- EasyStack林冠宇当选OpenStack基金会技术委员会成员
- 启动车子温车_冷车和热车难打火可以不修,但温车不打火必须得修
- C语言,练习8.9 n*n阶矩阵对角线元素之和
- javaweb操作数据库
- 【CSS】元素的伪类