wave文件格式与解析

常见的声音文件主要有两种,分别对应于单声道(11.025KHz 采样率、8Bit的采样值)和

双声道(44.1KHz采样率、16Bit的采样值)。

对于单声道声音文件,采样数据为八位的短整数(short int 00H-FFH);而对于双声道立体声

声音文件,每次采样数据为一个16位的整数(int),高八位和低八位分别代表左右两个声道。

下面就是根据四个结构体写的代码,注意FACT不是必须的,可以不用写入头,不写的话就

是44个字节,写的话wave的头是56个字节。

1)一个wave file包括四个CHUNK,除了FACT之外,其它是必须的

2)第一个RIFF是整个文件的头,所以别名为WAV_HEADER,而不是RIFF

1. 12个字节

typedef struct RIFF_CHUNK{

char fccID[4]; //
must be "RIFF"

unsigned long dwSize; //
all bytes of the wave file subtracting 8, 44-8+length or 56-8 +length

// which is the size of fccID and dwSize, dwSize = fileSize
- 8

char fccType[4]; //
must be "WAVE"

}WAVE_HEADER;

2. 24个字节

typedef struct FORMAT_CHUNK{

char fccID[4]; //
must be "fmt "

unsigned long dwSize; //
size of this struct, subtracting 8, which   is the sizeof fccID and dwSize

// 24-8=16 -->0x10, 0x12

unsigned short wFormatTag; //
one of these: 1: linear,6: a law,7:u-law, FORMAT_TAG

unsigned short wChannels; //
channel number

unsigned long dwSamplesPerSec; //
sampling rate, SAMPLE_RATE,AC44=44100

unsigned long dwAvgBytesPerSec; //
bytes number per second, 2*AC44*2=2B110

//CHANNEL_NUN * SAMPLE_RATE * BYTES_EACH_SAMPLE

unsigned short wBlockAlign; //
每样本的数据位数(按字节算), 其值为:通道,BYTES_EACH_SAMPLE

// 数*每样本的数据位值/8,播放软件需要一次处

// 理多个该值大小的字节数据, 以便将其值用于

// 缓冲区的调整每样本占几个字节

// NumChannels * uiBitsPerSample/8  2* 16/8 =4

unsigned short uiBitsPerSample; //
quantization  1

}FORMAT;

3.12个字节

// The fact chunk is required for all new WAVE formats.

// and is not required for the standard WAVE_FORMAT_PCM files

// 也就是说,这个结构体目前不是必须的,一般当wav文件由某些软件转化而成,则包含该Chunk

// 但如果这里写了,则必须是如下的结构,并且在四个结构体中的位置也要放在第三

typedef struct {

char fccID[4]; // must be "fact"

unsigned long id; // must be 0x4

unsigned long dwSize; // 暂时没发现有啥用, length

}FACT;

4. 8个字节

// 数据结构

typedef struct {

char fccID[4]; //
must be "data"

unsigned long dwSize; // dwSize
=  fileSize - 44/56, byte_number of PCM data in byte,WAVE_HEADER.size - dwSize
=  44-8 or 56-8

}DATA;

时间: 2024-08-30 14:45:32

wave文件格式与解析的相关文章

WAVE文件格式解析

WAVE 文件作为Windows多媒体中使用的声音波形文件格式之一,它是以RIFF(Resource Interchange File Format)格式为标准的.这里不针对RIFF文件格式做介绍,不太了解的可以参考“RIFF格式简介”一文. WAVE文件构成 每个WAVE文件的头四个字节便是“RIFF”.WAVE 文件由文件头和数据体两大部分组成.其中文件头又分为 RIFF/WAV 文件标识段和声音数据格式说明段两部分.相对于RIFF文件,只是将“RIFF”chunk的form id替换为“W

多媒体(2):WAVE文件格式分析

目录 多媒体(1):MCI接口编程 多媒体(2):WAVE文件格式分析 多媒体(3):基于WindowsAPI的视频捕捉卡操作 多媒体(4):JPEG图像压缩编码 多媒体(2):WAVE文件格式分析

