' =========== API Declares (lots, I'm afraid) =============
Private Declare Sub ZeroMemory Lib "kernel32.dll" Alias "RtlZeroMemory" (ByRef Destination As Any, ByVal Length As Long)
Private Const WHDR_DONE As Long = &H1
Private Const WHDR_PREPARED As Long = &H2
Private Const CALLBACK_WINDOW As Long = &H10000
Private Const WAVE_MAPPED As Long = &H4
Private Const WAVE_MAPPER As Long = -1&
Private Const MMSYSERR_BASE As Long = 0
Private Const MMSYSERR_ALLOCATED As Long = (MMSYSERR_BASE + 4)
Private Const MMSYSERR_BADDB As Long = (MMSYSERR_BASE + 14)
Private Const MMSYSERR_BADDEVICEID As Long = (MMSYSERR_BASE + 2)
Private Const MMSYSERR_BADERRNUM As Long = (MMSYSERR_BASE + 9)
Private Const MMSYSERR_DELETEERROR As Long = (MMSYSERR_BASE + 18)
Private Const MMSYSERR_ERROR As Long = (MMSYSERR_BASE + 1)
Private Const MMSYSERR_HANDLEBUSY As Long = (MMSYSERR_BASE + 12)
Private Const MMSYSERR_INVALFLAG As Long = (MMSYSERR_BASE + 10)
Private Const MMSYSERR_INVALHANDLE As Long = (MMSYSERR_BASE + 5)
Private Const MMSYSERR_INVALIDALIAS As Long = (MMSYSERR_BASE + 13)
Private Const MMSYSERR_INVALPARAM As Long = (MMSYSERR_BASE + 11)
Private Const MMSYSERR_KEYNOTFOUND As Long = (MMSYSERR_BASE + 15)
Private Const MMSYSERR_LASTERROR As Long = (MMSYSERR_BASE + 13)
Private Const MMSYSERR_MOREDATA As Long = (MMSYSERR_BASE + 21)
Private Const MMSYSERR_NODRIVER As Long = (MMSYSERR_BASE + 6)
Private Const MMSYSERR_NODRIVERCB As Long = (MMSYSERR_BASE + 20)
Private Const MMSYSERR_NOERROR As Long = 0
Private Const MMSYSERR_NOMEM As Long = (MMSYSERR_BASE + 7)
Private Const MMSYSERR_NOTENABLED As Long = (MMSYSERR_BASE + 3)
Private Const MMSYSERR_NOTSUPPORTED As Long = (MMSYSERR_BASE + 8)
Private Const MMSYSERR_READERROR As Long = (MMSYSERR_BASE + 16)
Private Const MMSYSERR_VALNOTFOUND As Long = (MMSYSERR_BASE + 19)
Private Const MMSYSERR_WRITEERROR As Long = (MMSYSERR_BASE + 17)
Private Type WAVEHDR
lpData As Long
dwBufferLength As Long
dwBytesRecorded As Long
dwUser As Long
dwFlags As Long
dwLoops As Long
lpNext As Long
Reserved As Long
End Type
Private Declare Function waveOutClose Lib "winmm.dll" (ByVal hWaveOut As Long) As Long
Private Declare Function waveOutOpen Lib "winmm.dll" (ByRef lphWaveOut As Long, ByVal uDeviceID As Long, ByRef lpFormat As WAVEFORMATEX, ByVal dwCallback As Long, ByVal dwInstance As Long, ByVal dwFlags As Long) As Long
Private Declare Function waveOutPrepareHeader Lib "winmm.dll" (ByVal hWaveOut As Long, ByRef lpWaveOutHdr As WAVEHDR, ByVal uSize As Long) As Long
Private Declare Function waveOutUnprepareHeader Lib "winmm.dll" (ByVal hWaveOut As Long, ByRef lpWaveOutHdr As WAVEHDR, ByVal uSize As Long) As Long
Private Declare Function waveOutWrite Lib "winmm.dll" (ByVal hWaveOut As Long, ByRef lpWaveOutHdr As WAVEHDR, ByVal uSize As Long) As Long
Private Declare Function waveOutPause Lib "winmm.dll" (ByVal hWaveOut As Long) As Long
Private Declare Function waveOutReset Lib "winmm.dll" (ByVal hWaveOut As Long) As Long
Private Declare Function waveOutRestart Lib "winmm.dll" (ByVal hWaveOut As Long) As Long
'-------------
Private Const MMIO_ALLOCBUF As Long = &H10000
Private Const MMIO_COMPAT As Long = &H0
Private Const MMIO_CREATE As Long = &H1000
Private Const MMIO_CREATELIST As Long = &H40
Private Const MMIO_CREATERIFF As Long = &H20
Private Const MMIO_DEFAULTBUFFER As Long = 8192
Private Const MMIO_DELETE As Long = &H200
Private Const MMIO_DENYNONE As Long = &H40
Private Const MMIO_DENYREAD As Long = &H30
Private Const MMIO_DENYWRITE As Long = &H20
Private Const MMIO_DIRTY As Long = &H10000000
Private Const MMIO_EMPTYBUF As Long = &H10
Private Const MMIO_EXCLUSIVE As Long = &H10
Private Const MMIO_EXIST As Long = &H4000
Private Const MMIO_FHOPEN As Long = &H10
Private Const MMIO_FINDCHUNK As Long = &H10
Private Const MMIO_FINDLIST As Long = &H40
Private Const MMIO_FINDPROC As Long = &H40000
Private Const MMIO_FINDRIFF As Long = &H20
Private Const MMIO_GETTEMP As Long = &H20000
Private Const MMIO_GLOBALPROC As Long = &H10000000
Private Const MMIO_INSTALLPROC As Long = &H10000
Private Const MMIO_OPEN_VALID As Long = &H3FFFF
Private Const MMIO_PARSE As Long = &H100
Private Const MMIO_PUBLICPROC As Long = &H10000000
Private Const MMIO_READ As Long = &H0
Private Const MMIO_READWRITE As Long = &H2
Private Const MMIO_REMOVEPROC As Long = &H20000
Private Const MMIO_RWMODE As Long = &H3
Private Const MMIO_SHAREMODE As Long = &H70
Private Const MMIO_TOUPPER As Long = &H10
Private Const MMIO_UNICODEPROC As Long = &H1000000
Private Const MMIO_VALIDPROC As Long = &H11070000
Private Const MMIO_WRITE As Long = &H1
Private Const MMIOERR_BASE As Long = 256
Private Const MMIOERR_ACCESSDENIED As Long = (MMIOERR_BASE + 12)
Private Const MMIOERR_CANNOTCLOSE As Long = (MMIOERR_BASE + 4)
Private Const MMIOERR_CANNOTEXPAND As Long = (MMIOERR_BASE + 8)
Private Const MMIOERR_CANNOTOPEN As Long = (MMIOERR_BASE + 3)
Private Const MMIOERR_CANNOTREAD As Long = (MMIOERR_BASE + 5)
Private Const MMIOERR_CANNOTSEEK As Long = (MMIOERR_BASE + 7)
Private Const MMIOERR_CANNOTWRITE As Long = (MMIOERR_BASE + 6)
Private Const MMIOERR_CHUNKNOTFOUND As Long = (MMIOERR_BASE + 9)
Private Const MMIOERR_FILENOTFOUND As Long = (MMIOERR_BASE + 1)
Private Const MMIOERR_INVALIDFILE As Long = (MMIOERR_BASE + 16)
Private Const MMIOERR_NETWORKERROR As Long = (MMIOERR_BASE + 14)
Private Const MMIOERR_OUTOFMEMORY As Long = (MMIOERR_BASE + 2)
Private Const MMIOERR_PATHNOTFOUND As Long = (MMIOERR_BASE + 11)
Private Const MMIOERR_SHARINGVIOLATION As Long = (MMIOERR_BASE + 13)
Private Const MMIOERR_TOOMANYOPENFILES As Long = (MMIOERR_BASE + 15)
Private Const MMIOERR_UNBUFFERED As Long = (MMIOERR_BASE + 10)
Private Const MMIOM_CLOSE As Long = 4
Private Const MMIOM_OPEN As Long = 3
Private Const MMIOM_READ As Long = MMIO_READ
Private Const MMIOM_RENAME As Long = 6
Private Const MMIOM_SEEK As Long = 2
Private Const MMIOM_USER As Long = &H8000
Private Const MMIOM_WRITE As Long = MMIO_WRITE
Private Const MMIOM_WRITEFLUSH As Long = 5
Private Type MMCKINFO
ckid As Long
ckSize As Long
fccType As Long
dwDataOffset As Long
dwFlags As Long
End Type
Private Type MMIOINFO
dwFlags As Long
fccIOProc As Long
pIOProc As Long
wErrorRet As Long
htask As Long
cchBuffer As Long
pchBuffer As String
pchNext As String
pchEndRead As String
pchEndWrite As String
lBufOffset As Long
lDiskOffset As Long
adwInfo(4) As Long
dwReserved1 As Long
dwReserved2 As Long
hmmio As Long
End Type
Private Declare Function mmioAdvance Lib "winmm.dll" (ByVal hmmio As Long, ByRef lpmmioinfo As MMIOINFO, ByVal uFlags As Long) As Long
Private Declare Function mmioAscend Lib "winmm.dll" (ByVal hmmio As Long, ByRef lpck As MMCKINFO, ByVal uFlags As Long) As Long
Private Declare Function mmioClose Lib "winmm.dll" (ByVal hmmio As Long, ByVal uFlags As Long) As Long
Private Declare Function mmioCreateChunk Lib "winmm.dll" (ByVal hmmio As Long, ByRef lpck As MMCKINFO, ByVal uFlags As Long) As Long
Private Declare Function mmioDescend Lib "winmm.dll" (ByVal hmmio As Long, ByRef lpck As MMCKINFO, ByRef lpckParent As Any, ByVal uFlags As Long) As Long
Private Declare Function mmioFlush Lib "winmm.dll" (ByVal hmmio As Long, ByVal uFlags As Long) As Long
Private Declare Function mmioGetInfo Lib "winmm.dll" (ByVal hmmio As Long, ByRef lpmmioinfo As MMIOINFO, ByVal uFlags As Long) As Long
Private Declare Function mmioInstallIOProc Lib "winmm.dll" Alias "mmioInstallIOProcA" (ByVal fccIOProc As Long, ByVal pIOProc As Long, ByVal dwFlags As Long) As Long
Private Declare Function mmioInstallIOProcA Lib "winmm.dll" (ByVal fccIOProc As String, ByVal pIOProc As Long, ByVal dwFlags As Long) As Long
Private Declare Function mmioOpen Lib "winmm.dll" Alias "mmioOpenA" (ByVal szFileName As String, ByRef lpmmioinfo As Any, ByVal dwOpenFlags As Long) As Long
Private Declare Function mmioRead Lib "winmm.dll" (ByVal hmmio As Long, ByRef pch As Any, ByVal cch As Long) As Long
Private Declare Function mmioRename Lib "winmm.dll" Alias "mmioRenameA" (ByVal szFileName As String, ByVal SzNewFileName As String, ByRef lpmmioinfo As MMIOINFO, ByVal dwRenameFlags As Long) As Long
Private Declare Function mmioSeek Lib "winmm.dll" (ByVal hmmio As Long, ByVal lOffset As Long, ByVal iOrigin As Long) As Long
Private Declare Function mmioSendMessage Lib "winmm.dll" (ByVal hmmio As Long, ByVal uMsg As Long, ByVal lParam1 As Long, ByVal lParam2 As Long) As Long
Private Declare Function mmioSetBuffer Lib "winmm.dll" (ByVal hmmio As Long, ByVal pchBuffer As String, ByVal cchBuffer As Long, ByVal uFlags As Long) As Long
Private Declare Function mmioSetInfo Lib "winmm.dll" (ByVal hmmio As Long, ByRef lpmmioinfo As MMIOINFO, ByVal uFlags As Long) As Long
Private Declare Function mmioStringToFOURCC Lib "winmm.dll" Alias "mmioStringToFOURCCA" (ByVal sz As String, ByVal uFlags As Long) As Long
Private Declare Function mmioWrite Lib "winmm.dll" (ByVal hmmio As Long, ByVal pch As String, ByVal cch As Long) As Long
Private Declare Function mmsystemGetVersion Lib "winmm.dll" () As Long
Private Type WAVEFORMATEX
wFormatTag As Integer
nChannels As Integer
nSamplesPerSec As Long
nAvgBytesPerSec As Long
nBlockAlign As Integer
wBitsPerSample As Integer
cbSize As Integer
End Type
Private Const SEEK_SET As Long = 0
'------------ Window Handling Declarations (needed for the callback window)
Private Const MM_WOM_CLOSE As Long = &H3BC
Private Const MM_WOM_DONE As Long = &H3BD
Private Const MM_WOM_OPEN As Long = &H3BB
Private Const WM_DESTROY As Long = &H2
Private Const WM_CLOSE As Long = &H10
Private Const SS_SIMPLE As Long = &HB&
Private Const WS_POPUP As Long = &H80000000
Private Const GWL_WNDPROC As Long = -4
Private Declare Function CallWindowProc Lib "user32.dll" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Function CreateWindowEx Lib "user32.dll" Alias "CreateWindowExA" (ByVal dwExStyle As Long, ByVal lpClassName As String, ByVal lpWindowName As String, ByVal dwStyle As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hWndParent As Long, ByVal hMenu As Long, ByVal hInstance As Long, ByRef lpParam As Any) As Long
Private Declare Function DestroyWindow Lib "user32.dll" (ByVal hWnd As Long) As Long
Private Declare Function SetWindowLong Lib "user32.dll" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long