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

https://www.vbarchiv.net
Rubrik: Multimedia & Sound · Audio   |   VB-Versionen: VB4, VB5, VB622.04.02
Mehrere WAVE-Dateien gleichzeitig abspielen

Das Abspielen zweier oder mehrerer WAVE-Dateien stellt für viele ein Problem dar - bis jetzt ;-))

Autor:   Dieter OtterBewertung:  Views:  27.525 
www.tools4vb.deSystem:  Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

Das Abspielen von WAVE-Dateien kann entweder über das MCI-Control erfolgen oder auch per API-Funktion sndPlaySound. Das ganze klappt auch ganz gut - doch: Sollen zwei oder mehrere WAVE-Dateien gleichzeitig abgespielt werden, braucht man entweder mehrere MCI-Controls - die API-Funktion z.B. scheidet hier sofort aus!

Es gibt aber noch einen Weg, eine WAVE-Datei abzuspielen - wiederum per API-Funktion - aber diesmal mit Hilfe der universellen Funktion mciSendString. Und hiermit ist es dann auch möglich zwei oder noch mehr WAVE-Dateien gleichzeitig abzuspielen.

Alles was man beachten muss, ist daß man für jede abzuspielende WAVE-Datei ein eindeutigen AliasName benutzt, über den das Abspielen und Stoppen der Wiedergabe erfolgt.

Kopieren Sie nachfolgenden Code in ein Modul:

' benötigte API-Deklaration
Private Declare Function mciSendString Lib "winmm.dll" _
  Alias "mciSendStringA" ( _
  ByVal lpszCommand As String, _
  ByVal lpszReturnString As String, _
  ByVal cchReturnLength As Long, _
  ByVal hwndCallback As Long) As Long
 
Private Declare Function GetShortPathName Lib "kernel32" _
  Alias "GetShortPathNameA" ( _
  ByVal lpszLongPath As String, _
  ByVal lpszShortPath As String, _
  ByVal cchBuffer As Long) As Long
' WAVE-File abspielen
Public Function WAVE_Play(ByVal sFile As String, _
  ByVal sAlias As String) As Boolean
 
  Dim bResult As Boolean
 
  ' Dateinamen in DOS 8.3 Format, da z.B. Sonderzeichen
  ' wie Leerzeichen Probleme machen
  Dim sBuffer As String
  Dim lResult As Long
 
  sBuffer = Space$(255)
  lResult = GetShortPathName(sFile, sBuffer, Len(sBuffer))
 
  If lResult <> 0 Then
    sFile = Left$(sBuffer, InStr(sBuffer, vbNullChar) - 1)
 
    ' MCI öffnen
    If mciSendString("open " & sFile & _
      " type WaveAudio alias " & sAlias, 0, 0, 0) = 0 Then
 
      ' WAVE abspielen
      mciSendString "play " & sAlias & " from 0", 0, 0, 0
    End If
  End If
 
  WAVE_Play = bResult
End Function
' Wiedergabe stoppen und MCI schließen
Public Sub WAVE_Stop(ByVal sAlias As String)
  mciSendString "stop " & sAlias, 0, 0, 0
  mciSendString "close " & sAlias, 0, 0, 0
End Sub

Beispiel für das Abspielen zweier WAVE-Files

Dim sFile1 As String
Dim sFile2 As String
 
sFile1 = "Wave_1.wav"
sFile2 = "Wave_2.wav"
 
' Wiedergabe starten
WAVE_Play sFile1, "MyWAVE_1"
WAVE_Play sFile2, "MyWAVE_2"
' Wiedergabe stoppen und MCI schließen
WAVE_Stop "MyWAVE_1"
WAVE_Stop "MyWAVE_2"



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.