[VB.NET] MP3 im Loop abspielen

Rockstady11

Mitglied
Hallo Leute,

ich brauche erneut eure Hilfe, ich habe mittlerweile stundenlang erfolglos nach einer Lösung für mein Problem gesucht, bin aber leider nicht fündig geworden.

Eigentlich hört es sich relativ einfach an. Ich brauche eine Möglichkeit, mit der ich eine mp3-Datei im Loop abspielen lassen kann. Allerdings, wenn dies geht, ohne zusätzliche Timer oder so Zeug, da dies der Performance schadet und ich dies nicht wünsche.

Das Steuerelement mit dem Media-Player hatte ich schon versucht, aber aufgrund der schlechten Performance habe ich diese Lösung verworfen.

Die Standard-Methode:
Code:
My.Computer.Audio.Play("C:\Test.wav", AudioPlayMode.BackgroundLoop)
Funktioniert blendend, allerdings eben nicht für mp3s.

Gerade habe ich es so, bin damit allerdings auch nicht glücklich:

Code:
Private Declare Function mciExecute Lib "winmm.dll" (ByVal lpstrCommand As String) As Long
Call mciExecute("Play" & Chr(32) & "C:\Test.mp3")

Problem an dieser Methode ist, dass ich es nicht schaffe daraus einen Loop zu machen. Ich habe dazu parallel einen Timer laufen lassen, der dann nach einer von mir gewählten Zeit dies erneut ausführt, allerdings ist dies sehr ungenau, also man hört die Pausen zwischen den Loops.

Wie kann ich mein Problem sinnvoll lösen?

Bitte um Hilfe, danke!

Mit freundlichen Grüßen

Rockstady11
 

Masterclavat

Erfahrenes Mitglied
Versuchs mal so:

Code:
While True
    mciExecute("PLAY C:\Test.mp3 WAIT")
    'Hier irgendeinen Cancel-Fall einbauen a la: If Cancel Then Exit While
End While
 

Rockstady11

Mitglied
Danke erst mal für deine Antwort.

Wo schreib ich dies dann in meinen Code?
Wenn ich es in das Load der Form mache, dann startet diese nicht mehr und ansonsten müsste ich es ja wieder in einen Timer machen, was ich ja vermeiden möchte und außerdem müsste da dann noch eine Abfrage rein, ob das Lied zu Ende ist, weil sonst würde es praktisch andauernd neue Instanzen davon erzeugen.
 

Masterclavat

Erfahrenes Mitglied
Du führst den Code am besten in einem neuen Thread aus, den du dann von der Stelle startest, an der du die Schleife starten willst.

Das Abbrechen der Schleife hab ich dir ja als Comment in den Code geschrieben, aber hier nochmal im Klartext.

Du überprüfst nach jedem Abspielen des mp3-Files, ob eine Variable - meinetwegen Cancel - True ist. Wenn ja, dann wird die Schleife unterbrochen und der Thread damit beendet, wenn nein, dann wird das File nocheinmal abgespielt.
 

Rockstady11

Mitglied
Naja, aber ob ein Thread wesentlich performanter als ein Timer ist, ich weiß ja nicht.
Hier ist aber wieder das Problem, wie stelle ich fest, ob die mp3-Datei komplett abgespielt wurde oder eben nicht? Ich bin mir nicht sicher, ob ich mit diesem Ansatz zum gewünschten Ergebnis komme, verstehst du, was ich meine?
 

Rockstady11

Mitglied
Unter dem Aspekt, dass es mit .wav Dateien problemlos funktioniert, nur die Größe des Programms darunter leidet, ist es ein bisschen übertrieben hierfür eine extra Sound-Engine zu verwenden.
Wenns mit mp3s nicht funktioniert, dann bleiben es eben wavs.