VB中频谱分析仪的实现
豪杰解霸、Winamp等播放软件中都有频谱分析仪。我们有时在编写一个多媒体软件时,总想实现这种功能,然而在网上介绍这方面的却比较少,现在用VB做了一个。希望对编程有所帮助。有些地方不完善,请大家提出意见。源代码如下所示:
'//
'// Name:frmFrequency.frm
'// Date:2006-2-26
'// Author:Q&f
'// Email:dengyu1230359@sina.com
'//
Option Explicit
Private Const WHDR_DONE = &H1
Private Const GMEM_ZEROINIT = &H40
Private Const DEVICEID = -1
Private Type WAVEHDR
lpData As Long ' 指向波形数据缓存的指针,即波形数据缓存的地址
dwBufferLength As Long ' 缓存的长度,缓存的字节数
dwBytesRecorded As Long ' 记录波形数据缓存中有多少字节的数据
dwUser As Long ' User data.
dwFlags As Long ' Flags supplying information about the buffer. Set equal to zero.
dwLoops As Long ' Number of times to play the loop. Set equal to zero.
lpNext As Long ' Not used
reserved As Long ' Not used
End Type
Private Type WAVEFORMAT
wFormatTag As Integer
nChannels As Integer
nSamplesPerSec As Long
nAvgBytesPerSec As Long
nBlockAlign As Integer
wBitsPerSample As Integer
cbSize As Integer
End Type
Private Declare Function waveInGetNumDevs Lib "winmm" () As Long
Private Declare Function waveInGetDevCaps Lib "winmm" Alias "waveInGetDevCapsA" (ByVal uDeviceID As Long, ByVal WaveInCapsPointer As Long, ByVal WaveInCapsStructSize As Long) As Long
Private Declare Function waveInGetErrorText Lib "winmm.dll" Alias "waveInGetErrorTextA" (ByVal err As Long, ByVal lpText As String, ByVal uSize As Long) As Long
Private Declare Function waveInOpen Lib "winmm.dll" (lphWaveIn As Long, ByVal uDeviceID As Long, lpFormat As WAVEFORMAT, ByVal dwCallback As Long, ByVal dwInstance As Long, ByVal dwFlags As Long) As Long
Private Declare