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

https://www.vbarchiv.net
Rubrik: Multimedia & Sound · Audio   |   VB-Versionen: VB4, VB5, VB612.08.03
MIDI abspielen mit Hilfe des Windows-API

Abspielen einer MIDI-Datei mit Hilfe der API-Funktion "mciSendString"

Autor:   Michael FuhrerBewertung:  Views:  21.944 
ohne HomepageSystem:  Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

Das nachfolgende Beispiel zeigt, wie Sie eine MIDI-Datei mit Hilfe der API-Funktion mciSendString abspielen können.

Hinweiss:
Die mciSendString-Funktion erfordert den kurzen 8.3 Dateiname, da sonst fehler auftreten. Den kurzen Dateinamen kann man mit Hilfe der API-Funktion GetShortPathName ermitteln.

Zunächst die 2 API-Funktionen, die Sie bitte in den Allgemeinen Teil des Form-Moduls einfügen:

Option Explicit
 
' Benötigte API-Deklarationen
' kurzer Pfad(8.3) ermitteln
Private Declare Function GetShortPathName Lib "kernel32" _
  Alias "GetShortPathNameA" ( _
  ByVal lpszLongPath As String, _
  ByVal lpszShortPath As String, _
  ByVal cchBuffer As Long) As Long
 
' Sound, Video, infos, spielen u.s.w.
Private Declare Function mciSendString Lib "winmm.dll" _
  Alias "mciSendStringA" ( _
  ByVal lpstrCommand As String, _
  ByVal lpstrReturnString As String, _
  ByVal uReturnLength As Long, _
  ByVal hwndCallback As Long) As Long

Die folgende Funktion ermittelt den kurzen Pfad-/Dateinamen einer Datei:

' kurzer Pfad ermitteln (8.3)
Private Function Get_ShortFullPath( _
  ByVal FullPath As String) As String
 
  Dim Buffer As String
 
  Buffer = Space$(256)
  If GetShortPathName(FullPath, Buffer, Len(Buffer)) <> 0 Then
    Get_ShortFullPath = Left$(Buffer, _
      InStr(Buffer, vbNullChar) - 1)
  End If
End Function

Zum Abspielen einer MIDI-Datei rufen Sie die MidiPlay-Funktion auf:

' MIDI-Datei abspielen
Private Function MidiPlay(ByVal FullPath As String) As Boolean
  Dim Buffer As String
  Dim ErrHandler As Long
  Dim ShortFullPath As String
 
  ' Prüfen ob eine MIDI-Datei übergeben wurde
  If UCase$(Mid$(FullPath, Len(FullPath) - 2)) <> "MID" Then
    MidiPlay = False: Exit Function
  End If
 
  ' Prüfen ob der kurze pfad übergeben wurde
  ShortFullPath = Get_ShortFullPath(FullPath)
  If Len(ShortFullPath) = 0 Then
    MidiPlay = False: Exit Function
  End If
 
  Buffer = Space$(256)
  ErrHandler = mciSendString("open sequencer!" & _
    ShortFullPath & " alias MIDI", Buffer, Len(Buffer), 0)
  ErrHandler = mciSendString("play MIDI", Buffer, _
    Len(Buffer), 0)
 
  MidiPlay = (ErrHandler = 0)
End Function

Das Stoppen des Abspielvorgangs erfolgt über die MidiStop-Prozedur:

' Abspielvorgang stoppen
Private Sub MidiStop()
  mciSendString "stop MIDI", 0, 0, 0
  mciSendString "close MIDI", 0, 0, 0
End Sub

So, wenn Sie den Code soweit eingefügt haben, bitte auf der Form noch zwei Buttons einfügen (cmdPlay und cmdStop).

Private Sub cmdPlay_Click()
  ' hier ggf. den Pfad anpassen
  If Not MidiPlay("C:\WINDOWS\MEDIA\onestop.mid") Then
    MsgBox "Midi datei kann nicht abgespielt werden!"
  End If
End Sub
Private Sub cmdStop_Click()
  MidiStop
End Sub

Hinweis:
Beim Beenden der Anwendung sollten Sie zur Sicherheit ebenfalls die MidiStop-Prozedur aufrufen, da die MIDI-Datei sonst unabhängig von der Anwendung weiter abgespielt wird.

Private Sub Form_Unload(Cancel As Integer)
  MidiStop
End Sub



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.