Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge

mp3-Dateien in Listbox nacheinander abspielen

Edgar Rau / 4 Antworten / Baumansicht Nickles

Hallo zusammen,

ich habe 'mal wieder eine Frage in Visual Basic  6.

Ich habe ein kleines Programm erstellt, mit dem ich mp3's suchen und in einer Listbox anzeigen lassen kann. Dann habe ich eine zweite Listbox eingefügt, in die ich ausgewählte mp3's aus der ersten Listbox kopieren kann, dass soll eine Playliste werden.

Ich schaffe es aber einfach nicht, alle ausgewählten mp3's abspielen zu lassen.

Wenn ich folgenden Code ausführe:

Dim x As Integer
x = 0
For x = 0 To List1.ListCount - 1
List1.ListIndex = x
Me.WindowsMediaPlayer1.URL = List1
Next x

wird nur der letzte Song abgespielt.

Füge ich allerdings eine msgbox ein:

Dim x As Integer
x = 0
For x = 0 To List1.ListCount - 1
List1.ListIndex = x
Me.WindowsMediaPlayer1.URL = List1
MsgBox x
Next x

wird das erste Lied gespielt und es erscheint die MsgBox mit "0". Wenn ich dann auf OK klicke, wird das zweite Lied gespielt und es erscheint wieder die MsgBox, diesmal mit "1".

wie kann ich erreichen, dass alle Lieder problemlos abgespielt werden.

Vielen Dank für Eure Hilfe

Gruß Edgar

Wer brauchen ohne zu gebraucht, braucht brauchen gar nicht zu gebrauchen
bei Antwort benachrichtigen
Borlander Edgar Rau „mp3-Dateien in Listbox nacheinander abspielen“
Optionen

Das schaut ganz so aus als würde der Mediaplayer sofort auf ein Setzen der URL reagieren und diese abspielen, ohne dabei zu blockieren.

Ich habe leider spontan keine Dokumentation zu dieser Klasse/UI-Komponente gefunden, aber grundsätzlich wird es da mindestens eine der folgenden Möglichkeiten geben:

  • Du kannst direkt eine PlayList übergeben - wäre die beste Lösung
  • Du kannst einen Event-Handler definieren der ausgeführt wird wenn das Ende der gewählten Medienquelle erreicht ist. (Dann bräuchtest Du nur eine Liste und einen Index um die Wiedergabe zu steuern)
  • Du kannst den Zustand abfragen und wartest bis keine Wiedergabe mehr erfolgt. Das ist aber eher scheisse und sorgt im Zweifelsfall, dass überhaupt keine Benutzer-Interaktion mehr möglich ist wenn der Gui-Thread dadurch blockiert wird. Schlimmstenfalls noch durch aktives Warten…
bei Antwort benachrichtigen
Edgar Rau Borlander „Das schaut ganz so aus als würde der Mediaplayer sofort auf ein Setzen der URL reagieren und diese abspielen, ohne dabei ...“
Optionen

Hallo Borlander, vielen Dank für Dein Interesse, ich habe jetzt eine Lösung gefunden.

Mit diesem Code:

  Dim x As Integer
x = 0
For x = 0 To List1.ListCount - 1
List1.ListIndex = x
Dim myMP3 As Object
 
Set myMP3 = CreateObject("MCI.MMControl")
 
With myMP3
    .Notify = False
    .Wait = True
    .Shareable = False
    .Command = "Close"
 
    .FileName = List1
    .Command = "Open"
    
Me.WindowsMediaPlayer1.URL = List1
MsgBox "Die Playlist wurde gestartet." & vbNewLine & vbNewLine & "Mit Klick auf 'OK' wird der nächste Song gespielt.", , "Windows MediaPlayer", , , .Length / 1000
    .Command = "Close"
End With
 
Set myMP3 = Nothing

Next x

werden die MP3's nacheinander abgespielt.

Die Länge einer MP3 wird ausgelesen und als Parameter in Millisekunden der modifizierten MsgBox übergeben (.Lenght/1000).

Für die modifizierte MsgBox musste ein Modul eingefügt werden.

Copy & Paste

Gruß Edgar

Wer brauchen ohne zu gebraucht, braucht brauchen gar nicht zu gebrauchen
bei Antwort benachrichtigen
Borlander Edgar Rau „Hallo Borlander, vielen Dank für Dein Interesse, ich habe jetzt eine Lösung gefunden. Mit diesem Code: Dim x As Integer x ...“
Optionen

Nimm es mir nicht übel, aber der Ansatz mit einer MessageBox (ich gehe davon aus, dass dies eine tendenziell anwendungsmodaler Dialog ist der nur einen OK-Button besitzt) scheint mir doch eine ziemlich unbefriedigende Lösung zu sein.

Das Benutzerinterface skaliert vor allem extrem schlecht: Bei 1000 Audiodateien müsstest Du dann wahrscheinlich 1000 mal auf OK klicken um das Programm abzuschließen…

bei Antwort benachrichtigen
Edgar Rau Borlander „Nimm es mir nicht übel, aber der Ansatz mit einer MessageBox ich gehe davon aus, dass dies eine tendenziell ...“
Optionen

Ichhabe es mehrfach ausprobiert und es klappt prima, ohne auf "OK" klicken zu müssen.

Ich gebe Dir allerdings recht, es ist eine unbefriedigende Lösung und soll eigentlich nur eine Übergangslösung sein.

Ich werde mich jetzt intensiv mit der Erstellung und Einbindung einer Playlist beschäftigen. Das ist, wie Du schon bemerkt hast, die beste Lösung.

Ich bedanke mich jedenfalls für Deine Hinweise und Deinen Kommentar.

Gruß Edgar

Wer brauchen ohne zu gebraucht, braucht brauchen gar nicht zu gebrauchen
bei Antwort benachrichtigen