声音应用程序开发指南 张新宇 第2章 WAV文件格式.pptVIP

  • 3
  • 0
  • 约1.66万字
  • 约 74页
  • 2017-09-08 发布于上海
  • 举报

声音应用程序开发指南 张新宇 第2章 WAV文件格式.ppt

声音应用程序开发指南 张新宇 第2章 WAV文件格式

第2章 WAV文件格式 2.1 WAV文件格式[1,2,3,4] 2.2 保存为WAV文件格式[1,2,3,4,5] 2.3 压缩WAVE音频[5] 2.4 本 章 小 结 2.1 WAV文件格式[1,2,3,4] 2.1.1 RIFF文件和WAV文件格式 1.RIFF文件 RIFF可以看做是一种树状结构,其基本构成单位为“块”(Chunk),它犹如树状结构中的节点。每个Chunk由“辨别码”(ID)、“数据大小”(Size)和“数据”(Data)所组成,如表2-1所示。 一般而言,Chunk本身并不允许内部再包含Chunk,但有两种情况例外,即分别以“RIFF”及“LIST”为辨别码的Chunk可以包含子Chunk。 以“RIFF”为辨别码的Chunk包含子Chunk的格式如图2-1所示。图中前4个字符 2.WAV文件 WAV为WAVEFORM(波形)的缩写。WAV文件的结构如图2-2所示,RIFF Chunk中子Chunk的“格式辨别码”为“WAVE”。整个文件由两个Chunk所组成:辨别码“fmt”(注意,最后一个是空白字符)及“data”。 在“fmt”的Chunk下包含了一个PCMWAVEFORMAT数据结构,该结构与前一章中的WAVEFORMATEX结构类似,其定义如下: ?typedef struct waveformat - tag { WORD wFormatTag ; WORD nChannels; DWORD nSamplesPerSec; DWORD nAvgBytesperSec; WORD nBlockAlign; } WAVEFORMAT; typedef struct pcmwaveformat - tag { WAVEFORMAT wf ; WORD wBitsPerSample; } PCMWAVEFORMAT; 其意义分别如下: ? wFormatTag:记录着此声音的格式代号,例如WAVE_FORMAT_PCM,WAVE_FORMAT_ADPCM等等。 ? ?nChannels:记录声音的声道数。 ? ?nSamp1esPerSec:记录每秒采样数(采样率)。 ?? nAvgBytesPerSec:记录每秒的平均数据量。 ? ?nBlockA1ign:记录块的对齐单位。 ? ?wBitsPerSample:记录每个采样样本所需的位元数。 “data”Chunk包含真正的声音数据。Windows目前仅提供WAVE_FORMAT_PCM一种数据格式,其所代表的意义是脉冲编码调制(PCM,Pu1se Code Modulation)。 用编辑工具UltraEdit查看WAV文件的文件头,如图2-3所示。 表2-2以数据在文件中的存放位置说明了WAV文件格式,其中偏移地址是相对于文件头的地址。 Windows定义了在“data”Chunk中数据的存放情形,表2-3列出了四种不同声道数及取样所需的位元数以及位元位置的安排。其中: 对于8位单声道,每个样本数据由8位(bit)表示; 对于8位立体声,每个声道的数据由一个8位(bit)数据表示,且第一个8位(bit)数据表示0声道(左)数据,紧随其后的8位(bit)数据表示1声道(右)数据; 对于16位单声道,每个样本数据由16位(bit)表示; 对于16位立体声,每个声道的数据由一个16位(bit)数据表示,且第一个16位(bit)数据表示0声道(左)数据,紧随其后的16位(bit)数据表示1声道(右)数据。 WAV文件的每个样本值包含在一个整数i中,i的长度为容纳指定样本长度所需的最小字节数。首先存储低有效字节,表示样本幅度的位放在i的高有效位上,剩下的位置为0,这样8位和16位的PCM波形样本的数据格式如表2-4所示。 2.1.2 WAV文件信息的具体应用 WAV文件包括了对原始声音的高速率采样数据,并且以WAVE_PCM_FORMAT格式的形式保存。在读出WAV文件头信息之后,接着的数据就是原始声音的高速率采样信息。我们可以在Visual C++程序中对这些信息作多方面的处理,其中包括: ? 波形显示 我们可以以时间–振幅的方式显示出原始声音的波形,这是最简单同时也是最直接的信息处理方式。在时间范围内,我们可以观察该信号波形是否连续,中间是否有跳变等。

文档评论(0)

1亿VIP精品文档

相关文档