Seite 1 von 1

Länge einer Mediendatei ermitteln [WinAPI]

Verfasst: 03.03.2011 22:11
von RSBasic
Mit diesem Code kann die Länge einer Audio-Datei ermitteln werden.
Falls jemand sowas braucht:

Code: Alles auswählen

EnableExplicit

Procedure GetAudioFileLength(Path$)
  Protected AudioFileLength$ = Space(256)
  
  ;Audio-Datei öffnen
  mciSendString_("open " + Chr(34) + Path$ + Chr(34) + " type MPEGVideo alias mp3audio", #Null, #Null, #Null)
  ;Länge der Audio-Datei ermitteln, Wert wird in Millisekunden als String zurückgegeben
  mciSendString_("status mp3audio length", @AudioFileLength$, 256, #Null)
  ;Geöffnete Audio-Datei schließen
  mciSendString_("close mp3audio", #Null, #Null, #Null)
  
  ProcedureReturn Val(AudioFileLength$)/1000
EndProcedure

MessageRequester("","Länge der Audio-Datei in Sekunden: "+Str(GetAudioFileLength("C:\...\Datei.mp3")),0);Formate getestet: wav, wma, mp3

;mciSendString: http://msdn.microsoft.com/en-us/library/dd757161%28v=vs.85%29.aspx
;Übersicht der Befehle: http://msdn.microsoft.com/en-us/library/dd743572%28v=vs.85%29.aspx
;open: http://msdn.microsoft.com/en-us/library/dd743638%28v=vs.85%29.aspx
;status: http://msdn.microsoft.com/en-us/library/dd798683%28v=vs.85%29.aspx
;close: http://msdn.microsoft.com/en-us/library/dd797784%28v=vs.85%29.aspx

Re: Länge einer Audio-Datei ermitteln [WinAPI]

Verfasst: 04.03.2011 16:14
von bobobo
geht bei mich auch mit ogg-zeug und avi-videos und mpg (da wird aber natürlich was falsches
zurückgeliefert), wmv

threadTitle sollte geändert werden 'Länge einer Multimediadatei ermitteln' oder so

Re: Länge einer Audio-Datei ermitteln [WinAPI]

Verfasst: 15.03.2011 21:45
von LoD
Bei manchen Liedern stürzt das Programm bei der Open-Anweisung in Zeile 7 einfach ab (Ungültiger Speicherzugriff)
Weiß jemand an was das liegt? Oder wie ich zumindest den Absturz verhindern kann?

Ein Beispiellied für den Fehler ist übrigens "Lords of the Sky" von Aeon 3, was man hier runterladen kann.

Re: Länge einer Audio-Datei ermitteln [WinAPI]

Verfasst: 15.03.2011 22:17
von ts-soft
Hier: http://msdn.microsoft.com/en-us/library ... 85%29.aspx
die Errorconstanten, sollten in PB vordefiniert sein.

Re: Länge einer Mediendatei ermitteln [WinAPI]

Verfasst: 15.03.2011 23:02
von LoD
Die Errorconstanten kenne ich, aber soweit komm ich gar nicht.
Das Programm stürzt bereits ab, wenn ich

Code: Alles auswählen

mciSendString_("open " + Chr(34) + Path$ + Chr(34) + " type MPEGVideo alias mp3audio", #Null, #Null, #Null)
mit dem Pfad zu einem der betroffenen Lieder ausführe...

Re: Länge einer Mediendatei ermitteln [WinAPI]

Verfasst: 15.03.2011 23:21
von c4s
Vielleicht ist diese Datei kein "MPEGVideo"?

Hiermit kannst du den richtigen Type herausfinden bzw. sehen ob deine Datei überhaupt unterstützt wird:

Code: Alles auswählen

Procedure.s MCITypeOfName(Filename.s)
	Protected Type.s = Space(#MAX_PATH)

	GetProfileString_("mci extensions", GetExtensionPart(Filename), "NotFound", @Type, #MAX_PATH)
	If Type = "NotFound" : Type = "" : EndIf

	ProcedureReturn Type
EndProcedure

Debug MCITypeOfName("test.abc")
Debug MCITypeOfName("test.wav")
Debug MCITypeOfName("test.mp3")

Re: Länge einer Mediendatei ermitteln [WinAPI]

Verfasst: 15.03.2011 23:40
von LoD
Als Type bekomme ich MPEGVideo. Ist wohl leider auch nicht die Lösung.
Der Fehler tritt nur bei einer handvoll Liedern auf, aber ich kann einfach keine Gemeinsamkeiten erkennen.
Keine Sonderzeichen im Pfad und andere Player/Taggingprogramme/... haben auch keine Probleme damit..

Re: Länge einer Mediendatei ermitteln [WinAPI]

Verfasst: 16.03.2011 08:13
von DarkDragon
Hast du irgendwelche dubiosen Codec Packs oder ffdshow installiert? Die sind fast alle miserabel programmiert, wodurch es sehr oft zu abstürzen kommt.

Re: Länge einer Mediendatei ermitteln [WinAPI]

Verfasst: 16.03.2011 12:35
von LoD
Daran liegts wohl! Ich arbeite zur Zeit am Computer meiner Freundin, weil mich meiner boykottiert. Da will ich jetzt nicht einfach die Codecs deinstallieren..
Aber nachdem der Code mit dem Lied auf einem anderen Computer nicht abstürzt, liegts auf jeden Fall am System.
Aber gibts ne Möglichkeit, dass ich den Absturz bei fehlerhaften Codecs irgendwie verhindern kann, ohne auf die MCI-Befehle verzichten zu müssen?


EDIT: Wen's interessiert:
Ich hab mich jetzt doch mal an die Codecs rangemacht und auch den Schuldigen ausfindig machen können. Es lag weder an ffdShow noch am dubiosen (K-Lite) Codecpack, sondern an der Nokia PC Suite, mit der meine Freundin ihr Handy synchronisiert. Warum Nokia dafür (anscheinend fehlerhafte) Codecs installieren muss, werd ich wohl nicht verstehen...

Das Problem ist somit nun gelöst und ich befürchte für meine obige Frage gibts wohl keine Lösung.
Trotzdem danke an euch