Media player in vb6 einbinden

Hi
Ich habe mir den media player in mein VB6 eingebunden, aber leider funktioniert die referenzierte überhaupt nicht.

lt MSN mediaplayer1.filename = xxx
und mediapleyer1.duration

bei mir funktioniert aber nur
windowsmediaplayer1.url =
und duration ist nicht einmal in den klassen referenziert.
den mediaplayer habe ich den komponenten hinzugefügt, aber ich würde gerne die restspielzeit der mp3’s abfragen.
habt ihr eine idee wie ich den wert bekomme ?

danke schon mal

Hi

Hallo,

Ich habe mir den media player in mein VB6 eingebunden, aber
leider funktioniert die referenzierte überhaupt nicht.

Ach doch. Das klappt schon :wink:

lt MSN mediaplayer1.filename = xxx
und mediapleyer1.duration

bei mir funktioniert aber nur
windowsmediaplayer1.url =
und duration ist nicht einmal in den klassen referenziert.
den mediaplayer habe ich den komponenten hinzugefügt, aber ich
würde gerne die restspielzeit der mp3’s abfragen.
habt ihr eine idee wie ich den wert bekomme ?

Na aber sicher doch :smile:
Ich vermute mal das du den neuen WMP hast und da ist einiges anders :s
Aber folgender Source gibt dir die Zeit in einer MSGBOX aus :smile:

'Steuerelement Mediaplayer = WindowsMediaplayer1 in VB!

 With WindowsMediaPlayer1 
 .URL = "Dein.MP3" 'File wird geladen und beginnt abzuspielen
 .Controls.stop ' Wir stoppen den Player. Wir wollen doch kein Ton hören :wink:
 MsgBox .Controls.currentItem.duration 'Und lassen uns die Zeit ausgeben!
 End With

Aber mal was anderes. Brauchst du den WMP nur um dir die zeit eines MP3’s anzeigen zu lassen?
Wenn ja, dann kannst du das auch wiefolgt machen :smile:

Private Declare Function mciSendString Lib "winmm.dll" \_
 Alias "mciSendStringA" ( \_
 ByVal lpstrCommand As String, \_
 ByVal lpstrReturnString As String, \_
 ByVal uReturnLength As Long, \_
 ByVal hwndCallback As Long) As Long

Private Declare Function GetShortPathName Lib "kernel32" \_
 Alias "GetShortPathNameA" ( \_
 ByVal lpszLongPath As String, \_
 ByVal lpszShortPath As String, \_
 ByVal cchBuffer As Long) As Long

Private Function GetMP3Length( \_
 ByVal strFileName As String) As Long
Dim strBuffer As String
Dim lRet As Long
Dim sReturn As String
strBuffer = Space$(255)
lRet = GetShortPathName(strFileName, strBuffer, Len(strBuffer))
If lRet 0 Then strFileName = Left$(strBuffer, InStr(strBuffer, vbNullChar) - 1)
mciSendString "open " & strFileName & \_
 " type MPEGVideo alias mp3audio", 0, 0, 0
