关于wav amr音频分析
关于wav amr音频分析
从事嵌入式开发过程中,如果遇到播放wav 和 amr格式音频的话,我们就必须要对这两种音频格式的数据有所了解,今天就简单介绍下这两种音频文件。
1.WAV文件
WAVE文件格式是Microsoft的RIFF规范的一个子集,用于存储数字音频,整个文件就是一个RIFF大块,它的基本形式包括两种块:fmt块,用于描述压缩格式、采样率等基本信息;data块。包含实际样本数据。
咋们先贴一张WAV文件的二进制数据图。
WAV文件=wav头+ 音频数据
先介绍下wav音频数据的头分析
地址/大小 | 描述 |
---|---|
00H 4 bytes | RIFF |
04H 4 bytes | 从此地址计算本文件的大小 |
08H 4 bytes | wav |
0cH 4 bytes | fmt |
10H 4 bytes | 从此地址计算文件大小 |
14H 2 bytes | 编码格式0x0001代表pcm |
16H 2 bytes | channels,1-单声道,2-双声道 |
18H 4 bytes | sample rate 采用频率 |
1cH 4 bytes | bitssample ratechannels/8 每秒传输字节数 |
20H 2 bytes | bits*channels/8 |
22H 2 bytes | bits(量化位数) |
24H 4 bytes | “data” |
28H 4 bytes | 后面开始的语音数据的大小,真正的文件大小=这个值+0x2c |
2cH … | 语音数据 |
c语言中对于一个wav头,如下
struct wav_header {uint32_t riff_id;uint32_t riff_sz;uint32_t riff_fmt; /* riff end */uint32_t fmt_id;uint32_t fmt_sz; /* fmt sz fmt大小 wav头中描述其格式占用字节数 */uint16_t audio_format; /* fmt_sz start */uint16_t num_channels;uint32_t sample_rate;uint32_t byte_rate; /* sample_rate * num_channels * bps / 8 */uint16_t block_align; /* num_channels * bps / 8 */uint16_t bits_per_sample; /* fmt_sz end */uint32_t data_id;uint32_t data_sz;
};
一个wav文件偏移wav大小就是pcm格式的音频数据了,该数据可以被声卡直接播放。我们在编写程序时,如果要播放或者录制wav格式的音频该怎么办。
播放:
提取wav头文件,包括的一些重要参数,采样率,音频本身音频格式,通道,音频数据大小等,主要用于打开与设置pcm设备,然后将pcm音频数据直接送入声卡中播放即可。
录制:
创建一个文件,先写入wav结构体的头,然后使用音频应用接口从pcm设备中读取要录制的pcm数据后,直接写入,即可形成一个wav格式的音频。
2.amr格式音频
amr格式音频叫什么,自适应多速率编码格式,它分为两种,一种为amrnb,另一种为amrwb,两者区别如下:
amr-nb:语音带宽范围:300-3700Hz,8KHz采样频率
amr-wb:语音带宽范围:50~7000Hz,16KHz采样频率
简单说下amrnb音频格式
amrnb音频主要有如下编码方式
amr关键在于20ms采样一帧数据,这个是重点。
8KHz的采样频率,20ms采样一帧数据,每秒50帧数据,每帧数据8KHz/50=160个采样点,会得到一个数据长度的数据,amr是压缩型的数据,所以需要对采样数据经常信息提取,把数据进行压缩,重新编码,通过此法得到8中编码格式如下:
序号 | 规格 | 音频帧字节数 | 帧头 | FT |
---|---|---|---|---|
0 | AMR 4.75 | 13 | 0400000100 | 0000 |
1 | AMR 5.15 | 14 | 0C 00001100 | 0001 |
2 | AMR 5.9 | 16 | 14 00010100 | 0010 |
3 | AMR6.7 | 18 | 1C 00011100 | 0011 |
4 | AMR 7.4 | 20 | 24 00100100 | 0100 |
5 | AMR 7.95 | 21 | 2C 00101100 | 0101 |
6 | AMR 10.2 | 27 | 34 00110100 | 0110 |
7 | AMR 12.2 | 32 | 3C 00111100 | 0111 |
下面看看amr格式文件二进制数据:
从上图可知,当前文件采用AMR12.2规格编码方式进行编码的,我们如果要播放此格式音频,如何提取数据,并且对数据进行节目呢?
1.偏移amr头 6个字节
2.读取一个字节数据,从中提取出本语音帧使用的规格,判断出字节数,在从数据中提取出语音帧。
一般语音帧帧头不属于上面的8种,采用直接跳过,往下读取的方法,最终将整个amr文件读取完毕为止。
关于wav amr音频分析相关推荐
- amr文件格式分析【转http://blog.csdn.net/dinggo/article/details/1966444】
目录 1. 概述 2. AMR编码方式 3. AMR文件结构示范图 4. AMR帧头格式分析 5. 异常帧分析 6. AMR帧读取算法 7. 参考资料 1. ...
- vue 微信录音倒计时_vue的微信语音功能,录音+对接口返回amr音频播放-Go语言中文社区...
vue的微信语音功能,录音+对接口返回amr音频播放 最近的新项目需要调用微信的录音功能,但是后台又不给音频转码,无奈之下就踏上了研究前端音频编码器这东西. 参考的GitHub仓库--Recorder ...
- c语言 输出音频 单片机,单片机播放WAV格式音频的理解
CSDN账号注册了3年,一直没有上来过,更不用说写博客了.我不知道博客的具体用途,我只想把它当做一种心得来发表,可能是一些技术上的理解或者生活上的小故事.好了,下面我将记录我对WAV播放器的理解. 很 ...
- 微信录音amr音频文件转mp3格式
直到现在,仍然不存在一项旨在网页上播放音频的标准.HTML5 规定了一种通过 audio 元素来包含音频的标准方法.audio 元素能够播放声音文件或者音频流.当前,audio 元素支持三种音频格式: ...
- 单片机播放WAV格式音频的理解
CSDN账号注册了3年,一直没有上来过,更不用说写博客了.我不知道博客的具体用途,我只想把它当做一种心得来发表,可能是一些技术上的理解或者生活上的小故事.好了,下面我将记录我对WAV播放器的理解. 很 ...
- 深度学习 应用 扫地机器人_如何将机器学习和深度学习方法应用于音频分析
深度学习 应用 扫地机器人 要查看代码,培训可视化以及本文末尾有关python示例的更多信息,请访问Comet项目页面 . 介绍 尽管有关深度学习的许多著作和文献都涉及计算机视觉和自然语言处理(NLP ...
- (原创)speex与wav格式音频文件的互相转换
我们的司信项目又有了新的需求,就是要做会议室.然而需求却很纠结,要继续按照原来发语音消息那样的形式来实现这个会议的功能,还要实现语音播放的计时,暂停,语音的拼接,还要绘制频谱图等等. 如果是wav,m ...
- python实现录音并去燥_python实现录音并去燥_利用Python进行录音和音频分析
pyaudio简介 Python有个很强大的处理音频的库pyqudio, 使用pyaudio库可以进行录音,播放,生成wav文件等等.更多介绍可以查阅官方文档. pyaudio安装 各平台安装方法 w ...
- 【原】AMR音频解码插件开发总结
近段时间一直在忙碌AMR音频解码插件的开发,由于对驱动开发和音频编解码知识了解不是很多,加之自身经验欠缺,致使开发过程中碰到太多棘手的问题.经过努力学习和领导的大力帮助下终于完成了插件的开发,现将开发 ...
最新文章
- 人人都能搞懂的AI(四)- AI对社会的影响
- 常考数据结构和算法:链表中环的入口节点
- java fangfa_java 集合
- Java提高篇 —— 抽象类与接口
- new Date(date).getTime()的兼容问题
- 2016.08.15
- 高中女销售学Linux云计算4个月搞定年薪12万
- 43w+条手机电话号码归属地数据库免费下载·附区号邮编
- 广东诚美计算机专修学院面试,三下乡|一轮面试,与你不期而遇
- 当AI开始创作出令人惊叹的作品时 你的双眼已被蒙蔽
- [bzoj4453]cys就是要拿英魂!
- springboot 启动banner 打印 佛祖保佑
- python列表两两组合_关于python:两个列表之间的组合?
- Android简单实现比较两张涂鸦相似度
- fastapi 大型应用_fastapi使用教程
- 亲历:IT 从业者避免猝死攻略 v1.0
- 【转】CMNET和CMWAP区别
- 7自由度整车仿真模型建立
- Nginx实现XSS、SQL注入防护 —— 筑梦之路
- MySQL8.0.26安装配置教程(windows 64位)