My.Computer.Audio.Play ....fortschritt in einer ProgressBar

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von KidRick.

    My.Computer.Audio.Play ....fortschritt in einer ProgressBar

    Hi,

    Ich habe eine wav-Datei die ich von meinen Resources abspielen lasse per Button.

    VB.NET-Quellcode

    1. My.Computer.Audio.Play(My.Resources.HIERDIEWAV, AudioPlayMode.Background)


    ich will das mir eine ProgressBar anzeigt wann das Lied zuende ist (der Balken sich füllt).

    Mir fällt kein ansatz ein....

    Bitte um Hilfe ;(

    *Topic verschoben*

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Marcus Gräfe“ ()

    VBHunter schrieb:


    Mir fällt kein ansatz ein....

    Mal eine Idee dazu...

    Anhand der vorhandenen Daten innerhalb der WAV-Datei die Dauer errechnen und bei Abspielen zusätzlich einen Timer starten der pro Sekunde aufgerufen wird und den ProgressBar aktualisiert.
    Aktuelles Projekt: Z80 Disassembler für Schneider/Amstrad CPC :love:
    Moin! :)
    Eine genaue Vorgehensweise kenne ich leider nicht.
    Aber ich habe eine Idee.
    Vielleicht hilft dir diese bereits.
    Viel Erfolg!
    BIG THX

    VB.NET-Quellcode

    1. 1. Prüfe die Länge der WAV-Datei!
    2. z.B 5 Minuten.
    3. 2. Zeit Starten(Stopwatch Class)
    4. 3. ProgressBar hoch zählen...
    5. 4. Audio abspielen...
    6. 5. Wenn Zeit vorbei, Zeit stoppen
    Visual Basic.NET 8o
    MS-SQL
    8o

    oobdoo schrieb:

    Anhand der vorhandenen Daten innerhalb der WAV-Datei die Dauer errechnen und bei Abspielen zusätzlich einen Timer starten der pro Sekunde aufgerufen wird und den ProgressBar aktualisiert.


    Achso... hätte ich vielleicht dazu schreiben sollen. Dafür braucht du auch die .dll-Datei. Denn die Länge lässt sich meines Wissens nach nicht so einfach ermitteln.

    *Vollzitat entfernt* ~NoFear23m


    Ein Computer wird das tun, was du programmierst - nicht das, was du willst.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Nofear23m“ ()

    Man braucht keine zusätzliche DLL-Datei.
    Jedenfalls bei MP3s geht es mit der „Auto Function mciSendString Lib“.
    Ich glaube auch bei WAV-Dateien sollte es gehen.
    Schau dir das mal an.

    Link:
    vbarchiv.net/tipps/tipp_2071-l…-mp3-datei-ermitteln.html
    Visual Basic.NET 8o
    MS-SQL
    8o
    Vielen Dank für euche Tipps !!!!

    Yanbel schrieb:

    Schau dir mal bitte die MediaInfo.dll an.
    <a href="https://de.azdll.net/files/mediainfo-dll.html" class="externalURL" rel="nofollow" target="_blank">de.azdll.net/files/mediainfo-dll.html</a>

    Hoffe das ist die Datei <img src="https://www.vb-paradise.de/wcf/images/smilies/wink.png" alt=";)" /> Sonst gerne bescheid sagen, dann muss ich den Link entfernen.

    Hier ein Beitrag der dir vielleicht hilft: <a href="https://www.vb-paradise.de/index.php/Thread/92278-Videol%C3%A4nge-Spielzeit-ermitteln/?postID=766771#post766771">Videolänge (Spielzeit) ermitteln</a>


    Ja, soweit hatte ich das auch schon einmal versucht aber wenn ich die Media_info.dll im verweis hinzufügen will meckert er :



    hab das auch schon über den NuGet - Exploder versucht ... erfolglos

    Habe jetzt mal versucht das mit dem AxWindowsMediaPlayer alias MediaPlayer auslesen zu lassen und zu steuern... jetzt geht das soweit.... oder habt ihr noch eine saubere vorm/vorschläge?

    Das ist das Ergebnis:

    Ich habe den "AxWindowsMediaPlayer1" als Tool hinzugefügt und auf die Form gepackt (Versteckt und in die Ecke).

    Wenn ich jetzt mein Button klicke um den Sound abzuspielen:

    VB.NET-Quellcode

    1. Privat Sub btn_Sound_Click(sender As Object, e As EventArgs) Handles btn_Sound.Click
    2. btn_Sound.Enabled = False
    3. Dim file As String = Application.StartupPath & "\Dokumente\Meine Sounddatei.wav"
    4. IO.File.WriteAllBytes(Application.StartupPath & "\Dokumente\Meine Sounddatei.wav", My.Resources.Meine_Sounddatei_1)
    5. AxWindowsMediaPlayer1.URL = file
    6. Timer_runtime.Start()
    7. End Sub


    Dann der Timer (Timer_runtime) um die Zeit zu ermitteln muss der Player ja laufen, deshalb zwei Timer:

    VB.NET-Quellcode

    1. Private Sub Timer_runtime_Tick(sender As Object, e As EventArgs) Handles Timer_runtime.Tick
    2. SoundTime= CInt(AxWindowsMediaPlayer1.currentMedia.duration) - 1
    3. Timer_playtime.Start()
    4. Timer_runtime.Stop()
    5. End Sub


    Oben in der Deklaration natürlich Dim SoundTime as Integer

    Der Zweite Timer (Timer_Playtime) um die Progressbar zu Aktivieren und zu füllen, hab da auch noch im Button ein kleinen Countdown eingebaut wie lange die Sounddatei noch läuft.

    VB.NET-Quellcode

    1. Private Sub Timer_playtime(sender As Object, e As EventArgs) Handles Timer_playtime.Tick
    2. SoundTime -= 1
    3. btn_Sound.Text = SoundTime.ToString
    4. ProBar1.Maximum = CInt(AxWindowsMediaPlayer1.currentMedia.duration)
    5. ProBar1.Value = CInt(AxWindowsMediaPlayer1.Ctlcontrols.currentPosition)
    6. ProBar1.Value = CInt(AxWindowsMediaPlayer1.Ctlcontrols.currentPosition)
    7. If SoundTime = 0 Then
    8. Timer_playtime.Stop()
    9. btn_Sound.Enabled = True
    10. btn_Sound.Text = "Abspielen"
    11. End If
    12. End Sub


    Ich entschuldige mich das es so lange gedauert hatte zu Antworten, hatte viel rumprobiert ^^

    Danke an euch allen

    VBHunter schrieb:

    Dann der Timer (Timer_runtime) um die Zeit zu ermitteln muss der Player ja laufen, deshalb zwei Timer
    Dazu brauchst Du doch keinen Timer.
    Das kannst Du doch machen, wenn dieses Lied ausgewählt wurde.
    Allerdings ist es nicht elegant, den Player zu starten, um die Dauer des Tracks zu ermitteln.
    Vielleicht liest Du die Länge direkt aus der Datei aus:
    Spieldauer einer MP3 auslesen
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Moin! :)
    Ich habe gerade einen Code geschrieben.
    Bei längeren Wav-Dateien gibt es eine Fehlermeldung.
    Da ich gerade keine Zeit mehr habe, poste ich den jetzigen Code.
    Der Code prüft wie groß die Sounddatei ist, und startet einen Timer1, in diesem man den Status in Prozent sehen kann.
    Diese zwei Zeilen sollte man noch anpassen, damit es egal ist wie groß die Sounddatei ist.

    VB.NET-Quellcode

    1. Me.ProgressBar1.Maximum = CInt(wave_länge)
    2. Dim ProzentString = Math.Round(ProgressBar1.Value * 100 / wave_länge, 2).ToString & "%"

    Ich hoffe ich könnte helfen!
    Viel Spaß!

    nun der Code:

    VB.NET-Quellcode

    1. Module Module1
    2. ' zunächst die benötigte API-Deklaration
    3. Private Declare Function mciSendString Lib "winmm.dll" _
    4. Alias "mciSendStringA" (
    5. ByVal lpszCommand As String,
    6. ByVal lpszReturnString As String,
    7. ByVal cchReturnLength As Integer,
    8. ByVal hwndCallback As Integer) As Integer
    9. Public Function MP3_Play(ByVal sFile As String,
    10. ByVal sAlias As String) As Boolean
    11. ' MCI öffnen
    12. If mciSendString("open " & Chr(34) & sFile & Chr(34) &
    13. " type MPEGVideo alias " & sAlias, 0, 0, 0) = 0 Then
    14. ' MP3 abspielen
    15. If mciSendString("play " & sAlias & " from 0", 0, 0, 0) = 0 Then
    16. Return (True)
    17. End If
    18. End If
    19. Return (False)
    20. End Function
    21. ' Wiedergabe stoppen und MCI schließen
    22. Public Sub MP3_Stop(ByVal sAlias As String)
    23. mciSendString("stop " & sAlias, 0, 0, 0)
    24. mciSendString("close " & sAlias, 0, 0, 0)
    25. End Sub
    26. Public Function GetMP3Length(ByVal FileName As String) As Integer
    27. ' MP3-Datei öffnen
    28. mciSendString("open " & Chr(34) & FileName & Chr(34) &
    29. " type MPEGVideo alias mp3audio", 0, 0, 0)
    30. ' Länge der Datei in Millisekunden auslesen
    31. Dim sReturn As String = Strings.Space(256)
    32. Dim lRet As Integer = mciSendString("status mp3audio length",
    33. sReturn, sReturn.Length, 0&)
    34. ' MP3-Datei schliessen
    35. mciSendString("close mp3audio", 0, 0, 0)
    36. Return Val(sReturn)
    37. End Function
    38. End Module


    VB.NET-Quellcode

    1. Option Strict On
    2. Public Class Form1
    3. Dim wave_länge As Long
    4. Dim file As String = "E:\Downloads\MP3s\NeuesLied.mp3" '>--- egal , ob MP3 oder Wav...
    5. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    6. MP3_Play(file, "MyAlias")
    7. wave_länge = CLng(GetMP3Length(file) / 1000)
    8. Me.ProgressBar1.Value = 0
    9. Me.ProgressBar1.Minimum = 0
    10. Me.ProgressBar1.Maximum = CInt(wave_länge)
    11. Me.Timer1.Enabled = True
    12. End Sub
    13. Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    14. Me.ProgressBar1.Increment(1)
    15. ' Prozentwert berechnen...
    16. Dim ProzentString = Math.Round(ProgressBar1.Value * 100 / wave_länge, 2).ToString & "%"
    17. ' Anzeigen...
    18. Me.Text = ProzentString
    19. If Me.Text = "100%" Then
    20. Me.Timer1.Enabled = False
    21. Me.Text = "Ende"
    22. End If
    23. End Sub
    24. Private Sub Form1_FormClosed(sender As Object, e As FormClosedEventArgs) Handles Me.FormClosed
    25. ' MP3-Wiedergabe stoppen
    26. MP3_Stop("MyAlias")
    27. End Sub
    28. End Class
    Visual Basic.NET 8o
    MS-SQL
    8o
    Danke @RodFromGermany das ist ein guter Hinweis und einfach geregelt ^^

    Klass @Cheffboss das du dich da ran gesetzt hast, sieht sehr gut aus und läuft auch, nur die Zeit wird mir komischer weise nicht angezeigt und er ist schnell auf 100 %, noch bevor das Lied / Sound vorrüber ist. Aber das bekomm ich auch noch bearbeitet.

    Vielen dank euch !

    Yanbel schrieb:

    Schau dir mal bitte die MediaInfo.dll an.
    de.azdll.net/files/mediainfo-dll.html

    Hoffe das ist die Datei ;) Sonst gerne bescheid sagen, dann muss ich den Link entfernen.


    Ich persönlich finds nicht gut auf solche Seiten zu verleiten. Lieber anständige Bibliotheken nehmen oder das was das System liefert. Aber auf merkwürdigen DLL Downloadseiten etwas ziehen ist per se ganz schlecht.
    Software being "Done" is like lawn being "Mowed". (Jim Benson)