WaveOutOpen
Die API-Funktion waveOutOpen gibt Auskunft über XYZ.
Declare Function waveOutOpen lib "winmm.dll" _
Alias "waveOutOpen" ( _
ByRef lphWaveOut As Long, _
ByVal uDeviceID As Long, _
ByRef lpFormat As WAVEFORMAT, _
ByVal dwCallback As Long, _
ByVal dwInstance As Long, _
ByVal dwFlags As Long) As Long
Parameter
lphWaveOut
- Variable vom Datentyp Long welche das Device Handle erhält.
uDeviceID
- ID des Devices welches geöffnet werden soll. Siehe auch waveOutGetDevCaps.
lpFormat
- Struktur welche das Format der Daten definiert die dem Device zum Abspielen übergeben werden sollen.
dwCallback
- Zeiger auf eine Callback Funktion. Vorsicht, bei Verwendung dürfen innerhalb dieser Funktion nur eingeschränkte Befehle verwendet werden!
dwInstance
- Beschreibung
dwFlags
- Beschreibung
Rückgabe(n)
Die Funktion gibt einen Wert des Types Long zurück. 0 bei Erfolg ansonsten Fehlercode
[OPTIONAL] Beispiel
Option Explicit
Private Declare Function waveOutOpen Lib "winmm.dll" (hWaveOut As Long, _
ByVal uDeviceID As Long, Format As Any, 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, lpWaveInHdr As Any, ByVal uSize As Long) As Long
Private Declare Function waveOutUnprepareHeader Lib "winmm.dll" ( _
ByVal hWaveOut As Long, lpWaveInHdr As Any, ByVal uSize As Long) As Long
Private Declare Function waveOutClose Lib "winmm.dll" (ByVal hWaveOut As Long) 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 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 Const WAVE_FORMAT_PCM As Long = 1
Private Const CALLBACK_FUNCTION As Long = &H30000
Private Const INVALID_HANDLE_VALUE As Long = -1
Private Const WOM_DONE As Long = &H3BD
Private hDevice As Long
Private udtBuffer1Hdr As WAVEHDR
Private btWaveOutBuffer1() As Byte
Private udtBuffer2Hdr As WAVEHDR
Private btWaveOutBuffer2() As Byte
Private lBufferFinished As Long
Public Sub OpenOutputDevice(DevID As Long, Samplerate As Long)
Dim udtWaveFormat As WAVEFORMATEX
With udtWaveFormat
.cbSize = 0
.wFormatTag = WAVE_FORMAT_PCM
.nChannels = 1
.nSamplesPerSec = Samplerate
.wBitsPerSample = 16
.nBlockAlign = .wBitsPerSample / 8
.nAvgBytesPerSec = Samplerate * .nBlockAlign
End With
If waveOutOpen(hDevice, DevID, udtWaveFormat, AddressOf CallBack, 0, CALLBACK_FUNCTION) <> 0 Then
'Failed
hDevice = INVALID_HANDLE_VALUE
Else
'Success
ReDim btWaveOutBuffer1(Samplerate * 2 * 0.25 - 1) 'zwei buffer, jeweils 1/4 sekunde 16 bit audio
ReDim btWaveOutBuffer2(Samplerate * 2 * 0.25 - 1)
With udtBuffer1Hdr
.lpData = VarPtr(btWaveOutBuffer1(0))
.dwBufferLength = UBound(btWaveOutBuffer1) + 1
.dwUser = 1
End With
With udtBuffer2Hdr
.lpData = VarPtr(btWaveOutBuffer2(0))
.dwBufferLength = UBound(btWaveOutBuffer2) + 1
.dwUser = 2
End With
If waveOutPrepareHeader(hDevice, udtBuffer1Hdr, LenB(udtBuffer1Hdr)) Or _
waveOutPrepareHeader(hDevice, udtBuffer2Hdr, LenB(udtBuffer2Hdr)) > 0 Then
waveOutUnprepareHeader hDevice, udtBuffer1Hdr, LenB(udtBuffer1Hdr)
waveOutUnprepareHeader hDevice, udtBuffer2Hdr, LenB(udtBuffer2Hdr)
waveOutClose hDevice
hDevice = INVALID_HANDLE_VALUE
End If
End If
End Sub
Private Sub CallBack(ByVal hDev As Long, ByVal uMsg As Long, dwInstance As Long, _
dwParam1 As WAVEHDR, dwParam2 As Long)
If uMsg = WOM_DONE Then
lBufferFinished = lBufferFinished And (Not dwParam1.dwUser)
End If
End Sub
[PFLICHT] Quelle(n)
- MSDN US-Libary