简介

  WAV 为微软开发的一种声音文件格式,它符合 RIFF(Resource Interchange File Format)文件规范,用于保存 Windows 平台的音频信息资源。

第一节 文件头部格式

  文件头(Header)是位于文件开头的一段承担一定任务的数据,通常是对主体数据的描述。

  WAV 文件头由哪几部分构成

  RIFF块(RIFF-Chunk)

  格式化块(Format-Chunk)

  附加块(Fact-Chunk)块偏移地址需要根据实际数据变更

  数据块(Data-Chunk)块偏移地址需要根据实际数据变更

偏移地址 字节数 数据类型 内容
&H00 4 String 'RIFF'文件标志
&H04 4 UInteger 文件总长
&H08  4  String  'WAVE'文件标志

表1-1 RIFF块(RIFF-Chunk)

偏移地址 字节数 数据类型 内容
&H0C 4 String 'fmt'标志
&H10 4 UInteger 块长度
&H12  2  UShort PCM格式类别 
&H14 2 UShort 声道数目 
&H18 4 UInteger 采样率 
&H1C 4 UInteger 传输速率 
&H1E 2 UShort 数据块对齐 
&H20 2 UShort 每样本bit数 
&H22 2 UShort 可选

表1-2 格式化块(Format-Chunk)

偏移地址 字节数 数据类型 内容
&H26 4 String 'fact'标志
&H2A 4 UInteger 块长度
&H2E 4 UInteger 附加信息

表1-3 附加块(Fact-Chunk)

偏移地址 字节数 数据类型 内容
&H32 4 String 'data'文件标志
&H36 4 UInteger 数据块总长

表1-4 数据块(Data-Chunk)

第二节 代码实现

  1. 构建一个 WaveHeader 结构体

''' <summary>
''' wav音频头部信息
''' </summary>
Public Structure WaveHeader
#Region "RiffChunk"
    ''' <summary>
    ''' RIFF标志
    ''' </summary>
    Dim RIFF As String
    ''' <summary>
    ''' 文件长度
    ''' </summary>
    Dim FileSize As UInteger
    ''' <summary>
    ''' WAVE标志
    ''' </summary>
    Dim WAVE As String
#End Region
#Region "FormatChunk"
    ''' <summary>
    ''' FORMAT标志
    ''' </summary>
    Dim FORMAT As String
    ''' <summary>
    ''' Format长度
    ''' </summary>
    Dim FormatSize As UInteger
    ''' <summary>
    ''' 编码方式
    ''' </summary>
    Dim FilePadding As UShort
    ''' <summary>
    ''' 声道数目
    ''' </summary>
    Dim FormatChannels As UShort
    ''' <summary>
    ''' 采样频率
    ''' </summary>
    Dim SamplesPerSecond As UInteger
    ''' <summary>
    ''' 每秒所需字节数
    ''' </summary>
    Dim AverageBytesPerSecond As UInteger
    ''' <summary>
    ''' 数据块对齐单位
    ''' </summary>
    Dim BytesPerSample As UShort
    ''' <summary>
    ''' 单个采样所需Bit数
    ''' </summary>
    Dim BitsPerSample As UShort
    ''' <summary>
    ''' 附加信息
    ''' </summary>
    Dim FormatExtra As UShort
#End Region
#Region "FactChunk"
    ''' <summary>
    ''' FACT标志
    ''' </summary>
    Dim FACT As String
    ''' <summary>
    ''' Fact长度
    ''' </summary>
    Dim FactSize As UInteger
    ''' <summary>
    ''' Fact信息
    ''' </summary>
    Dim FactInf As UInteger
#End Region
#Region "DataChunk"
    ''' <summary>
    ''' DATA标志
    ''' </summary>
    Dim DATA As String
    ''' <summary>
    ''' Data长度
    ''' </summary>
    Dim DataSize As UInteger
#End Region
End Structure
VB.NET-WaveHeader

相关文章: