WMP Duration Information

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    WMP Duration Information

    Hallo leute,

    ich habe mir ein kleinen Musikplayer gebastelt und will das er mir die Gesamtzeiten meiner Playlist anzeigt, dazu muss er sie addieren...

    Ich habe zwei Listboxen ... In Listbox1 sind alle meine Lieder die er automatisch beim öffnen des Programms drin hat ... dann hab ich ein Button wo ich ein ausgewähltes Lied von Listbox1 in Listbox2 schiebt / kopiert....

    Jetzt kommt der Punkt wo die Duration für jedes Lied gelesen und gespeichert wird. Diesen Code kennt ja jeder....

    Mit diesen Code wird die Mp3 ausgelesen und die Zeit als Double ausgegeben:

    VB.NET-Quellcode

    1. Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Integer, ByVal hwndCallback As Integer) As Integer
    2. Private Declare Function GetShortPathName Lib "kernel32" Alias "GetShortPathNameA" (ByVal lpszLongPath As String, ByVal lpszShortPath As String, ByVal cchBuffer As Integer) As Integer
    3. Private Function GetMP3Length(ByVal strFileName As String) As Long
    4. Dim strBuffer As String
    5. Dim lRet As Long
    6. Dim sReturn As String
    7. ' Da die mciSendString Funktion mit langen Dateinamen
    8. ' nicht korrekt arbeitet, muss zuvor der kurze
    9. ' 8.3 Dateiname der MP3-Datei ermittelt werden.
    10. strBuffer = Space$(255)
    11. lRet = GetShortPathName(strFileName, strBuffer, Len(strBuffer))
    12. If lRet <> 0 Then
    13. strFileName = Microsoft.VisualBasic.Left(strBuffer, InStr(strBuffer, vbNullChar) - 1)
    14. End If
    15. ' MP3-Datei öffnen
    16. mciSendString("open " & strFileName &
    17. " type MPEGVideo alias mp3audio", CType(0, String), 0, 0)
    18. ' Länge der Datei in Millisekunden auslesen
    19. sReturn = Space$(256)
    20. lRet = mciSendString("status mp3audio length",
    21. sReturn, Len(sReturn), 0&)
    22. ' MP3-Datei schliessen
    23. mciSendString("close mp3audio", CType(0, String), 0, 0)
    24. GetMP3Length = CLng(Val(sReturn))
    25. End Function


    Mit diesen Code wird die Doublezeit in ein Zeitformat umgewandelt:

    VB.NET-Quellcode

    1. Private Function FormatTime(ByVal lMSec As Long) _
    2. As String
    3. Dim iStd As Integer
    4. Dim iMin As Integer
    5. Dim iSec As Integer
    6. iSec = CInt(Int(lMSec / 1000))
    7. iMin = CInt(Int(iSec / 60))
    8. iStd = CInt(Int(iMin / 60))
    9. iSec = iSec - (iMin * 60)
    10. iMin = iMin - (iStd * 60)
    11. FormatTime = Format$(iStd, "00") & ":" &
    12. Format$(iMin, "00") & ":" &
    13. Format$(iSec, "00")
    14. End Function


    Hier wird der Titel von Listbox1 zur Listbox2 hinzugefügt (Button Click):

    VB.NET-Quellcode

    1. If ListBox1.Text = "" Then
    2. MsgBox("Du hast kein Lied ausgewählt.", MsgBoxStyle.OkOnly, "Fehler")
    3. Else
    4. Dim selectedItems = (From i In ListBox1.SelectedItems).ToList
    5. For Each selectedItem In selectedItems
    6. ListBox2.Items.Add(selectedItem)
    7. Gesamtspielzeit += GetMP3Length(My.Settings.Musikordner & selectedItem.ToString)
    8. Next



    nun zu meinen Problem:

    Das funktioniert alles super, aber nur wenn ich meine Musik auf C habe! .... habe ich z.b. eine Externe FP oder intern Platte D (und stelle Listbox1 um das er D läd) dann zeigt er bei den Zeiten beim hinzufügen eines Liedes immer 0:00:00 an, als wenn er keine Zeit extern von C lesen darf. Woran liegt das? ... Packe ich Musik wieder auf C und lasse C in meine Listbox1 aufrufen, gehts wieder.


    Das Programm startet mit Adminrechten!

    VB.NET-Quellcode

    1. <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />



    Ich danke euch jetzt schon fürs lesen und Helfen

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

    VBHunter schrieb:

    Diesen Code kennt ja jeder
    Ich wohl als einziger nicht ;(
    Argh, meine Augen bluten! Du arbeitest schon in VB6, oder? Zumindest lässt Dein Code darauf schließen: Format$, Int(), Long, MsgBox, Space$, Len <X . Sollte das wirklich VB.Net sein, probier's mal ohne Microsoft.VisualBasic-Namespace

    VBHunter schrieb:

    Mit diesen Code wird die Doublezeit in ein Zeitformat umgewandelt:
    Schau Dir mal die TimeSpan-Konstruktoren an.
    Probier mal den Code von project-medlan, vielleicht klappt der besser.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    VBHunter schrieb:

    VB.NET-Quellcode

    1. iSec = CInt(Int(lMSec / 1000))
    Entweder Du rundest den Wert oder Du verwendest Integer-Division:

    VB.NET-Quellcode

    1. iSec = lMSec \ 1000

    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!
    okay Danke @RodFromGermany

    habs erstmal abgeändernt .... jetzt ist es nicht mehr so verwirrend ^^... zumindest in diesen Bereich...

    aber das ist scheinbar nicht der Fehler warum er mir die Zeiten bei externen oder anderen Partitionen liegenden Mp3s die Zeiten nicht anzeigt ... wenn ich die Mp3 auf meinen Desktop habe zeigt er mir die länge der Mp3 an.

    Warum? Kann man noch mehr übergreifende Rechte vergeben ? ... Admin ist nach meiner meinung doch schon das Höchste, oder gilt es immer nur für die aktuelle Patition?
    @VBHunter Beschreib mal Dein Problem so, dass ich es so verstehe, wie Du es meinst.
    Sag wie es ist und wie es sein soll, häng ggf. ein Bildchen dazu an.
    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!