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. 虚拟机上的ubuntu安装vmware tools
  2. 关于blog的编写 规则
  3. 西安交大三月计算机考试题,西安交通大学17年3月课程考试《计算机控制技术》作业考核试题.docx...
  4. 单点登录系统cas资料汇总
  5. android 线程那点事
  6. 花生壳For Linux安装步骤
  7. xcode7打包ipa文件
  8. 云计算之路-阿里云上:4000IOPS的RDS+16核CPU的负载均衡
  9. 看门狗超时前在内核打印信息
  10. 系统学习机器学习之半参数方法(一)--基于距离
  11. 通知:小密圈暂停服务
  12. 使用EntityFramework连接 Mysql
  13. 常见的人脸对齐方法 python
  14. 3Dmax转cad及批量出图
  15. WINVNC源码阅读(七)
  16. 存储系统(一)—— 存储器介绍
  17. 百度AI战疫五十天:三场战役与一次胜利
  18. 网易2018校园招聘编程题真题集合3字符串碎片
  19. 2542: 弟弟的作业
  20. 内存中常见的错误及解决方法

热门文章

  1. 深入了解Excel工作表中的控件
  2. 朴素贝叶斯分类器常用的三种条件概率模型:伯努利、多项式、高斯模型
  3. 基于Spring Boot 技术的后台管理框架
  4. java 数据库基础_数据库基础知识考试及答案 PDF 下载
  5. 【3dmax千千问】初学3dmax插件神器第22课:3dmax效果图渲染进阶教程|VRAY相机为何要与VRAY灯光、VRAY材质、VRAY贴图等进行匹配呢?食住玩3dmax千千问教程
  6. 六自由度机械臂参数化设计
  7. 2022智慧工地劳务实名制系统——工地人员高效管理黑科技
  8. Python打包exe,以及解决闪退
  9. android studio高考倒计时,高考倒计时app排行榜
  10. 基于java+swing的物业收费管理系统(java+swing+Gui)