PCM声音是重采样为无符号16bit的深度的,然后我们需要得到某一时间(一般是零点几毫秒)PCM所在内存的地址和PCM声音的大小,而16bit也就是16bit/8bit=2byte,在c语言中2byte用short int来表示,因此我们可以从PCM所在地址里面按顺序取出2个byte的数据然后转化成short int的值就可以拿到当前采样点的振幅了,获取的方式是用c语言中的memcpy拷贝2个字节的数据求值就可以了。(注:因为采用点很密集,如果每个采用点都计算一下分贝的话,会消耗一定的性能或者导致声音播放不连贯,所这里采用取其绝对值和的平均值就可以了,因为在这段时间内,我们看不出任何的区别。)

代码实现:

/*** 获取所有振幅之平均值 计算db (振幅最大值 2^16-1 = 65535 最大值是 96.32db)* 16 bit == 2字节 == short int* 无符号16bit:96.32=20*lg(65535);* * @param pcmdata 转换成char类型,才可以按字节操作* @param size pcmdata的大小* @return*/
int Audio::getPcmDB(const unsigned char *pcmdata, size_t size) {int db = 0;short int value = 0;double sum = 0;for(int i = 0; i < size; i += 2){memcpy(&value, pcmdata+i, 2); //获取2个字节的大小(值)sum += abs(value); //绝对值求和}sum = sum / (size / 2); //求平均值(2个字节表示一个振幅,所以振幅个数为:size/2个)if(sum > 0){db = (int)(20.0*log10(sum));}return db;
}

这样就可以获取到PCM声音的分贝值,绘制波形图了。

PCM音频数据的声音分贝值计算相关推荐

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

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

  2. PCM音频数据音量大小调节

    转载:http://blog.csdn.net/timsley/article/details/50683084 PCM音频数据增大或减小的原理主要是,将采样的数据乘上一个数字或者是除以一个数字,但要 ...

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

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

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

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

  5. SDL播放PCM音频数据

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

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

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

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

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

  8. linux pcm接口调试,Linux的alsa接口播放pcm音频数据

    ALSA框架,是Linux的音频接口,包括alsa驱动程序和用户API(asound库). alsa驱动程序,是Linux内核给声卡驱动程序提供的标准. 用户API,是Linux给需要声音的播放和采集 ...

  9. AudioTrack 播放PCM音频数据

    AudioTrack 可以用来播放PCM数据,上一篇博客我讲了AudioRecord可以录制PCM数据 AudioTrack实例可以在两种模式下运行:静态或流式传输. 在Streaming模式下,应用 ...

  10. html5使用websocket发送(PCM)音频数据到服务器,再转在wav文件

    PCM格式 通过websocket发送音频数据. <html> <head><meta charset="utf-8"><title> ...

最新文章

  1. PHP 通过随机数获得ASCII 值返回字符。
  2. C++ 对象的内存布局
  3. 九、华为鸿蒙HarmonyOS应用开发之Java UI框架、常用Image组件使用
  4. 5404. 用栈操作构建数组
  5. java day02 【数据类型转换、运算符、方法入门】
  6. C++生成随机数:几何分布(geometric distribution)
  7. php静态网页和动态网页,静态网页和动态网页的区别是什么
  8. 5 添加数据获得id_D3库实践笔记之元素定位与数据绑定 |可视化系列33
  9. 电驴服务器搜索文件排序,eMule如何搜索文件
  10. ad18的一个bug,修改不了封装
  11. 联想集团杨元庆:联想携手SAP解决用户云计算应用痛点
  12. 南大计算机专业课表,南大课程表
  13. 计算天数(函数)(C语言实现)
  14. Gif动图如何自制?一招教你快速完成gif制作
  15. [ Arduino+Python ] 做一个串口屏,显示CPU使用率
  16. HARK学习(五)--AudioStreamFromMic
  17. python实现m3u8转mp4
  18. 《The Zen of Python, Explained》Posted by Al Sweigart in python - 中译版
  19. 核电站问题(简单DP)
  20. Google打开为360解决办法

热门文章

  1. Java实现 LeetCode 75 颜色分类
  2. 刘润《五分钟商学院》思维导图笔记 - 商业篇
  3. [线性模型总结] 线性回归+方差分析+协方差分析+混合效应+面板数据模型
  4. 深度学习教程(3) | 浅层神经网络(吴恩达·完整版)
  5. 六自由度机械臂研究(1)- 简介, 自由度与改装
  6. Matab六自由度机械臂建模的偷懒方法
  7. ansys 螺栓连接仿真思路
  8. java遍历对象的属性_Java遍历对象所有属性
  9. 使用Arcmap创建企业级地理数据库失败,无法连接到数据库
  10. 动态捕捉(一)VR纪录片例子