Rubrik: Multimedia & Sound · Audio | VB-Versionen: VB4, VB5, VB6 | 27.07.01 |
WAVE-Dateien aus der Ressoucen-Datei abspielen Dieses Beispiel zeigt, wie man eine in einer Ressourcen-Datei eingebundene WAVE-Datei abspielen kann. | ||
Autor: Dieter Otter | Bewertung: | Views: 19.564 |
www.tools4vb.de | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Sicherlich kennen Sie Ressourcen-Dateien. In einer solchen Datei lassen sich u.a. Texte, Icons, Bitmaps und auch WAVE-Dateien speichern. Eine Ressourcen-Datei wird direkt ins Projekt eingebunden und befindet sich dann beim Erstellen der EXE-Datei mit in der ausführbaren Anwendung. Der Vorteil, Texte, Icons oder auch WAVE-Dateien in einer Ressourcen-Datei zu speichern - anstelle diese Daten als externe eigene Dateien zu verwenden - besteht vor allen Dingen darin, daß Sie quasi mit einer einzigen Anweisung auf die enthaltenen Ressourcen zugreifen können.
Handelt es sich um Texte oder Bilder so verwenden Sie die VB-Funktion LoadResString bzw. LoadResPicture. Was aber, wenn es sich um eine WAVE-Datei zum Abspielen eines Sounds handelt? Hierfür gibt es die LoadResData-Funktion. Man übergibt der Funktion die entsprechende Ressourcen-Kennung (ID) und das Format, und erhält als Rückgabewert ein Byte-Array.
Wie spielt man nun aber den Sound ab? Man hat ja nur ein Bytefeld - und die WinAPI-Funktion sndPlaySound erwartet doch (so denkt man zumindest) einen Dateinamen. Weit gefehlt! Deklariert man den ersten Parameter der API-Funktion als As Any, so kann der API-Funktion auch ein Byte-Datenfeld übergeben werden. Wichtig ist dann nur, daß uFlags (2. Parameter der API-Funktion) mit der Konstante SND_MEMORY verORt wird.
Und hier die fertige Funktion
' zunächst die benötigten API-Deklarationen Private Declare Function sndPlaySound Lib "winmm" _ Alias "sndPlaySoundA" ( _ lpszSoundName As Any, _ ByVal uFlags As Long) As Long Private Const SND_SYNC = &H0 Private Const SND_ASYNC = &H1 Private Const SND_NODEFAULT = &H2 Private Const SND_MEMORY = &H4 ' WAVE aus Ressource-Datei abspielen Public Sub WaveFromRes(ByVal ResID As Long) Dim bWave() As Byte Dim uFlags As Long bWave = LoadResData(ResID, "WAVE") uFlags = SND_NODEFAULT Or SND_ASYNC Or SND_MEMORY Call sndPlaySound(bWave(0), uFlags) End Sub
Innerhalb der Ressourcen-Datei muss dann die WAVE-Datei folgendermaßen eingebunden werden
(die erste Zahl entspricht der ResID und muss eindeutig sein, im nachfolgenden Beispiel wurde die ID = 1000 gewählt):
1000 WAVE DISCARDABLE "test.wav"
Im Programm erfolgt das Abspielen dann so:
WaveFromRes 1000
Einschränkung
Es lassen sich nicht beliebig große WAVE-Dateien in einer Ressourcen-Datei speichern. Die von LoadResData aus der Ressourcedatei geladenen Daten können maximal 64 KB umfassen!