音频编解码·格式篇(1)Wave PCM audio format(WAV)
音频编解码·格式篇(1)Wave PCM audio format(WAV)
- 作者:柳大·Poechant
- 博客:Blog.CSDN.net/Poechant
- 邮箱:zhongchao.ustc@gmail.com
- 日期:April 6th, 2012
0 音频编解码基础
- 采样率:声音信号在“模数转换”过程中单位时间内采样的次数。
- 采样值:每一次采样周期内声音模拟信号的积分值。
- 单声道:11.025 KHz 采样值,8 Bits 采样值(0x00 - 0xFF)。
- 双声道:44.1 KHz 采样值,16 Bits 采样值。高八位表示左声道,低八位表示右声道。
1 WAV音频文件格式
见下图:
- 文件头
- RIFF/WAV 文件标识段
- 声音数据格式说明段
- 数据体:由 PCM(脉冲编码调制)格式表示的样本组成。
单声道 WAV 文件中,声道0代表左声道,声道1代表右声道;多声道 WAV 文件中,左右声道的样本是交替出现的。
1.1 文件头格式:
偏移地址 | 字节数 | 数据类型 | 内容 |
---|---|---|---|
0x00 | 4 | char | “RIFF”标志 |
0x04 | 4 | long int | 文件长度 |
0x08 | 4 | char | “WAVE”标志 |
0x0C | 4 | char | “fmt ”标志 |
0x10 | 4 | 过度字节(不定) | |
0x14 | 2 | int | 格式类别(0x10是PCM形式的声音格式) |
0x16 | 2 | int | 通道数(1为单声道,2为双声道) |
0x18 | 2 | int | 采样率(每秒的样本数,表示每个通道的播放速度) |
0x1C | 4 | long int | 波形音频数据传输速率,为(通道数x每秒数据位数x样本的数据位数/8,播放器根据此值估算缓冲区大小) |
0x20 | 2 | int | 数据块的调整数,为(通道数x没样本的数据位值/8),播放软件一次需要处理多个该值大小的字节数据,以便就爱将其值用于缓冲区的调整 |
0x22 | 2 | 每样本的数据位数,表示每个声道中各样本的数据位数,如果有多个声道,对每个声道而言,样本大小都一样 |
1.2 数据体格式:
偏移地址 | 字节数 | 数据类型 | 内容 |
---|---|---|---|
0x24 | 4 | char | 数据标记符“data” |
0x28 | 4 | long int | 语音数据的长度 |
然后就是语音数据帧了。下表中的0声道代表左声道,1声道代表右声道:
偏移地址 | sample1 | sample2 |
---|---|---|
8位单声道 | 0声道 | 0声道 |
8位双声道 | 0声道,1声道 | 0声道,1声道 |
16位单声道 | 0声道低字节,0声道高字节 | 0声道低字节,0声道高字节 |
16位双声道 | 0声道低字节,0声道搞字节 | 1声道低字节,1声道高字节 |
1.3 WAV文件格式实例分析(转载)
地址段 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x00000000 | 52 | 49 | 46 | 46 | 0A | 06 | 01 | 00 | 57 | 41 | 56 | 45 | 66 | 6D | 74 | 20 |
0x00000010 | 12 | 00 | 00 | 00 | 01 | 00 | 02 | 00 | 44 | AC | 00 | 00 | 10 | B1 | 02 | 00 |
0x00000020 | 04 | 00 | 10 | 00 | 00 | 00 | 66 | 61 | 63 | 74 | 04 | 00 | 00 | 00 | 76 | 41 |
0x00000030 | 00 | 00 | 64 | 61 | 74 | 61 | D8 | 05 | 01 | 00 | 00 | 00 | 00 | 00 | FF | FF |
0x00000040 | 00 | 00 | FE | FF | FE | FF | 00 | 00 | 00 | 00 | FE | FF | FE | FF | 00 | 00 |
… | … | … | … | … | … | … | … | … | … | … | … | … | … | … | … | … |
0x00000050 | 64 | 61 | 6B | 61 | D8 | 05 | 01 | 00 |
地址段 | 字节数 | 数据类型 | 内容 |
---|---|---|---|
0x00 - 0x03 | 4 | 4个char | 标志位,"RIFF" |
0x04 - 0x07 | 4 | 1个int | 文件长度,小尾端,实际是0x0001060A |
0x08 - 0x0B | 4 | 4个char | 标志位,“WAVE” |
0x0C - 0x0F | 4 | 4个char | 标志位,“fmt ”,fmt表示为,最后一个是空格 |
0x10 - 0x13 | 4 | 1个int | 0x00000012,sizeof(PCMWAVEFORMAT) |
0x14 - 0x15 | 2 | 1个short | 格式类别,1(WAVE_FORMAT_PCM)表示PCM形式的声音数据 |
0x16 - 0x17 | 2 | 1个short | 通道数,1为单声道,2为双声道 |
0x18 - 0x1B | 4 | 1个int | 采样率 |
0x1C - 0x1F | 4 | 1个int | 0x10B10000,每秒数据量 |
0x20 - 0x21 | 2 | 1个short | 数据块的调整值(按字节算) |
0x22 - 0x4F | |||
0x50 - 0x53 | 4 | 4个char | 标志位,“data” |
0x54 - 0x57 | 4 | 1个int | 语音数据大小,0x000105D8 |
Reference
- WAV(PCM)文件格式分析
音频编解码·格式篇(1)Wave PCM audio format(WAV)相关推荐
- 音频编解码·实战篇(1)PCM转至AAC(AAC编码)
音频编解码·实战篇(1)PCM转至AAC(AAC编码) 作者:柳大·Poechant 博客:blog.csdn.net/poechant 邮箱:zhongchao.ustc@gmail.com 日期: ...
- 视音频编解码学习工程:FLV封装格式分析器
===================================================== 视音频编解码学习工程系列文章列表: 视音频编解码学习工程:H.264分析器 视音频编解码学习 ...
- G711(PCM/PCMA/PCMU),G721,G723,G729等 音频编解码
G711,G721,G723音频编解码,G729音频库,Android G711(PCMA/PCMU).G726.PCM音频转码到AAC,ffmpeg接收g723音频流,Android G726语音编 ...
- Androidpcm格式音频编解码及播放,socket文件传输通讯,soundTouch变声框架 合成的一款仿微信语音按住说话的demo
pcm格式音频编解码及播放,socket文件传输通讯,soundTouch变声框架 合成的一款仿微信语音按住播放的demo 效果: -------------- 代码: MainActivity ...
- 视音频编解码学习工程:TS封装格式分析器
===================================================== 视音频编解码学习工程系列文章列表: 视音频编解码学习工程:H.264分析器 视音频编解码学习 ...
- [总结]FFMPEG视音频编解码零基础学习方法--转
ffmpeg编解码学习 目录(?)[-] ffmpeg程序的使用ffmpegexeffplayexeffprobeexe 1 ffmpegexe 2 ffplayexe 3 ffprobeexe ff ...
- 基于 CoreAudio 的音频编解码(一):音频解码
系列文章目录 基于 CoreAudio 的音频编解码(一):音频解码 基于 CoreAudio 的音频编解码(二):音频编码 前言 Core Audio 是iOS和MAC系统中的关于数字音频处理的基础 ...
- FFMPEG视音频编解码零基础学习方法
总结]FFMPEG视音频编解码零基础学习方法 在CSDN上的这一段日子,接触到了很多同行业的人,尤其是使用FFMPEG进行视音频编解码的人,有的已经是有多年经验的"大神",有的是刚 ...
- 音视频开发(5)---FFMPEG视音频编解码零基础学习方法
FFMPEG视音频编解码零基础学习方法 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/leixiaohua1020/article/details/ ...
最新文章
- java对一个无序列表进行分组
- git初使用(本地创建后第一次提交到git)
- Dependency injection in .NET Core的最佳实践
- 重言式判别c语言中文网,重言式判别 重言式判别源码及课程设计 c语言版.doc
- std::string的resize()与reserve()的区别
- noj数据结构稀疏矩阵的加法十字链表_数据结构之:图
- 产品经理如何锻炼自己看透事物本质的能力
- linux-关于用户的约定
- (51)Verilog HDL上升沿检测
- 你真的会用Context么?
- 接口自动化测试框架搭建(6、对接口进行mock的方法封装)--python+HTMLTestRunnerCN+request+unittest+mock+db
- 推荐5款你用过之后不舍得卸载的小众软件
- python风变编程是骗局吗-如何看待风变编程的 Python 网课?
- 落幕,致我的大学生活
- wordpress博客 qq客服插件
- mysql语句中limt_mysql sql语句中的limit用法
- Oracle公司中文翻译为“甲骨文”的来源是什么?
- php中=%3e -%3e的区别,华为nova3e与nova2s买哪个好?华为nova2s和nova3e区别对比详细评测...
- Linux(CentOS)操作系统安装详解
- 精读5G:关于5G的NSA和SA,看完秒懂!
热门文章
- weblogic12C如何解决AdminServer.lok问题
- QT 生成.so动态库默认生成.so .so.1 .so.1.0 .so.1.0.0
- 手工设置Windows服务依赖关系
- 什么是企业宣传型网站?
- 电缆规格型号介绍一览表
- 51单片机--SIM800C准备阶段<1>
- 水果乐园java 闯关游戏免费下载_水果乐园游戏下载-水果乐园游戏安卓版 v1.0_手机乐园...
- hud 1013 求一个数的数字根(合九法||模拟)
- Oracle内置SQL函数-分类整理大全
- java 冬季运动会_2015关于冬天的作文:寒冷的冬天续写