很好的资料-wav文件头汇总

合集下载

各种WAVE文件头格式

各种WAVE文件头格式

表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文件格式分析与详解

WAV文件格式分析与详解

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文件格式分析

WAV文件格式分析
WAV(PCM)文件格式是一种容器文件格式,它可以包含多种编码方式的
音频数据,但最常见的是PCM编码方式。

PCM是一种无损的音频编码方式,它将音频信号按照时序进行采样,并将每个采样值量化成离散的数字,进
而进行存储。

PCM编码方式的音频数据是最原始、最接近原始音频信号的
数据,因此在音质上具有高保真性。

文件头是WAV(PCM)文件的第一部分,用于描述整个文件的基本信息。

文件头的长度为44个字节。

它包含了文件的格式、采样率、通道数、量
化位数等信息。

其中,采样率表示每秒采样的次数,通道数表示音频数据
的通道数(例如单声道或立体声),量化位数表示每个采样值用多少位进
行表示。

附加信息部分是可选的,它可以用来存储一些附加的音频信息,如音
频标记、标题、歌手信息等。

附加信息部分的长度可以根据需要进行扩展。

然而,WAV(PCM)文件格式也存在一些不足之处。

由于PCM编码方式没
有对音频数据进行压缩处理,因此WAV(PCM)文件的尺寸相对较大,占用
存储空间较多。

另外,由于其采样率和量化位数的限制,WAV(PCM)文件格
式可能无法满足一些高质量音频的需求。

针对这些问题,人们常常使用其
他音频格式如MP3、AAC等进行压缩编码,以减小文件尺寸并提高存储和
传输效率。

总结起来,WAV(PCM)文件格式是一种常见的音频文件格式,它基于PCM编码方式进行存储和传输。

WAV(PCM)文件格式具有音质高、兼容性强
等优点,但同时也存在文件较大和存储、传输效率低的不足之处。

WAV文件格式说明

WAV文件格式说明

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。

播放软件利用此值可以估计缓冲区的大小。

wav 声音文件介绍

wav 声音文件介绍

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(秒)。

wav音频格式

多媒体技术近年来发展很快,较好品质的声卡可以提供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则为一般的文件。

音频资料总结

主要缺点:需要音频存储空间。潜在缺陷:在32位 WAV 文件中的2G 限制,这 种限制已在为 SoundForge 开发的 W64格式中得到了改善。
WAV 文件格式:
偏移 字节 数据类型
地址 数
内容
00H 4 04H 4 08H 4 0CH 4 10H 4 14H 2 16H 2 文 18H 2 件 1CH 4 头
下的位置为0,这样8位和16位的 PCM 波形样本的数据格式如下所示。
样本大小 8位 PCM
数据格式 unsigned int
最大值 225
最小值 0
16位 PCM
int
32767
-32767
பைடு நூலகம்
优 点 :简 单 的 编 / 解 码 (几 乎 直 接 存 储 来 自 模 / 数 转 换 器 (ADC )的 信 号 )、普 遍 的 认 同/支持以及无损耗存储。
声道1(右)
(低位字节)
(高位字节)
(低位字节)
(高位字节)
第一排表示单声道8位元,第二排表示双声道8位元,第三排表示单声道16位元,第四 排表示双声道16位元。8位元代表音量大小由8个位元所表示,16位元则代表音量大小由16 个位元所表示。理论上8位元可以表示0~255,16位元可表示0~65536,不过 windows 却定 16位元其值的范围从-32168~32167。此外尚有一点要注意的是,0并不一定代表无声,而是 由中间的数值来决定,也就是在8位元时为128,16位元时为0才是无声。所以,若程序设计 时需放入无声的数据,需特别注意声音格式是16或是8位元,以放入适当的值。
对于单声道声音文件,采样数据为八位的短整数(short int 00H-FFH);而对于双声道 立体声声音文件,每次采样数据为一个16位的整数(int),高八位和低八位分别代表左右两 个声道。 WAVE 文件由文件头和数据体两大部分组成。其中文件头又分为 RIFF/WAV 文件标 识段和声音数据格式说明段两部分。

wav格式


采样频率
AvgBytesPerSec 4 Bytes
BlockAlign
2 Bytes
BitsPerSample 2 Bytes
每秒所需字节数
数据块对齐单位(每个采样需要的字节 数)
每个采样需要的 bit 数
WAVE_FORMAT
2 Bytes 附加信息(可选,通过 Size 来判断有无)
图 3 Format Chunk 以'fmt '作为标示。一般情况下 Size 为 16,此时最后附加信息没有;如果为 18,则最后 多了 2 个字节的附加信息。主要由一些软件制成的 wav 格式中含有该 2 个字节的附加信息。
//Read RIFF_HEADER fread(&riff_header, sizeof(struct RIFF_HEADER), 1, wav_in);
if(memcmp(riff_header.szRiffID, "RIFF", 4) != 0 || memcmp(riff_header.szRiffFormat, "WAVE", 4) != 0 )
Fact Chunk
名称
所占字节数
具体内容

4 Bytes
‘fact’
Size
4 Bytes
数值为 4
data
4 Bytes
‘WAVE’
图 4 Fact Chunk Fact Chunk 是可选字段,一般当 wav 文件由某些软件转化而成,则包含该 Chunk。
Data Chunk
名称 ID Size data
2、具体介绍 RIFF WAVE Chunk
名称
所占字节数
具体内容

WAV文件格式

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内容。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、各种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波形样本的数据格式如下所示。

相关文档
最新文档