WAV文件的数据结构以及绘制静态波形图的代码
(2018-01-28 09:53:22)
标签:
wav文件数据结构绘制静态波形图 |
分类: VB编程 |
WAV文件的数据结构以及绘制静态波形图的代码
一、结构分析
1.WAVE文件由“块”组成。块的基本结构如下。
表1:块的基本结构
----------------------------------------------
偏移量 名称
----------------------------------------------
00
04
08
----------------------------------------------
说明:
2.WAVE文件一般有四种块,它们是:RIFF块、格式块、附加块(可选),数据块。按照在文件中的出现位置,WAV文件的结构顺序如下:
表2:块在文件中的顺序
---------------
名称
---------------
RIFF块
格式块
附加块
数据块
---------------
说明:
3.RIFF块的数据结构如表3。
表3:RIFF块的数据结构
---------------------------------------------------
偏移量
名称
---------------------------------------------------
00
04
08
---------------------------------------------------
说明:
4.格式块的数据结构如表4。
表4:格式块的数据结构
----------------------------------------------------------------------------
偏移地址 字节数 数据类型 内容
----------------------------------------------------------------------------
0C
10
14
16
18
1C
20
22
24
----------------------------------------------------------------------------
说明:
5.附加块是可选的,一般当wav文件是由某些软件转化而成时,则可能包含附加块。附加块的数据结构
如表5。
表5:附加块的数据结构
-----------------------------------------
偏移地址 字节数 数据类型
-----------------------------------------
24
28
2C
-----------------------------------------
说明:
6.数据块的数据结构如表6。
表6:数据块的数据结构
------------------------------------------
偏移地址 字节数
------------------------------------------
24
28
2C
------------------------------------------
说明:
二、实例
1.让我们来做个实验,以加深理性认识。
8KHZ,8位,单声道
---------------------------------------------------
00: 52 49 46 46 9E 1F 00 00 57 41 56 45 66 6D 74 20
10: 12 00 00 00 01 00 01 00 40 1F 00 00 40 1F 00 00
20: 01 00 08 00 00 00 66 61 63 74 04 00 00 00 6B 1F
30: 00 00 64 61 74 61 6B 1F 00 00
---------------------------------------------------
2.分析:
00-0B:RIFF块,其中:
0C-25:格式块,其中:
26-32:附加块,其中:
32-39:数据块之一部分,其中:
三、绘制静态波形图
Option Explicit
Dim DAT() As
Byte
Private Sub 绘制_Click()
On Error GoTo 100
Dim filename As String
Dim tagType As String * 4 '标记字符
Dim dataSum As
Long
Dim Channels As Integer
Dim SampleBit As Integer
Dim Temp1 As Long
CommonDialog1.filename = "*.wav"
CommonDialog1.DefaultExt = "wav"
CommonDialog1.ShowOpen
filename = CommonDialog1.filename
Open filename For Binary As #1
Get #1, , tagType
If tagType <> "RIFF" Then GoTo 100 '如果不是RIFF退出
Get #1, 9, tagType
If tagType <> "WAVE" Then GoTo 100 '如果不是WAVE退出
Get #1, , tagType
If tagType <> "fmt " Then GoTo 100 '如果不是fmt 退出
Get #1, ,
dataSum
Get #1, 23,
Channels
Get #1, 35,
SampleBit
Get #1, 21 + dataSum, tagType
If tagType = "fact" Then
ElseIf tagType = "data" Then
Else
End If
ReDim DAT(dataSum)
Get #1, , DAT
Close #1
Select Case
Channels
End Select
Exit Sub
100
Close #1
End Sub
Private Sub DrawWaves8_1()
Dim i As Long
Dim exten As Long
Dim lastX As Long
Dim curY1 As Long
Dim curY2 As Long
ScaleWidth = UBound(DAT) '图片框宽度=样本个数
exten = ScaleHeight / 2
Cls
For i = 0 To ScaleWidth
Next
End Sub
Private Sub DrawWaves8_2()
Dim i As Long
Dim exten As
Long
Dim lastX As
Long
Dim curLY1 As Long
Dim curLY2 As Long
Dim curRY1 As Long
Dim curRY2 As Long
Dim LYOffset As Long '左声道垂直偏移量
Dim RYOffset As Long '右声道垂直偏移量
ScaleWidth = UBound(DAT) / 2 '图片框宽度=单声道样本个数
exten = ScaleHeight /
4
LYOffset = exten
RYOffset = exten * 3
Cls
For i = 0 To ScaleWidth
Next
End Sub
Private Sub DrawWaves16_1()
Dim i As Long, d As String
Dim exten As Long
Dim lastX As Long
Dim curY1 As Long
Dim curY2 As Long
ScaleWidth = UBound(DAT) / 2 '图片框宽度=样本个数
exten = ScaleHeight / 2
Cls
For i = 0 To ScaleWidth
Next
End Sub
Private Sub DrawWaves16_2()
Dim i As Long, j As Long, dL As String, dR As String
Dim exten As
Long
Dim lastX As
Long
Dim curLY1 As Long
Dim curLY2 As Long
Dim curRY1 As Long
Dim curRY2 As Long
Dim LYOffset As Long '左声道垂直偏移量
Dim RYOffset As Long '右声道垂直偏移量
ScaleWidth = UBound(DAT) / 4 '图片框宽度=立体声样本个数/4
exten = ScaleHeight /
4
LYOffset = exten
RYOffset = exten * 3
Cls
For i = 0 To ScaleWidth
Next
End Sub
提示:如果你懒得打字,可到163信箱去下载本代码,帐号是:vb62013@163.com,密码是:vb620132013

加载中…