音频文件解析(一):WAV格式文件头部解析

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



1.RIFF块(RIFF-Chunk)

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

2.格式化块(Format-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   可选 

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

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

4.数据块(Data-Chunk) *当前块偏移地址需要根据实际数据变更

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



0.构建一个waveHeaderStructre

    Structure waveHeaderStructre
        ‘RiffChunk
        Dim RIFF As String
        Dim FileSize As UInteger
        Dim WAVE As String
        ‘FormatChunk
        Dim FORMAT As String
        Dim FormatSize As UInteger
        Dim FilePadding As UShort
        Dim FormatChannels As UShort
        Dim SamplesPerSecond As UInteger
        Dim AverageBytesPerSecond As UInteger
        Dim BytesPerSample As UShort
        Dim BitsPerSample As UShort
        Dim FormatExtra As UShort
        ‘FactChunk
        Dim FACT As String
        Dim FactSize As UInteger
        Dim FactInf As UInteger
        ‘DataChunk
        Dim DATA As String
        Dim DataSize As UInteger
    End Structure

1.打开一个wav文件

  Dim data() As Byte = My.Computer.FileSystem.ReadAllBytes(wavFileName)

2.头部信息解析

  Public Sub SplitWaveData(ByVal data As Byte()) ‘提取wav文件头部信息
        Dim tempIndex As UShort = 0
        waveHeadInf.RIFF = CType(System.Text.Encoding.ASCII.GetChars(data, 0, 4), String)
        waveHeadInf.FileSize = System.BitConverter.ToUInt32(data, 4)
        waveHeadInf.WAVE = CType(System.Text.Encoding.ASCII.GetChars(data, 8, 4), String)
        ‘FormatChunk
        waveHeadInf.FORMAT = CType(System.Text.Encoding.ASCII.GetChars(data, 12, 4), String)
        waveHeadInf.FormatSize = System.BitConverter.ToUInt32(data, 16)
        waveHeadInf.FilePadding = System.BitConverter.ToUInt16(data, 20)
        waveHeadInf.FormatChannels = System.BitConverter.ToUInt16(data, 22)
        waveHeadInf.SamplesPerSecond = System.BitConverter.ToUInt32(data, 24)
        waveHeadInf.AverageBytesPerSecond = System.BitConverter.ToUInt32(data, 28)
        waveHeadInf.BytesPerSample = System.BitConverter.ToUInt16(data, 32)
        waveHeadInf.BitsPerSample = System.BitConverter.ToUInt16(data, 34)
        If waveHeadInf.FormatSize = 18 Then
            waveHeadInf.FormatExtra = System.BitConverter.ToUInt16(data, 36)
        Else
            waveHeadInf.FormatExtra = 0
        End If
        tempIndex = 20 + waveHeadInf.FormatSize
        ‘FactChunk
        waveHeadInf.FACT = CType(System.Text.Encoding.ASCII.GetChars(data, tempIndex, 4), String)
        If waveHeadInf.FACT = "fact" Then
            waveHeadInf.FactSize = System.BitConverter.ToUInt32(data, tempIndex + 4)
            waveHeadInf.FactInf = IIf(waveHeadInf.FactSize = 2, System.BitConverter.ToUInt16(data, tempIndex + 8), System.BitConverter.ToUInt32(data, tempIndex + 8))
            tempIndex = tempIndex + waveHeadInf.FactSize + 8
        Else
            waveHeadInf.FACT = "NULL"
            waveHeadInf.FactSize = 0
            waveHeadInf.FactInf = 0
        End If
        ‘DataChunk
        waveHeadInf.DATA = CType(System.Text.Encoding.ASCII.GetChars(data, tempIndex, 4), String)
        waveHeadInf.DataSize = System.BitConverter.ToUInt32(data, tempIndex + 4)
        ShowWaveHeadInf()
    End Sub

3.ListView显示头部信息

    Public Sub ShowWaveHeadInf() ‘显示wav文件详细信息
        Dim Chunks As New List(Of String)
        Chunks.Add("RIFF标志-" & waveHeadInf.RIFF)
        Chunks.Add("文件长度-" & Hex(waveHeadInf.FileSize))
        Chunks.Add("WAVE标志-" & waveHeadInf.WAVE)
        ‘
        Chunks.Add("FORMAT标志-" & waveHeadInf.FORMAT)
        Chunks.Add("Format长度-" & Hex(waveHeadInf.FormatSize))
        Chunks.Add("编码方式-" & Hex(waveHeadInf.FilePadding))
        Chunks.Add("声道数目-" & Hex(waveHeadInf.FormatChannels))
        Chunks.Add("采样频率-" & Hex(waveHeadInf.SamplesPerSecond))
        Chunks.Add("每秒所需字节数-" & Hex(waveHeadInf.AverageBytesPerSecond))
        Chunks.Add("数据块对齐单位-" & Hex(waveHeadInf.BytesPerSample))
        Chunks.Add("采样所需Bit数-" & Hex(waveHeadInf.BitsPerSample))
        Chunks.Add("附加信息-" & waveHeadInf.FormatExtra)
        ‘
        Chunks.Add("FACT标志-" & waveHeadInf.FACT)
        Chunks.Add("FACT长度-" & Hex(waveHeadInf.FactSize))
        Chunks.Add("FACT信息-" & waveHeadInf.FactInf)
        ‘
        Chunks.Add("DATA标志-" & waveHeadInf.DATA)
        Chunks.Add("DATA长度-" & Hex(waveHeadInf.DataSize))
        InfForm.ListView1.Items.Clear()
        For Each stringlist In Chunks
            ListView1.Items.Add(Split(stringlist, "-")(0))
            ListView1.Items(ListView1.Items.Count - 1).SubItems.Add(Split(stringlist, "-")(1))
        Next
    End Sub
时间: 2024-10-10 20:07:26

音频文件解析(一):WAV格式文件头部解析的相关文章

Android音频: 如何使用AudioTrack播放一个WAV格式文件?

翻译 By Long Luo 原文链接:Android Audio: Play a WAV file on an AudioTrack 译者注: 1. 由于这是技术文章,所以有些词句使用原文,表达更准确. 2. 由于水平有效,有些地方可能翻译的不够准确,如有不当之处,敬请批评指正. 3. 针对某些语句,适当补充了上下文及更适合中文阅读,尽量做到信达雅. 如果你已经成功地了解了关于AudioTrack的一些话题,那么你可能享受它带来的好处,例如低延迟(在STATIC(静态)模式),能够生成流式音频

【转】java将excel文件转换成txt格式文件

在实际应用中,我们难免会遇到解析excel文件入库事情,有时候为了方便,需要将excel文件转成txt格式文件.下面代码里面提供对xls.xlsx两种格式的excel文件解析,并写入到一个新的txt文件中,数据以分隔符逗号","隔开. excel文件如图所示: 转换后的txt文件: 需要依赖4个jar包: package com.xuan.excel; import java.io.BufferedWriter; import java.io.File; import java.io.

如何将pdf文件转换成cad格式文件

pdf文件是一个封闭性文件,文件不仅不容易编辑修改,而且还可能被加密了,那么如何将pdf文件转换成cad格式文件呢? 下面小编教大家使用pdf转换器实现以上操作,具体步骤如下. 第一步:搜索迅捷pdf在线转换器(http://app.xunjiepdf.com/pdf2cad),找到相关页面点击进入在线网站主页面,进入页面后,用我们鼠标点到文档转换,找到CAJ转Word那个栏目. 第二步:点击"选择文件"选择需要处理的文件.如果想要一次性处理多个文件,那么我们可以继续添加文件(批量转换

CAD文件转换成DWF格式文件怎么在转换器中转换?

CAD文件转换成DWF格式文件怎么在转换器中转换?大家都知道DWF文件是一种高度压缩.开放.安全的文件格式,它可以将丰富的设计数据高效的分发给需要查看.评审或者打印这些数据的人看,因为在编辑器中编辑完的图纸都是dwg格式的,所以就需要将CAD图纸进行转换,那CAD文件转换成DWF格式文件怎么在转换器中转换?具体要怎么来进行操作?下面小编就来教教大家,想要了解的朋友也可以一起来看看,希望能够帮助到你们. 第一步:打开电脑,在电脑桌面上任意的打开一个浏览器,在浏览器的搜索框中搜索迅捷CAD转换器,然

音频文件解析(二):WAV格式文件波形绘制

解析WAV头部信息后,接下来就可以根据相关参数和DATA块数据绘制波形. 1.重新编码(转换为8bits,单声道数据) Public Function GetFormatData(ByVal pData() As Byte, ByVal pWaveHeader As waveHeaderStructre) As Byte() Dim temp As Integer Dim data() As Byte = {} If pWaveHeader.BitsPerSample = 8 And pWave

python:将xml格式文件转换成json格式文件

由于json格式的文件在处理起来,有很强的便利性,而工作中每天产生大量的xml格式的文件,所以有需求将xml格式的文件转换成json格式的文件.下面直接贴出代码,有两个版本,根据需求自由选择: #!/usr/bin/python # -*- coding: utf-8 -*- #Function:Xml_To_Json #version 1.0 #Author: Herman #需要用到的两个模块 import xmltodict; import json; #定义函数 def pythonXm

歌词文件解析(一):LRC格式文件的解析

LRC是英文lyric(歌词)的缩写,被用做歌词文件的扩展名.以lrc为扩展名的歌词文件可以在各类数码播放器中同步显示.LRC 歌词是一种包含着“*:*”形式的“标签(tag)”的基于纯文本的歌词专用格式. 1.标识标签(ID-tags) [ar:艺人名] [ti:曲名] [al:专辑名] [by:编者(指编辑LRC歌词的人)] [offset:时间补偿值] 其单位是毫秒,正值表示整体提前,负值相反.这是用于总体调整显示快慢的. [ti:山丘] [ar:李宗盛] [offset:0] 2.时间标

歌词文件解析(二):LRC格式文件的绘制

通过对LRC文件的解析,可以轻松实现歌词可视化. 函数名: paintLyrics(ByVal pBox As PictureBox, ByVal CurrentPosition As Integer, ByVal type As Boolean, Optional ByVal pLyric As LyricClass = Nothing) 参数: pBox:用于绘制歌词的Picturebox CurrentPosition:当前歌词的时间进度,单位为秒(Second) type:值为True时

Excel文件相关:XLS格式文件基本操作

1.添加引用 添加引用->Com->Microsoft Excel 9.0 Object Library(对应Excel2000) *Microsoft Excel 11.0 Object Library(对应Excel2003)  2.新建对象 实例化 Dim myExcel as New Excel.Application() 添加工作簿 myExcel.Workbooks.Add() 打开工作簿 myExcel.Workbooks.Open("FileName as Strin