Chinaunix首页 | 论坛 | 博客
  • 博客访问: 139343
  • 博文数量: 49
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 515
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-08 10:33
文章分类

全部博文(49)

文章存档

2010年(2)

2009年(30)

2008年(17)

我的朋友

分类:

2009-04-29 12:34:39

 
 
wave文件的文件头共有44个字节,其中最前面的12个字节称为Chunk1.此部分用来说明文件是属于哪种类型,剩下的32个字节分为下面两个部分。
(1)从12--35字节是用来帮助文件的格式。
(2)从36--43字节是用来说明数据的大小,从44字节开始到最后,是存放实际声音的地方。
 
 
 “RIFF”
 Xxxx
 ”Wave“
 ”fmt“
 sizeof(PCMWAVEFORMAT)
 struct of PCMWAVEFORMAT
 "data"
 Xxxx
 Waveform data
上面的表格表示Wave文件头的配置格式。
 
0--3字节,存放"RIFF"四个字符,一般的.wav声音文件和.avi动画文件都使用此种格式。
4--7字节,存放一个 long整型的数值,存放文件总长度剪掉4Bytes。若声音文件总长度为100000Bytes,
         则Xxxx值为 960000。
8--11字节,存放"Wave"四个字符,表示此文件是Wave格式。
12--15字节,"fmt ",(fmt后面必须空一格),告知此wave文件是属于哪种格式,若是Windows系统都是属于WAVE_FORMAT_PCM格式
16--19字节,为一长整型,说明数据结构 PCMWAVEFORMAT的大小,值为16
20--35字节,存放PCMWAVEFORMAT的结构。
   typedef  struct pcmwaveformat_tag {
             WAVEFORMAT   wf;           //WAVEFORMAT结构
             WORD       wBitsPerSampel;  //每个样本占几位
           }PCMWAVEFORMAT;
  typedef struct waveformat_tag  {
            WORD    wformagTag;         //播放格式类型
            WORD    nChannels;         //几个声道,是单声道,还是双声道(立体声)
            DWORD   nSamplesPerSec;    //每秒有几个样本,也就是采样率
            DWORD   nAvgBytesPerSec;   //平均传输速率,Bytes/秒
            WORD    nBlockAlign;      //每次读取的数据,如立体声,16bits
            }WAVEFORMAT;
20--21字节,代表此wave文件的格式。如 WAVE_FORMAT_PCM
22--23字节,代表声音的频道数,如单声道为1,立体声为2
24--27字节,代表每秒的采样数,即采样率
28--31字节,代表每秒的传输速率,nAvgBytesPerSec = nSamplesPerSec * nChannels *(wBitsPerSampel/8);
32--33字节,以区块为对齐单位,也就是每次要读取的区块大小为:n-Bytes
34--35字节,代表每个采样所需要的位数。
36--39字节,存放data四个字符,说明数据部分的开始。
40--43字节,为一长整型,其值为真正数据大小。例如一个wave文件的大小为20044字节,其真正声音文件大小为 20044 - 44 = 20000字节。
44--到文件结尾处,为真正声音数据存放处。
      
注:来源于 Borland C++ Builder 6程序设计经典
            
 
 
 
 
 
 
 
 
 
 
 
 
 
阅读(1131) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~