MP4文件格式的解析

MP4文件格式的解析,以及MP4文件的分割算法 mp4应该算是一种比较复杂的媒体格式了,起源于QuickTime.以前研究的时候就花了一番的功夫,尤其是如何把它完美的融入到视频点播应用中,更是费尽了心思,主要问题是处理mp4文件庞大的"媒体头".当然,流媒体点播也可以采用flv格式来做,flv也可以封装H.264视频数据的,不过Adobe却不推荐这么做,人家说毕竟mp4才是H.264最佳的存储格式嘛. 这几天整理并重构了一下mp4文件的解析程序,融合了分解与合并的程序,以前是c语言写的

WAV文件格式分析解析,附带吗

WAVE文件作为多媒体中使用的声波文件格式之一,它是以RIFF格式为标准的.RIFF是英文Resource Interchange File Format的缩写,每个WAVE文件的头四个字节便是“RIFF”.    WAVE文件是由若干个Chunk组成的.按照在文件中的出现位置包括:RIFF WAVEChunk, Format Chunk, Fact Chunk(可选), Data Chunk.具体见下图: --------------------------------------------

WAV文件格式分析解析,代码已附

WAVE文件作为多媒体中使用的声波文件格式之一,它是以RIFF格式为标准的.RIFF是英文Resource Interchange File Format的缩写,每个WAVE文件的头四个字节便是“RIFF”.    WAVE文件是由若干个Chunk组成的.按照在文件中的出现位置包括:RIFF WAVEChunk, Format Chunk, Fact Chunk(可选), Data Chunk.具体见下图: --------------------------------------------

bmp文件格式详细解析

先区分几个概念:16色和16位色一样吗? 不一样! 颜色位数,即是用多少位字节表示的值,每一位可以表示0和1两值.通常图片的颜色深度,简称色深,就是用位数来表示的,所以,我通常会看到8位色,16位色,24位色和32位色.而我们在其它地方看到的又是16色,256色,16777216色等等,这些怎么一回事呢? 16色即代表16种颜色,256色即256种颜色,8位色就是用8个位来表示的颜色,即2的8次方,就是256色,16位色2的16次方,就是65536色,24位即16777216色,32位即4294

MP4文件格式的解析,以及MP4文件的分割算法

mp4应该算是一种比较复杂的媒体格式了,起源于QuickTime.以前研究的时候就花了一番的功夫,尤其是如何把它完美的融入到视频点播应用中,更是费尽了心思,主要问题是处理mp4文件庞大的"媒体头".当然,流媒体点播也可以采用flv格式来做,flv也可以封装H.264视频数据的,不过Adobe却不推荐这么做,人家说毕竟mp4才是H.264最佳的存储格式嘛. 这几天整理并重构了一下mp4文件的解析程序,融合了分解与合并的程序,以前是c语言写的,应用在linux上运行的服务器程序上,现在改成

iOS开发——WAVE音频文件解析

WAV文件也分了好几类,相应的非数据信息存储在文件的头部,下面简单的提一下,然后在最后重点介绍44字节的那种,一般用的都是这个. 1.8KHz采样.16比特量化的线性PCM语音信号的WAVE文件头格式表(共44字节) 偏移地址  字节数  数据类型   内容  文件头定义为 00H   4   char     "RIFF"  char riff_id[4]="RIFF"   04H   4   long   文件总长-8     long int size0=文总

PEM文件格式具体解析

PEM文件格式存档 Author:Roson sun [email protected] Time:2006-4-11 1.  描写叙述: Openssl使用PEM(RFC 1421-1424)文档格式,假设使用其它语言包,则须要将此格式进行解码并将各个私公钥增加. 2.  说明: a)         首先使用BASE64解码,假设是非ANSI TXT格式,须要做转换. b)        一个RSA私钥包括一下信息(1024位): >openssl rsa -in key.pem -noou