sReturn = Space$(256)
lRet = mciSendString("status mp3audio length", \_
 sReturn, Len(sReturn), 0&amp:wink:
mciSendString "close mp3audio", 0, 0, 0
 GetMP3Length = Val(sReturn)
End Function

Private Function FormatTime(ByVal lMSec As Long) \_
 As String
Dim iMin As Integer
Dim iSec As Integer
iSec = Int(lMSec / 1000)
iMin = Int(iSec / 60)
iSec = iSec - (iMin \* 60)
FormatTime = Format$(iMin, "00") & ":" & \_
 Format$(iSec, "00")
End Function

'Ein Aufruf koennte wiefolgt ausschauen

Msgbox "Länge des Mp3: " & FormatTime(GetMP3Length("Dein.Mp3"))

danke schon mal

Nichts zu danken :smile:

MfG Alex

DANKE

werde ich @ home gleich versuchen.

ich will mir einfach ein proggy schreiben, mit dem ich alle mp3’s durchsuchen kann nach mehreren kriterien (auch tag’s). damit ich auch die klangqualität testen kann, brauch ich den player auch dazu.
und die laufzeit des files hätt ich gerne dabei, damit’s ein bisserl proffessioneller wird :wink:

hast du einen link für mich für diese codebibliothek ?
danke dir
ciao

Hallo :smile:

DANKE

werde ich @ home gleich versuchen.

ich will mir einfach ein proggy schreiben, mit dem ich alle
mp3’s durchsuchen kann nach mehreren kriterien (auch tag’s).
damit ich auch die klangqualität testen kann, brauch ich den
player auch dazu.

Hmm, das ist Quatsch :smile: Warum willst du mit Kanonen auf Spatzen schiessen? Stell Dir mal vor, du hast 1000 Mp3’s. Willst du dir da etwa anhoeren um zu wissen wie die Qualitaet ist?

und die laufzeit des files hätt ich gerne dabei, damit’s ein
bisserl proffessioneller wird :wink:

Wie du an die kommst, das weisst du ja nun. Aber bei deinem Vorhaben ist dies auch der falsche Weg :s

Schau. Ein Mp3 hat den ID3V1 und den ID3V2 Tag! Der Id3V2 Tag, ist nur ab und wann einmal vorhanden. Wenn er vorhanden ist, dann steht er in den letzten 128 Bytes. Wobei am Anfang, folgende ZeichenKombination vorhanden sein muss „TAG“.

Aber diese Daten haben ein Manko. Sie koennen max. 30 Zeichen lang sein und dort gibt es auch 2 verschiedene Versionen, die man aber auch abfragen kann. Auf diese Daten würde ich mich jedoch nicht verlassen.

Besser dagegen ist schon der ID3V1 Tag. Dieser steht im Header von jeden Mp3 File und kann unterschiedliche Längen haben. Auch ist die Startposition des Tages immer unterschiedlich. Aber auch all diese Daten bekommt man raus :smile:

In diesem Tag findest du unteranderen auch die Spielzeit des Mp3’s. Wenn ich dir nun hier alle Verfuegbaren Daten aufschreiben würde. Ich glaube dann würde ich das Forum sprengen :S Aber so Pi ma Daumen geschaetzt sind es ca. 100 Informationen. Tendenz steigend!
Dort findest du zum Bsp. Bilder, den Autor, Titel, Laufzeit, Ob es ein Copyright besitzt, Samplerate, Bitrate etc.

Wie du nun siehst, kannst du anhand all dieser Informationen das Mp3 bewerten.
Warum also so schwer machen, wenn man es einfacher haben kann :smile:

hast du einen link für mich für diese codebibliothek ?
danke dir

Ich bin nicht an meinen eigenen Rechner, sonst koennte ich dir mal ein Link senden, wo du den Aufbau von Dateien findest.
Auch würde ich von komplexen Source abraten, denn was nuetzt es dir wenn es einmal geht und dann nicht mehr, weil irgendwas in deinem Prog Quer schlaegt. DU weisst dann nicht wo der hund begraben ist:/

Aber um deine Fragen zu beantworten. Probiere mal folgenden Code

Option explicit

Private Type MP3Information
 ID As String 'ID
 Layer As String 'Layer
 Bitrate As Long 'Bitrate
 SampleRate As Long 'Hz
 Frames As Long 'Frame-Anzahl
 Duration As Long 'Länge (in Sekunden)
End Type

Private Function GetMP3Information(ByVal MP3File As String) As MP3Information
 Dim dIN As String
 Dim bitrate\_lookup(7, 15) As Integer
 Dim bitrate\_data As String
 Dim actual\_bitrate As Long
 Dim X As Integer, Y As Integer
 Dim mp3\_id As Double, mp3\_layer As Double, mp3\_prot As Double
 Dim mp3\_bitrate As Double, mp3\_freq As Double, mp3\_pad As Double
 Dim framesize As Double, total\_frames As Double, track\_length As Double
 bitrate\_data = bitrate\_data & "032,032,032,032,008,008,"
 bitrate\_data = bitrate\_data & "064,048,040,048,016,016,"
 bitrate\_data = bitrate\_data & "096,056,048,056,024,024,"
 bitrate\_data = bitrate\_data & "128,064,056,064,032,032,"
 bitrate\_data = bitrate\_data & "160,080,064,080,040,040,"
 bitrate\_data = bitrate\_data & "192,096,080,096,048,048,"
 bitrate\_data = bitrate\_data & "224,112,096,112,056,056,"
 bitrate\_data = bitrate\_data & "256,128,112,128,064,064,"
 bitrate\_data = bitrate\_data & "288,160,128,144,080,080,"
 bitrate\_data = bitrate\_data & "320,192,160,160,096,096,"
 bitrate\_data = bitrate\_data & "352,224,192,176,112,112,"
 bitrate\_data = bitrate\_data & "384,256,224,192,128,128,"
 bitrate\_data = bitrate\_data & "416,320,256,224,144,144,"
 bitrate\_data = bitrate\_data & "448,384,320,256,160,160,"
 For Y = 1 To 14
 For X = 7 To 5 Step -1
 bitrate\_lookup(X, Y) = Left(bitrate\_data, 3)
 bitrate\_data = Right(bitrate\_data, Len(bitrate\_data) - 4)
 Next
 For X = 3 To 1 Step -1
 bitrate\_lookup(X, Y) = Left(bitrate\_data, 3)
 bitrate\_data = Right(bitrate\_data, Len(bitrate\_data) - 4)
 Next
 Next
 Open MP3File For Binary As #1
 dIN = Input(4096, #1)
 filesize = LOF(1) 
 Close #1
 Do Until i = 4095
 i = i + 1
 d1 = Asc(Mid(dIN, i, 1))
 d2 = Asc(Mid(dIN, i + 1, 1))
 If d1 = &HFF And (d2 And &HF0) = &HF0 Then
 temp\_string = Mid(dIN, i + 1, 3)
 mp3bits\_string = ShiftBits(Mid(dIN, i + 1, 3))
 Exit Do
 End If
 dSHIFT = ShiftBits(Mid(dIN, i, 3))
 dd1 = Asc(Left(dSHIFT, 1))
 dd2 = Asc(Right(dSHIFT, 1))
 If dd1 = &HFF And (dd2 And &HF0) = &HF0 Then
 mp3bits\_string = Mid(dIN, i + 2, 3)
 Exit Do
 End If
 Loop
 mp3\_id = (&H80 And Asc(Left(mp3bits\_string, 1))) / 128
 mp3\_layer = (&H60 And Asc(Left(mp3bits\_string, 1))) / 32
 mp3\_prot = &H10 And Asc(Left(mp3bits\_string, 1))
 mp3\_bitrate = &HF And Asc(Left(mp3bits\_string, 1))
 mp3\_freq = &HC0 And Asc(Mid(mp3bits\_string, 2, 1))
 mp3\_pad = (&H20 And Asc(Mid(mp3bits\_string, 2, 1))) / 2
 actual\_bitrate = 1000 \* CLng((bitrate\_lookup((mp3\_id \* 4) Or mp3\_layer, mp3\_bitrate)))
 If mp3\_id = 0 Then
 GetMP3Information.ID = "MPEG-2"
 Else
 GetMP3Information.ID = "MPEG-1"
 End If
 Select Case mp3\_layer
 Case 1
 GetMP3Information.Layer = "Layer III"
 Case 2
 GetMP3Information.Layer = "Layer II"
 Case 3
 GetMP3Information.Layer = "Layer I"
 End Select
 GetMP3Information.Bitrate = actual\_bitrate
 Select Case (mp3\_id \* 4) Or mp3\_freq
 Case 0
 sample\_rate = 22050
 Case 1
 sample\_rate = 24000
 Case 2
 sample\_rate = 16000
 Case 4
 sample\_rate = 44100
 Case 5
 sample\_rate = 48000
 Case 6
 sample\_rate = 32000
 End Select
 GetMP3Information.SampleRate = sample\_rate
 framesize = ((144 \* actual\_bitrate) / sample\_rate) + mp3\_pad
 total\_frames = filesize / framesize
 track\_length = total\_frames / 38.5 '38.5 Frames pro Sekunde
 GetMP3Information.Frames = Int(total\_frames)
 GetMP3Information.Duration = Int(track\_length)
End Function

Private Function ShiftBits(dIN As String) As String
 Dim sd1 As Integer, sd2 As Integer, sd3 As Integer
 Dim do1 As Integer, do2 As Integer
 sd1 = Asc(Left(dIN, 1))
 sd2 = Asc(Mid(dIN, 2, 1))
 sd3 = Asc(Right(dIN, 1))
 do1 = ((sd1 And &HF) \* 16) Or ((sd2 And &HF0) / 16)
 do2 = ((sd2 And &HF) \* 16) Or ((sd3 And &HF0) / 16)
 ShiftBits = Chr(do1) + Chr(do2)
End Function


'Ein Aufruf koennte wiefolgt ausschauen

Dim MP3Info As MP3Information
MP3Info = GetMP3Information("C:\Dein.mp3")

ciao

MfG Alex

danke dir für den „denkanstoss“ :wink:
war wohl etwas übereifrig und daher die sache nicht ganz durchdacht :frowning:

mit der spieldauer und der restspielzeit bin ich auch schon zufrieden,
und dank dir läuft’s nun auch.

lg, charly
ciao

Hallo Charly,

aus genau diesem Grunde sollte man vorher einen PAP erstellen und nicht wie wild drauf lostippeln :s
Das führt frueher oder später zu Problemen und ist zum scheitern verurteilt :s

MfG Alex