很好的资料-wav文件头汇总
- 格式:pdf
- 大小:215.49 KB
- 文档页数:7
表18KHz采样、16比特量化的线性PCM语音信号的WAVE文件头格式表(共44字节)偏移地址字节数数据类型内容文件头定义为00H 4 char "RIFF" char riff_id[4]="RIFF"04H 4 long int 文件总长-8 long int size0=文总长-808H 8 char "WAVEfmt " char wave_fmt[8]10H 4 long int 10 00 00 00H(PCM) long int size1=0x1014H 2 int 01 00H int fmttag=0x0116H 2 int int channel=1 或218H 4 long int 采样率long int samplespersec1CH 4 long int 每秒播放字节数long int bytepersec20H 2 int 采样一次占字节数int blockalign=声道数*量化数/822H 2 int 量化数int bitpersamples=8或1624H 4 char "data" char data_id="data"28H 4 long int 采样数据字节数long int size2=文长-442CH 到文尾char 采样数据表28KHz采样、8比特A律量化的PCM语音信号的WAVE文件头格式表(共58字节)偏移地址字节数数据类型内容文件头定义为00H 4 char "RIFF" char riff_id[4]="RIFF"04H 4 long int 文件总长-8 long int size0=文总长-808H 8 char "WAVEfmt " char wave_fmt[8]10H 4 long int 12000000H(ALAW) long int size1=0x1214H 2 int 06 00H int fmttag=0x0616H 2 int 声道数int channel=1 或218H 4 long int 采样率long int samplespersec1CH 4 long int 每秒播放字节数long int bytepersec20H 2 int 采样一次占字节数int blockalign=0x0122H 4 long int 量化数long int bitpersamples=826H 4 char "fact" char wave_fact="fact"2AH 8 char 0400000000530700H定char temp32H 4 char "data" char wave_data="data"36H 4 long int 采样数据字节数lont int size2=文长-58表38KHz采样、8比特U律量化的PCM语音信号的WAVE文件头格式表(共58字节)偏移地址字节数数据类型内容文件头定义为00H 4 char "RIFF" char riff_id[4]="RIFF"04H 4 long int 文件总长-8 long int size0=文总长-808H 8 char "WAVEfmt " char wave_fmt[8]10H 4 long int 12000000H(ULAW) long int size1=0x1214H 2 int 07 00H int fmttag=0x0716H 2 int 声道数int channel=1 或218H 4 long int 采样率long int samplespersec1CH 4 long int 每秒播放字节数long int bytepersec20H 2 int 采样一次占字节数int blockalign=0x0122H 4 long int 量化数long int bitpersamples=826H 4 char "fact" char wave_fact="fact"2AH 8 char 0400000000530700H定char temp32H 4 char "data" char wave_data="data"36H 4 long int 采样数据字节数lont int size2=文长-58表4ADPCM语音编码后的WAVE文件头格式表(共90字节)偏移地址字节数数据类型内容文件头定义为00H 4 char "RIFF" char riff_id[4]="RIFF"04H 4 long int 文件总长-8 long int size0=文总长-808H 8 char "WAVEfmt " char wave_fmt[8]10H 4 long int 32000000H(ADPCM) long int size1=0x3214H 2 int 02 00H int fmttag=0x0216H 2 int 声道数int channel=1 或218H 4 long int 采样率long int samplespersec1CH 4 long int 每秒播放字节数long int bytepersec20H 2 int 采样一次占字节数int blockalign=声道数*量化数/8 22H 2 int 量化数int bitpersamples=424H 34 char 固定字节char temp146H 4 char "fact" char wave_fact="fact"4AH 8 char 0400000004930600H定char temp252H 4 char "data" char wave_data="data"56H 4 long int 采样数据字节数lont int size2=文长-905AH 到文尾采样数据表5GSM语音编码后的WAVE文件头格式表(共60字节)偏移地址字节数数据类型内容文件头定义为00H 4 char "RIFF" char riff_id[4]="RIFF"04H 4 long int 文件总长-8 long int size0=文总长-808H 8 char "WAVEfmt " char wave_fmt[8]10H 4 long int 14000000H(GSM) long int size1=0x1414H 2 int 31 00H int fmttag=0x3116H 2 int 声道数int channel=1 或218H 4 long int 采样率long int samplespersec1CH 4 long int 每秒播放字节数long int bytepersec20H 8 char 4100000002004001H定char temp128H 8 char 6661637404000000H定char temp230H 4 char 40 E2 05 00H定char temp334H 4 char "data" char wave_data="data"38H 4 long int 采样数据字节数lont int size2=文长-603CH 到文尾采样数据表6SBC语音编码后的WAVE文件头格式表(共58字节)偏移地址字节数数据类型内容文件头定义为00H 4 char "RIFF" char riff_id[4]="RIFF"04H 4 long int 文件总长-8 long int size0=文总长-808H 8 char "WAVEfmt " char wave_fmt[8]10H 4 long int 12000000H(SBC) long int size1=0x1214H 2 int 71 00H int fmttag=0x7116H 2 int 声道数int channel=1 或218H 4 long int 采样率long int samplespersec1CH 4 long int 每秒播放字节数long int bytepersec20H 2 int 采样一次占字节数int blockalign=0x2522H 4 long int 量化数long int bitpersamples=1626H 4 char "fact" char wave_fact="fact"2AH 8 char 0400000076280400H定char temp32H 4 char "data" char wave_data="data"36H 4 long int 采样数据字节数lont int size2=文长-59表7CELP语音编码后的WAVE文件头格式表(共58字节)偏移地址字节数数据类型内容文件头定义为00H 4 char "RIFF" char riff_id[4]="RIFF"04H 4 long int 文件总长-8 long int size0=文总长-808H 8 char "WAVEfmt " char wave_fmt[8]10H 4 long int 12000000H(CELP) long int size1=0x1214H 2 int 70 00H int fmttag=0x7016H 2 int 声道数int channel=1 或218H 4 long int 采样率long int samplespersec1CH 4 long int 每秒播放字节数long int bytepersec20H 2 int 采样一次占字节数int blockalign=0x0C22H 4 long int 量化数long int bitpersamples=1626H 4 char "fact" char wave_fact="fact"2AH 8 char 0400000060520700H定char temp32H 4 char "data" char wave_data="data"36H 4 long int 采样数据字节数lont int size2=文长-58WAVEFORMATEXtypedef struct{WORD wFormatTag; WORD nChannels; DWORD nSamplesPerSec; DWORD nAvgBytesPerSec; WORD nBlockAlign; WORD wBitsPerSample; WORD cbSize; } WAVEFORMATEX;具体参数解释如下:wFormatTag:波形数据的格式,定义在MMREG.H文件中nChannels:波形数据的通道数:单声道或立体声nSamplesPerSec:采样率,对于PCM格式的波形数据,采样率有8.0 kHz,11.025kHz,22.05 kHz,44.1 kHz等nAvgBytesPerSec:数据率,对于PCM格式的波形数据,数据率等于采样率乘以每样点字节数nBlockAlign:每个样点字节数wBitsPerSample:采样精度,对于PCM格式的波形数据,采样精度为8或16cbSize:附加格式信息的数据块大小概念2、定义设备头结构WAVEHDR定义了指向波形数据缓冲区的设备头。
WAV文件格式分析与详解作者:王若钧何杉来源:《数字技术与应用》2014年第03期摘要:WAV文件格式信息是对WAV文件编程的重要依据。
揭开WAV文件格式的奥秘是开发功能强大的具有自主知识产权的语音处理软件的关键。
本文结合波形文件的基本知识,较系统地说明了WAV文件的存储原理、文件结构、WAV文件头格式、基于PCM编码的数据组织,内容全面、清楚、准确,还包含了一些新汇集的参数。
可作为开发人员的参考资料。
关键词:文件格式 WAV 编码声音中图分类号:TP311 文献标识码:A 文章编号:1007-9416(2014)03-0093-021 引言WAV文件是在PC机平台上很常见的、最经典的多媒体音频文件,最早于1991年8月出现在Windows 3.1操作系统上,文件扩展名为WAV,是WaveFom的简写,也称为波形文件,可直接存储声音波形,还原的波形曲线十分逼真。
WAV文件格式简称WAV格式是一种存储声音波形的数字音频格式,是由微软公司和IBM联合设计的,经过了多次修订,可用于Windows,Macintosh,Linix等多种操作系统,详述如下。
2 波形文件的基础知识2.1 波形文件的存储过程声源发出的声波通过话筒被转换成连续变化的电信号,经过放大、抗混叠滤波后,按固定的频率进行采样,每个样本是在一个采样周期内检测到的电信号幅度值;接下来将其由模拟电信号量化为由二进制数表示的积分值;最后编码并存储为音频流数据。
有的应用为了节省存储空间,存储前,还要对采样数据先进行压缩。
2.2 WAV文件的编码编码包括了两方面内容,一是按一定格式存储数据,二是采用一定的算法压缩数据。
WAV格式对音频流的编码没有硬性规定,支持非压缩的PCM(Puls Code Modulation)脉冲编码调制格式,还支持压缩型的微软自适应差分脉冲编码调制Microsoft ADPCM(Adaptive Differential Puls Code Modulation)、国际电报联盟(International Telegraph Union)制定的语音压缩标准ITU G.711 a-law、ITU G.711-law、IMA ADPCM、ITU G.723 ADPCM (Yamaha)、GSM 6.10、ITU G.721 ADPCM编码和其它压缩算法。
常见的文件头格式文件头格式,也称为文件标记或文件签名,是一种用于标识文件类型的数据结构。
在计算机科学中,不同的文件类型由不同的文件头格式来标识。
常见的文件头格式有许多种,下面是一些常见类型的文件头格式:1. 文本文件:UTF-8:通常以 EF BB BF 开头。
UTF-8 是一种可变长度字符编码,用于表示 Unicode 字符。
UTF-16:通常以 FE FF 开头。
UTF-16 是一种 Unicode 字符编码。
ISO-8859-1:也称为 Latin-1,通常以 00 开头。
它是一种用于西欧语言的字符编码。
2. 图片文件:JPEG:以 FF D8 FF 开头。
JPEG 是一种常见的图像文件格式。
PNG:以 89 50 4E 47 0D 0A 1A 0A 开头。
PNG 是一种无损压缩的位图图形格式。
GIF:以 47 49 46 38 或 47 49 46 39 开头。
GIF 是一种基于 LZW 算法的连续色调无损压缩格式。
3. 音频文件:MP3:不同的编码可能有所不同,但常见的以 FF FB 开头。
MP3 是一种音频压缩格式。
WAV:通常以 52 49 46 46 开头。
WAV 是 Windows 操作系统下的音频文件格式。
4. 视频文件:AVI:通常以 52 49 46 46 开头。
AVI 是 Microsoft 开发的音频视频交错格式。
MP4:以 66 FF FF 或 00 FF FF 开头。
MP4 是一种音频和视频封装格式,常用于数字媒体播放。
5. 压缩文件:ZIP:以 50 4B 03 04 或 50 4B 05 06 开头。
ZIP 是用于数据压缩的归档文件格式。
RAR:以 52 61 72 开头。
RAR 是用于数据压缩的归档文件格式,由 WinRAR 公司开发。
6. 可执行文件:PE (Windows 可执行文件):通常以 4D 5A 开头。
PE 是 Microsoft Windows 可执行文件的格式。
WAV文件格式分析
WAV(PCM)文件格式是一种容器文件格式,它可以包含多种编码方式的
音频数据,但最常见的是PCM编码方式。
PCM是一种无损的音频编码方式,它将音频信号按照时序进行采样,并将每个采样值量化成离散的数字,进
而进行存储。
PCM编码方式的音频数据是最原始、最接近原始音频信号的
数据,因此在音质上具有高保真性。
文件头是WAV(PCM)文件的第一部分,用于描述整个文件的基本信息。
文件头的长度为44个字节。
它包含了文件的格式、采样率、通道数、量
化位数等信息。
其中,采样率表示每秒采样的次数,通道数表示音频数据
的通道数(例如单声道或立体声),量化位数表示每个采样值用多少位进
行表示。
附加信息部分是可选的,它可以用来存储一些附加的音频信息,如音
频标记、标题、歌手信息等。
附加信息部分的长度可以根据需要进行扩展。
然而,WAV(PCM)文件格式也存在一些不足之处。
由于PCM编码方式没
有对音频数据进行压缩处理,因此WAV(PCM)文件的尺寸相对较大,占用
存储空间较多。
另外,由于其采样率和量化位数的限制,WAV(PCM)文件格
式可能无法满足一些高质量音频的需求。
针对这些问题,人们常常使用其
他音频格式如MP3、AAC等进行压缩编码,以减小文件尺寸并提高存储和
传输效率。
总结起来,WAV(PCM)文件格式是一种常见的音频文件格式,它基于PCM编码方式进行存储和传输。
WAV(PCM)文件格式具有音质高、兼容性强
等优点,但同时也存在文件较大和存储、传输效率低的不足之处。
WA VE文件作为多媒体中使用的声波文件格式之一,它是以RIFF格式为标准的。
RIFF是英文Resource Interchange File Format的缩写,每个W A VE文件的头四个字节便是“RIFF”。
WA VE文件由文件头和数据体两大部分组成。
其中文件头又分为RIFF/WA V文件标识段和声音数据格式说明段两部分。
WA VE文件各部分内容及格式见附表。
常见的声音文件主要有两种,分别对应于单声道(11.025KHz采样率、8Bit的采样值)和双声道(44.1KHz采样率、16Bit的采样值)。
采样率是指:声音信号在“模→数”转换过程中单位时间内采样的次数。
采样值是指每一次采样周期内声音模拟信号的积分值。
对于单声道声音文件,采样数据为八位的短整数(short int 00H-FFH);而对于双声道立体声声音文件,每次采样数据为一个16位的整数(int),高八位和低八位分别代表左右两个声道。
W A VE文件数据块包含以脉冲编码调制(PCM)格式表示的样本。
WA VE文件是由样本组织而成的。
在单声道WA VE文件中,声道0代表左声道,声道1代表右声道。
在多声道W A VE文件中,样本是交替出现的。
WA VE文件格式说明表偏移地址字节数数据类型内容文件头00H 4 char "RIFF"标志04H 4 long int 文件长度08H 4 char "WA VE"标志0CH 4 char "fmt"标志10H 4 过渡字节(不定)14H 2 int 格式类别(10H为PCM形式的声音数据)16H 2 int 通道数,单声道为1,双声道为218H 2 int 采样率(每秒样本数),表示每个通道的播放速度,1CH 4 long int 波形音频数据传送速率,其值为通道数×每秒数据位数×每样本的数据位数/8。
播放软件利用此值可以估计缓冲区的大小。
1. 音频简介经常见到这样的描述: 44100HZ 16bit stereo 或者 22050HZ 8bit mono 等等. 44100HZ 16bit stereo: 每秒钟有 44100 次采样, 采样数据用 16 位(2字节)记录, 双声道(立体声);22050HZ 8bit mono: 每秒钟有 22050 次采样, 采样数据用 8 位(1字节)记录, 单声道;当然也可以有 16bit 的单声道或 8bit 的立体声, 等等。
采样率是指:声音信号在“模→数”转换过程中单位时间内采样的次数。
采样值是指每一次采样周期内声音模拟信号的积分值。
对于单声道声音文件,采样数据为八位的短整数(short int 00H-FFH);而对于双声道立体声声音文件,每次采样数据为一个16位的整数(int),高八位(左声道)和低八位(右声道)分别代表两个声道。
人对频率的识别范围是 20HZ - 20000HZ, 如果每秒钟能对声音做 20000 个采样, 回放时就足可以满足人耳的需求. 所以 22050 的采样频率是常用的, 44100已是CD音质, 超过48000的采样对人耳已经没有意义。
这和电影的每秒 24 帧图片的道理差不多。
每个采样数据记录的是振幅, 采样精度取决于储存空间的大小:1 字节(也就是8bit) 只能记录 256 个数, 也就是只能将振幅划分成 256 个等级;2 字节(也就是16bit) 可以细到 65536 个数, 这已是 CD 标准了;4 字节(也就是32bit) 能把振幅细分到 4294967296 个等级, 实在是没必要了.如果是双声道(stereo), 采样就是双份的, 文件也差不多要大一倍.这样我们就可以根据一个 wav 文件的大小、采样频率和采样大小估算出一个 wav 文件的播放长度。
譬如 "Windows XP 启动.wav" 的文件长度是 424,644 字节, 它是 "22050HZ /16bit / 立体声" 格式(这可以从其 "属性->摘要" 里看到),那么它的每秒的传输速率(位速, 也叫比特率、取样率)是 22050*16*2 =705600(bit/s), 换算成字节单位就是 705600/8 = 88200(字节/秒),播放时间:424644(总字节数) / 88200(每秒字节数) ≈ 4.8145578(秒)。
多媒体技术近年来发展很快,较好品质的声卡可以提供16位的立体声及44KHZ的播放录制能力,它不仅可以提供原音逼真的取样,其合成的音质也十分理想,有的声卡还加入了数字信号处理器,可编程控制的DSP具有强大的运算能力,它可以用来作声音信息的压缩和一些特殊效果的处理。
具有此功能的声卡提供的WAV文件提供的语音信息可以满足语音特征识别的要求。
RIFF概念在Windows环境下,大部分的多媒体文件都依循着一种结构来存放信息,这种结构称为"资源互换文件格式"(Resources lnterchange File Format),简称RIFF。
例如声音的WAV文件、视频的AV1文件等等均是由此结构衍生出来的。
RIFF可以看做是一种树状结构,其基本构成单位为chunk,犹如树状结构中的节点,每个chunk由"辨别码"、"数据大小"及"数据"所组成。
图一、块的结构示意图辨别码由4个ASCII码所构成,数据大小则标示出紧跟其后数据的长度(单位为Byte),而数据大小本身也用掉4个Byte,所以事实上一个chunk的长度为数据大小加8。
一般而言,chunk本身并不允许内部再包含chunk,但有两种例外,分别为以"RIFF"及"L1ST"为辨别码的chunk。
而针对此两种chunk,RIFF又从原先的"数据"中切出4个Byte。
此4个Byte 称为"格式辨别码",然而RIFF又规定文件中仅能有一个以"RIFF"为辨别码的chunk。
图二、RIFF/LIST块结构只要依循此一结构的文件,我们均称之为RIFF档。
此种结构提供了一种系统化的分类。
如果和MS一DOS文件系统作比较,"RIFF"chunk就好比是一台硬盘的根目录,其格式辨别码便是此硬盘的逻辑代码(C:或D:),而"L1ST"chunk即为其下的子目录,其他的chunk则为一般的文件。
WAV文件格式 :一、综述WAVE文件作为多媒体中使用的声波文件格式之一,它是以RIFF格式为标准的。
RIFF是英文Resource Interchange File Format的缩写,每个WAVE文件的头四个字节便是“RIFF”。
WAVE文件是由若干个Chunk组成的。
按照在文件中的出现位置包括:RIFF WAVE Chunk, Format Chunk, Fact Chunk(可选), Data Chunk。
具体见下图:------------------------------------------------| RIFF WAVE Chunk || ID = 'RIFF' || RiffType = 'WAVE' |------------------------------------------------| Format Chunk || ID = 'fmt ' |------------------------------------------------| Fact Chunk(optional) || ID = 'fact' |------------------------------------------------| Data Chunk || ID = 'data' |------------------------------------------------图1 Wav格式包含Chunk示例其中除了Fact Chunk外,其他三个Chunk是必须的。
每个Chunk有各自的ID,位于Chunk最开始位置,作为标示,而且均为4个字节。
并且紧跟在ID后面的是Chunk大小(去除ID和Size所占的字节数后剩下的其他字节数目),4个字节表示,低字节表示数值低位,高字节表示数值高位。
下面具体介绍各个Chunk内容。
WAV (Waveform audio format )是微软与IBM 公司所开发的一种声音编码格式,它符合RIFF(Resource Interchange File Format)文件规范,用于保存Windows 平台的音频信息资源,被Windows 平台及其应用程序所广泛支持,也是其音乐发烧友中常用的指定规格之一。
由于此音频格式未经过压缩,所以在音质方面不会出现失真的情况,但档案的体积因而在众多音频格式中较为大。
该格式支持多种音频数字,取样频率和声道,标准格式化的WAV 文件和CD 格式一样,也是44.1K 的取样频率,16位量化数字,因此在声音文件质量和CD 相差无几! WAV 打开工具是WINDOWS 的媒体播放器。
每个WAVE 文件的头四个字节便是“RIFF”。
WAVE 文件由文件头和数据体两大部分组成。
其中文件头又分为RIFF /WAV 文件标识段和声音数据格式说明段两部分。
WAVE 文件各部分内容及格式见下表。
文件头声音数据块偏移地址 字节数 类型 内容24H~27H 4 字符 数据标志符(data ) 28H~2BH 4 长整型 采样数据总数 2CH......采样数据示例下图是用UltraEdit 打开的wav 文件的部分截图偏移地址 字节数 类型 内容00H~03H 4 字符 资源交换文件标志(RIFF ) 04H~07H 4 长整数 从下个地址开始到文件尾的总字节数 08H~0BH 4 字符 WAV 文件标志(WAVE ) 0CH~0FH 4 字符 波形格式标志(FMT )10H~13H 4 整数 过滤字节(一般为00000010H )14H~15H 2 整数 格式种类(值为1时,表示数据为线性PCM 编码)16H~17H 2 整数 通道数,单声道为1,双声音为2 18H~1BH 4 长整数 采样频率1CH~1FH 4 长整数 波形数据传输速率(每秒平均字节数) 20H~21H 2 整数 数据的调整数(按字节计算) 22H~23H2整数样本数据位数此段W A V文件是使用window自带的录音机软件完成,生成的16进制文件内容,采用用的是小段存放格式(高地址存储高位,低地址存储低位)按字节存储(8bit)补充头文件样例说明:(1)“52 49 46 46”这个是Ascii字符“RIFF”,这部分是固定格式,表明这是一个WAVE 文件头。
WAVE文件的头文件定义typedef struct _TWavHeader{long rId;long rLen;long wId;long fId;long fLen;WORD wFormatT ag;WORD nChannels;long nSamplesPerSec;long nAvgBytesPerSec;WORD nBlockAlign;WORD wBitsPerSample;long dId;long wSampleLength;}TWavHeader;TWavHeader wh;wh.rId = 0x46464952;wh.rLen = 36;wh.wId = 0x45564157;wh.fId = 0x20746d66;wh.fLen = 16;wh.wFormatTag = 1;wh.nChannels = wChannels;wh.nSamplesPerSec = lRate;wh.nAvgBytesPerSec = wChannels * lRate * (wResolu tion / 8);wh.nBlockAlign = wChannels * (wResolution / 8);wh.wBitsPerSample = wResolution;wh.dId = 0x61746164;wh.wSampleLength = 0;int nHandle = FileCreate(strFileName);FileSeek(nHandle, 0, 0);FileWrite(nHandle, &wh, sizeof(wh));FileClose(nHandle);===================================== wav文件包括头和数据两部分,其结构如下:(从文件头开始依次排列)1)首先是字符串“RIFF”,占4个字节。
2)波形块的大小:DWORD,占4字节。
常见文件类型文件头在计算机领域中,文件头是文件起始部分包含的特定字节序列。
这些字节序列用于识别文件类型,并帮助操作系统和应用程序正确解析文件内容。
不同的文件类型通常具有不同的文件头。
本文将介绍一些常见的文件类型及其对应的文件头。
1. JPEG图像文件 (.jpg, .jpeg)JPEG是一种广泛使用的图像压缩格式。
JPEG文件的文件头通常由ASCII字符“JFIF”(即 0xFF, 0xD8, 0xFF, 0xE0)组成。
2. PNG图像文件 (.png)PNG是一种无损的图像文件格式。
PNG文件的文件头由八个字节组成,分别为ASCII字符“89 P N G”和0x0D, 0x0A, 0x1A,0x0A。
3. GIF图像文件 (.gif)GIF是一种支持动画的图像文件格式。
GIF文件的文件头通常由ASCII字符“GIF87a”或“GIF89a”组成。
4. MP3音频文件 (.mp3)MP3是一种广泛使用的音频压缩格式。
MP3文件的文件头通常以ASCII字符“ID3”开头,紧接着是两个字节的版本号和一个字节的标志位。
5. WAV音频文件 (.wav)WAV是一种无损的音频文件格式。
WAV文件的文件头通常由四个字节的ASCII字符“RIFF”,紧接着是四个字节的文件长度,再是四个字节的ASCII字符“WAVE”。
6. PDF文档 (.pdf)PDF是一种用于显示文档的电子文件格式。
PDF文件的文件头通常由ASCII字符“%PDF”组成。
7. Word文档 (.doc, .docx)Word文档是Microsoft Word处理程序创建的文档文件。
Word 文档的文件头通常包含二进制码。
8. Excel文件 (.xls, .xlsx)Excel文件是Microsoft Excel电子表格程序创建的文件。
Excel文件的文件头通常包含二进制码。
9. PowerPoint演示文稿 (.ppt, .pptx)PowerPoint演示文稿是Microsoft PowerPoint程序创建的文档文件。
WAV文件结构WAVE是录音时用的标准的WINDOWS文件格式,文件的扩展名为“WAV”,数据本身的格式为PCM或压缩型。
WAV文件格式是一种由微软和IBM联合开发的用于音频数字存储的标准,它采用RIFF文件格式结构,非常接近于AIFF和IFF格式。
符合RIFF Resource Interchange File Format规范。
所有的WAV都有一个文件头,这个文件头音频流的编码参数。
WAV文件作为最经典的Windows多媒体音频格式,应用非常广泛,它使用三个参数来表示声音:采样位数、采样频率和声道数。
声道有单声道和立体声之分,采样频率一般有11025Hz(11kHz)、22050Hz(22kHz)和44100Hz(44kHz)三种。
WAV文件所占容量=(采样频率×采样位数×声道)×时间/8(1字节=8bit)。
WAV对音频流的编码没有硬性规定,除了PCM之外,还有几乎所有支持ACM规范的编码都可以为WAV的音频流进行编码。
多媒体应用中使用了多种数据,包括位图、音频数据、视频数据以及外围设备控制信息等。
RIFF为存储这些类型的数据提供了一种方法,RIFF文件所包含的数据类型由该文件的扩展名来标识,能以RIFF文件存储的数据包括:音频视频交错格式数据(.AVI) 、波形格式数据(.WAV) 、位图格式数据(.RDI) 、MIDI格式数据(.RMI) 、调色板格式(.PAL) 、多媒体电影(.RMN) 、动画光标(.ANI) 、其它RIFF文件(.BND) 。
WAVE文件可以存储大量格式的数据,通常采用的音频编码方式是脉冲编码调制(PCM)。
由于WAV格式源自Windows/Intel环境,因而采用Little-Endian字节顺序进行存储。
WAVE文件作为多媒体中使用的声波文件格式之一,它是以RIFF格式为标准的。
RIFF是英文Resource Interchange File Format的缩写,每个WAVE文件的头四个字节便是“RIFF”。
WAV(或WAVE)是微软公司开发的一种声音文件格式WAV (或WAVE)是微软公司开发的一种声音文件格式,是Windows中存储到硬盘上的声音文件的扩展名。
用于保存Windows 平台的音频信息资源。
该格式也支持MSADPCM,CCITTALAW等多种压缩运算法,支持多种音频数字,取样频率是44.1K的取样频率、声道是16位量化数字。
编辑摘要目录•1 简介•2 剖析•3 支持格式•4 编解码器•5 播放wav工具•WAV - 简介WAV是微软公司开发的一种声音文件格式WAV为微软公司(Microsoft)开发的一种声音文件格式,它符合RIFF(Resource Interchange File Format)文件规范,用于保存Windows平台的音频信息资源,被Windows平台及其应用程序所广泛支持,该格式也支持MSADPCM,CCITT A LAW等多种压缩运算法,支持多种音频数字,取样频率和声道:标准格式化的WAV文件和CD格式一样,也是44.1K的取样频率,16位量化数字,因此在声音文件质量和CD相差无几。
WAV音频格式的优点包括:简单的编/解码(几乎直接存储来自模/数转换器(ADC)的信号)、普遍的认同/支持以及无损耗存储。
WAV格式的主要缺点是需要音频存储空间。
对于小的存储限制或小带宽应用而言,这可能是一个重要的问题。
WAV格式的另外一个潜在缺陷是在32位WAV文件中的2G限制。
通常使用三个参数来表示声音,量化位数,取样频率和声道数。
声道有单声道和立体声之分,取样频率一般有11025Hz(11kHz) ,22050Hz(22kHz)和44100Hz(44kHz) 三种,不过尽管音质出色,但在压缩后的文件体积过大!相对其他音频格式而言是一个缺点,其文件大小的计算方式为:WAV格式文件所占容量 = (取样频率 X 量化位数 X 声道) X 时间 / 8 (字节 = 8bit)支持WAV设计的手机有:索尼爱立信P910和诺基亚N90以及采用微软OS的多普达等手机。
WAV格式即WAV。
RIFF WAVE Chunk和Size所占用的字节数,即FileLen - 8 = Size。
然后是Type字段,为'WAVE',表图2| Size | 4 Bytes |数值为16或18,18则最后又附加信息|| FormatTag | 2 Bytes | 编码方式,一般为0x0001 || Channels | 2 Bytes |声道数目,1--单声道;2--双声道| || SamplesPerSec | 4 Bytes | 采样频率| AvgBytesPerSec| 4 Bytes | 每秒所需字节数| |===> WAVE_FORMAT| BlockAlign | 2 Bytes |数据块对齐单位(每个采样需要的字节数)| || BitsPerSample | 2 Bytes | 每个采样需要的bit数| || | 2 Bytes | 附加信息(可选,通过Size来判断有无)| |图3 Format Chunk以'fmt '作为标示。
一般情况下Size为16,此时最后附加信息没有;如果为18图3则最后多了2个字节的附加信息。
主要由一些软件制成的wav格式中含有该2个字节的附加信息。
结构定义如下:struct WAVE_FORMAT{WORD wFormatTag;WORD wChannels;DWORD dwSamplesPerSec;DWORD dwAvgBytesPerSec;WORD wBlockAlign;WORD wBitsPerSample;};struct FMT_BLOCK{char szFmtID[4]; // 'f','m','t',' 'DWORD dwFmtSize;WAVE_FORMAT wavFormat;};Fact Chunk| |所占字节数| 具体内容|| ID | 4 Bytes | 'fact' |结构定义如下:| 16bit量化|声道0 | 声道0 | 声道0 | 声道0 || | (低位字节)| (高位字节)| (低位字节)| (高位字节)|| | 取样1 || 双声道|| 16bit量化|声道0(左)| 声道0(左)| 声道1(右)| 声道1(右)| | | (低位字节)| (高位字节)| (低位字节)| (高位字节)图6 wav数据bit位置安排方式Data Chunk头结构定义如下:struct DATA_BLOCK{char szDataID[4]; // 'd','a','t','a'DWORD dwDataSize;};//wave文件头typedef struct WaveHeader{uint8 riff[4]; //资源交换文件标志uint32 size; //从下个地址开始到文件结尾的字节数uint8 wave_flag[4]; //wave文件标识uint8 fmt[4]; //波形格式标识uint32 fmt_len; //过滤字节(一般为00000010H)uint16 tag; //格式种类,值为1时,表示PCM线性编码uint16 channels; //通道数,单声道为1,双声道为2uint32 samp_freq; //采样频率uint32 byte_rate; //数据传输率(每秒字节=采样频率×每个样本字节数) uint16 block_align; //块对齐字节数= channles * bit_samp / 8uint16 bit_samp; //bits per sample (又称量化位数)} wave_header_t;typedef struct WaveStruct{FILE *fp; //file pointerwave_header_t header; //headeruint8 data_flag[4]; //数据标识符uint32 length; //采样数据总数uint32 *pData; //data} wave_t;wave_t wave;1. [代码][C/C++]代码001 #include "stdlib.h"002 #include "stdio.h"003004 int main()005 {006 int i; //用作循环计数007 unsigned char ch[100]; //用来存储wav文件的头信息008 FILE *fp;009010 fp=fopen("1.wav","rb");//为读,打开一个wav文件011012 if((fp=fopen("1.wav","rb"))==NULL) //若打开文件失败,退出013 {014 printf("can't open this file\n"); 015 exit(0);016 }017018 /**********输出wav文件的所有信息**********/019 printf("该wav文件的所有信息:");020 for(i=0;i<58;i++)021 {022 ch[i]=fgetc(fp); //每次读取一个字符,存在数组ch中023 if(i%16==0) //每行输出16个字符对应的十六进制数024 printf("\n");025 if(ch[i]<16) //对小于16的数,在前面加0,使其用8bit显示出来026 printf("0%x ",ch[i]); 027 else028 printf("%x ",ch[i]);029 }030031 /*********RIFF WAVE Chunk的输出*********/ 032 printf("\n\nRIFF WAVE Chunk信息:"); 033 //输出RIFF标志034 printf("\nRIFF标志:");035 for(i=0;i<4;i++)036 {037 printf("%x ",ch[i]); 038 }039040 //输出size大小041 printf("\nsize:ox");042 for(i=7;i>=4;i--) //低字节表示数值低位,高字节表示数值高位043 {044 if(ch[i]<16)045 printf("0%x",ch[i]); 046 else047 printf("%x",ch[i]);048 }049050 //输出WAVE标志051 printf("\nWAVE标志:");052 for(i=8;i<12;i++)053 {054 if(ch[i]<16)055 printf("0%x ",ch[i]); 056 else057 printf("%x ",ch[i]);058 }059060 /*******Format Chunk的输出*******/061 printf("\n\nFormat Chunk信息:");062 //输出fmt 标志063 printf("\nfmt 标志:");064 for(i=12;i<16;i++)065 {066 if(ch[i]<16)067 printf("0%x ",ch[i]); 068 else069 printf("%x ",ch[i]);070 }071072 //输出size段073 printf("\nsize:ox");074 for(i=19;i>15;i--)075 {076 if(ch[i]<16)077 printf("0%x",ch[i]);078 else079 printf("%x",ch[i]);080 }081082 //输出编码方式083 printf("\n编码方式:ox");084 for(i=21;i>19;i--)085 {086 if(ch[i]<16)087 printf("0%x",ch[i]);088 else089 printf("%x",ch[i]);090 }091092 //输出声道数目093 printf("\n声道数目:ox");094 for(i=23;i>21;i--)095 {096 if(ch[i]<16)097 printf("0%x",ch[i]);098 else099 printf("%x",ch[i]);100 }101102 if(ch[i+1]==1) //1表示单声道,2表示双声道103 printf(" 单声道");104 else105 printf(" 双声道");106107 //输出采样频率108 printf("\n采样频率:ox");109 for(i=27;i>23;i--)110 {111 if(ch[i]<16)112 printf("0%x",ch[i]); 113 else114 printf("%x",ch[i]);115 }116117 //输出每秒所需字节数118 printf("\n每秒所需字节数:ox");119 for(i=31;i>27;i--)120 {121 if(ch[i]<16)122 printf("0%x",ch[i]); 123 else124 printf("%x",ch[i]);125 }126127 //输出数据块对齐单位128 printf("\n数据块对齐单位:ox");129 for(i=33;i>31;i--)130 {131 if(ch[i]<16)132 printf("0%x",ch[i]); 133 else134 printf("%x",ch[i]);135 }136137 //输出每个采样所需bit数138 printf("\n每个采样所需bit数:ox"); 139 for(i=35;i>33;i--)140 {141 if(ch[i]<16)142 printf("0%x",ch[i]);144 printf("%x",ch[i]); 145 }146147 //输出附加信息148 if(ch[16]==18) //若Format Chunk的size大小为18,则该模块的最后两个字节为附加信息149 { //若为16,则无附加信息150 printf("\n附加信息:ox");151 for(i=37;i>35;i--)152 {153 if(ch[i]<16)154 printf("0%x",ch[i]);155 else156 printf("%x",ch[i]);157 }158 }159160 /*******Fact Chunk的输出*******/161 printf("\n\nFact Chunk信息:");162 //输出fact标志163 printf("\nfact标志:");164 for(i=38;i<42;i++)165 {166 if(ch[i]<16)167 printf("0%x ",ch[i]);168 else169 printf("%x ",ch[i]);170 }171172 //输出size173 printf("\nsize:ox");174 for(i=45;i>41;i--)175 {176 if(ch[i]<16)177 printf("0%x",ch[i]);179 printf("%x",ch[i]);180 }181182 //输出data段数据183 printf("\ndata段数据:");184 for(i=46;i<50;i++)185 {186 if(ch[i]<16)187 printf("0%x ",ch[i]); 188 else189 printf("%x ",ch[i]);190 }191192 /*******Data Chunk的输出*******/193 printf("\n\nData Chunk信息:");194 //输出data标志195 printf("\ndata标志:");196 for(i=50;i<54;i++)197 {198 if(ch[i]<16)199 printf("0%x ",ch[i]); 200 else201 printf("%x ",ch[i]);202 }203204 //输出数据大小205 printf("\n数据大小:ox");206 for(i=57;i>53;i--)207 {208 if(ch[i]<16)209 printf("0%x",ch[i]); 210 else211 printf("%x",ch[i]);212 }213214 printf("\n"); 215216 fclose(fp); 217 }。
一、各种WA V文件头格式
概念1、读取WAV文件,填写WAVEFORMATEX结构WAVEFORMATEX
typedef struct{WORD wFormatTag;WORD nChannels;DWORD nSamplesPerSec;DWORD nAvgBytesPe rSec;WORD nBlockAlign;WORD wBitsPerSample;WORD cbSize;}WAVEFORMATEX;
具体参数解释如下:
wFormatTag:波形数据的格式,定义在MMREG.H文件中
nChannels:波形数据的通道数:单声道或立体声
nSamplesPerSec:采样率,对于PCM格式的波形数据,采样率有8.0kHz,11.025kHz,22.05kHz,44.1kHz 等
nAvgBytesPerSec:数据率,对于PCM格式的波形数据,数据率等于采样率乘以每样点字节数nBlockAlign:每个样点字节数
wBitsPerSample:采样精度,对于PCM格式的波形数据,采样精度为8或16
cbSize:附加格式信息的数据块大小
概念2、定义设备头结构
以下WAVEHDR定义了指向波形数据缓冲区的设备头。
WAVEHDR
typedef struct{LPSTR lpData;DWORD dwBufferLength;DWORD dwBytesRecorded;DWORD dwUser; DWORD dwFlags;DWORD dwLoops;struct wavehdr_tag*lpNext;DWORD reserved;}WAVEHDR; lpData:波形数据的缓冲区地址
dwBufferLength:波形数据的缓冲区地址的长度
dwBytesRecorded:当设备用于录音时,标志已经录入的数据长度
dwUser:用户数据
dwFlags:波形数据的缓冲区的属性
dwLoops:播放循环的次数,仅用于播放控制中
lpNext和reserved均为保留值
注意:上述结构体以及我们在程序中所使用到的“HWAVEIN””HWAVEOUT”结构体均是系统已经存在的,我们只需要对其进行赋值即可。
二、PCM(44字节)的W A V文件头及其相关的编程方法
1、以下就经常见的一种格式PCM(44字节)的WAV文件头进行分析。
举例说明:kugoo下载的一首wav文件:魏三抹去泪水wav.wav(大小14,703,980字节,时长2:46),文件头如下:
⑴地址00H-03H,值为“RIFF”标志;
⑵地址04H-07H,值为“645D E000”,存储的是文件大小刨去8字节后的值,注意这个是little-endian 的,也就是高地址存低位,地地址存高位,所以Size=00E05D64H=14703972字节,比文件总大小少8个字节,这8个字节就是00H-07H;
⑶地址08H-0FH,就是“WAVEfmt”标记;
⑷地址10H-13H,fmt格式的块大小,这种格式时是“10000000”,也是little-endian的,即块大小为16,也有可能为18,这时最后多了2个字节的附加信息。
其他格式的可能是20;
⑸地址14H-15H,“0100”,也是little-endian的,标记编码方式,一般为0x0001;
⑹地址16H-17H,“0100”,也是little-endian,标记声道数,这里值为1。
注意1代表单声道,2代表双声道;
⑺地址18H-1BH,“44AC0000”,也是little-endian,标记采样频率,这里为441000Hz;
⑻地址1CH-1FH,“88580100”每秒所需的字节数,也是little-endian,
bytepersec=00015888H=88200(字节)。
(加上点自己的看法88200=频率*采样一次占的字节数
=44100*2,我觉得这种关系是存在的,虽然很多资料上没提到);
⑼地址20H-21H,“0200”,采样一次占字节数,有些地方也叫数据块对齐单位,也是little-endian 的,这里是两个字节。
声道数*量化数/8=1*16/8=2(字节);
⑽地址22H-23H,“1000”,量化数,也就是每个采样需要的bit数,也是little-endian的,所以这里是16位;
⑾地址24H-27H,“64617461”,就是“data”了;
⑿地址28H-2BH,“405D E000”,存储的是文件大小刨去44字节后的值,这个也是little-endian的,Size=00E05D40H=14703936字节。
2、编程方法
⑴计算文件播放时长
文件播放时长=(文件总长度-文件头长度)/每秒所需的字节数。
如上例duration=(14,703,980-44)/88200=166.7s,这个在kugoo的制作铃声功能下可以查询的到。
⑵按时间点切割文件(只精确到秒已用程序实现过,精确到0.1s理论上也是可以,但是没有用程序去实现)。
①切割文件的前N秒为一个新文件
第一步,计算N秒的偏移量,SetOff=N*每秒所需的字节数
第二步,算出新文件的大小,修改文件头的两个size值。
第三步,新的文件头以二进制形式写入到新文件,紧接着根据偏移量把原文件中的第45字节到(setOff-1)字节写入到新文件。
②窃取中间某个时间段为一个新文件
这里可以根据①的步骤进行,同样的要修改文件头。
三、wav文件格式
WAV为微软公司(Microsoft)开发的一种声音文件格式,文件作为多媒体中使用的声波文件格式之一,它是以RIFF(Resource Interchange File Format)格式为标准的。
每个WAV文件的头四个字节便
是“RIFF”。
WAV文件由文件头和数据体两大部分组成。
其中文件头又分为RIFF/WAV文件标识段和声音数据格式说明段两部分,包含了音频流的编码参数。
WAV对音频流的编码没有硬性规定,除了PCM(Pulse Code Modulation脉冲编码调制)之外,还有几乎所有支持ACM规范的编码都可以为WAV的音频流进行编码,如MP3编码同样也可以运用在WAV中,只要安装好了相应的Decode(指令解码),就可以欣赏这些WAV了。
在windows平台下,基于PCM编码的WAV是被支持得最好的音频格式,所有音频软件都能完
美支持,由于本身可以达到较高的音质要求,因此,WAV也是音乐编辑创作的首选格式,适合保存音乐素材。
因此,基于PCM编码的WAV被作为了一种中介的格式,常常使用在其他编码的相互转
换之中,例如MP3转换成WMA。
WAV文件可以存储大量格式的数据,通常采用的音频编码方式是脉冲编码调制(PCM)。
由于
对于单声道声音文件,采样数据为8位的短整数(short int00H—FFH);而对于双声道立体声声音文件,每次采样数据为一个16位的整数(int),高八位和低八位分别代表左右两个声道。
WAV文件的每个样本值包含在一个整数i中,i的长度为容纳指定样本长度所需的最小字节数。
首先存储低有效字节,表示样本幅度的位放在i的高有效位上,剩下的位置为0,这样8位和16位的PCM波形样本的数据格式如下所示。