vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: Multimedia & Sound · Audio   |   VB-Versionen: VB4, VB5, VB627.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 OtterBewertung:  Views:  19.564 
www.tools4vb.deSystem:  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!
 



Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
 
Copyright ©2000-2024 vb@rchiv Dieter OtterAlle Rechte vorbehalten.


Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.