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:
Mit diesen Code wird die Doublezeit in ein Zeitformat umgewandelt:
Hier wird der Titel von Listbox1 zur Listbox2 hinzugefügt (Button Click):
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!
Ich danke euch jetzt schon fürs lesen und Helfen
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
- 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
- Private Declare Function GetShortPathName Lib "kernel32" Alias "GetShortPathNameA" (ByVal lpszLongPath As String, ByVal lpszShortPath As String, ByVal cchBuffer As Integer) As Integer
- Private Function GetMP3Length(ByVal strFileName As String) As Long
- Dim strBuffer As String
- Dim lRet As Long
- Dim sReturn As String
- ' Da die mciSendString Funktion mit langen Dateinamen
- ' nicht korrekt arbeitet, muss zuvor der kurze
- ' 8.3 Dateiname der MP3-Datei ermittelt werden.
- strBuffer = Space$(255)
- lRet = GetShortPathName(strFileName, strBuffer, Len(strBuffer))
- If lRet <> 0 Then
- strFileName = Microsoft.VisualBasic.Left(strBuffer, InStr(strBuffer, vbNullChar) - 1)
- End If
- ' MP3-Datei öffnen
- mciSendString("open " & strFileName &
- " type MPEGVideo alias mp3audio", CType(0, String), 0, 0)
- ' Länge der Datei in Millisekunden auslesen
- sReturn = Space$(256)
- lRet = mciSendString("status mp3audio length",
- sReturn, Len(sReturn), 0&)
- ' MP3-Datei schliessen
- mciSendString("close mp3audio", CType(0, String), 0, 0)
- GetMP3Length = CLng(Val(sReturn))
- End Function
Mit diesen Code wird die Doublezeit in ein Zeitformat umgewandelt:
VB.NET-Quellcode
- Private Function FormatTime(ByVal lMSec As Long) _
- As String
- Dim iStd As Integer
- Dim iMin As Integer
- Dim iSec As Integer
- iSec = CInt(Int(lMSec / 1000))
- iMin = CInt(Int(iSec / 60))
- iStd = CInt(Int(iMin / 60))
- iSec = iSec - (iMin * 60)
- iMin = iMin - (iStd * 60)
- FormatTime = Format$(iStd, "00") & ":" &
- Format$(iMin, "00") & ":" &
- Format$(iSec, "00")
- End Function
Hier wird der Titel von Listbox1 zur Listbox2 hinzugefügt (Button Click):
VB.NET-Quellcode
- If ListBox1.Text = "" Then
- MsgBox("Du hast kein Lied ausgewählt.", MsgBoxStyle.OkOnly, "Fehler")
- Else
- Dim selectedItems = (From i In ListBox1.SelectedItems).ToList
- For Each selectedItem In selectedItems
- ListBox2.Items.Add(selectedItem)
- Gesamtspielzeit += GetMP3Length(My.Settings.Musikordner & selectedItem.ToString)
- 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!
Ich danke euch jetzt schon fürs lesen und Helfen
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VBHunter“ ()