转载: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音频数据音量大小调节相关推荐

  1. 基于C的PCM音频数据的读取、处理与写入(一)

    PCM音频数据,是模拟音频信号经过数模转换后直接形成的二进制序列,是一种罕见的音频文件格式,因此在对pcm文件进行读写的时候,要选用以二进制的形式打开. 此次读写的PCM文件,单声道,采样率是16KH ...

  2. 【C语言】PCM音频数据处理---音量增大或减小

    PCM音频数据增大或减小的原理主要是,将采样的数据乘上一个数字或者是除以一个数字,但要注意溢出处理.具体实现如下 C语言实现 #define OLD_FILE_PATH "file.pcm& ...

  3. Java Mp3转化WAV/PCM音频数据,解码详细解析,提取每一帧数据集合/比特流/播放,一行代码!

    导言 大家好!我是原子君 1.因为Java本身只支持,wav,缺少mp3的解码器,所以Java自带的无法对mp3进行处理,这种MPEG-*音频有损压缩标准编码,更不要说使用Java的音频格式和音频流就 ...

  4. Android OpenSL ES 开发:Android OpenSL 录制 PCM 音频数据

    一.实现说明 OpenSL ES的录音要比播放简单一些,在创建好引擎后,再创建好录音接口基本就可以录音了.在这里我们做的是流式录音,所以需要用至少2个buffer来缓存录制好的PCM数据,这里我们可以 ...

  5. Android录音,PCM音频数据打包成AAC

    之前做TUTK音视频流的拉流APP时踩了很多坑,曾经因为编解码问题熬了好几次夜,网上的资料也很有限,自己一点点拼凑来的,在这里Mark一下曾经走过的路. android的音频采集,我用的是androi ...

  6. 【C++】基于OpenGL的音乐可视化(一):PCM音频数据的解析

    PCM的数据解析出音量信息首先要知道的一些基础常识: 采样频率,指每秒钟取得声音样本的次数,采样频率越高,包含的声音信息自然就越多,声音也就越好,频率越高,保存需要的空间也会高. 采样位宽,即采样值, ...

  7. PCM音频数据、DSD音频数据,spdif,以及DOP格式说明

    了解PCM音频数据.DSD音频数据,spdif看下面连接 https://blog.csdn.net/LINZAI508/article/details/111413061#commentBox DO ...

  8. SDL播放PCM音频数据

    SDL播放PCM音频数据 1.PCM简介    PCM(Pulse CodeModulation,脉冲编码调制)音频数据是未经压缩的音频采样数据裸流,它是由模拟信号经过采样.量化.编码转换成的标准数字 ...

  9. PCM音频和音量调节

    声音的本质是一种能量波,由振动而产生的能量波,通过传输介质传输出去.声音有三个属性: 音调(Pitch):声音频率的高低.表示人的听觉分辨一个声音的调子高低的程度.音调主要由声音的频率决定,同时也与声 ...

最新文章

  1. Java数据库foreign,mysql中的外键foreign key 作者:Java_xb
  2. CVPR一区审稿人分享:图像分割论文通关攻略
  3. Memcache知识点梳理
  4. 数据结构第二版之(课后题)BF算法病毒感染检测
  5. androidstudio返回之前界面_charles 如何修改服务器返回内容 - Breakpoints
  6. java中的字符,字符串,数字之间的转换(亲测)
  7. CSS的@media与@media screen,媒体查询
  8. 羽枭android,【答疑】Unreal Engine 4 是怎样发布android的? - 视频教程线上学
  9. SQL 动态创建临时表
  10. Mac配置maven环境变量
  11. 征途私服门:一个程序员和一个黑客群的故事
  12. 计算机的开机自检是由什么完成的,什么是开机自检 取消开机自检方法【方法详解】...
  13. OpenGL--摄像机
  14. pc版qq登录及移动版qq登录的申请过程
  15. 自动化 计算机方向非核心期刊,自动化控制方向好中的核心期刊
  16. EasyStack林冠宇当选OpenStack基金会技术委员会成员
  17. 启动车子温车_冷车和热车难打火可以不修,但温车不打火必须得修
  18. C语言,练习8.9 n*n阶矩阵对角线元素之和
  19. javaweb操作数据库
  20. 【CSS】元素的伪类

热门文章

  1. python爬虫---某站排名100
  2. 【kimol君的无聊小发明】—用python写图片下载器
  3. CSS3 matrix矩阵
  4. 记一则SQL 数据库状态(可疑)(紧急)解决方案
  5. 如何清除木马--104种木马手工清除方法
  6. 一篇文章让你读懂 OpenStack 的起源、架构和应用
  7. 面部清洁湿巾行业现状调研及趋势分析报告
  8. 中国互联网web2.0前100
  9. java abstract的用法
  10. 高光谱图像基础知识(一)