Hy,
kontrollierst du vor dem auslesen der Länge mit dem Befehl:
Delphi-Quellcode:
HRESULT GetCapabilities(
[out] DWORD *pCapabilities
);
ob das überhaupt möglich ist?
Möglich währen da folgende Werte:
Delphi-Quellcode:
AM_SEEKING_CanGetCurrentPos
The stream can report its current position. See Remarks.
AM_SEEKING_CanGetStopPos
The stream can report its stop position.
AM_SEEKING_CanGetDuration
The stream can report its duration.
Delphi-Quellcode:
var
dwCaps: DWORD;
MediaSeeking.GetCapabilities(dwCaps);
if (dwCaps and AM_SEEKING_CanGetDuration) then
begin;
//The stream can report its duration.
end;
Und wenn das dort schon Fehl schlägt...
...Mhhh dann müsste ich mir auch erstmal was einfallen lassen oO
Edit:
...Eine vergleichbare Technik müsste es bei DirectShow doch auch geben, oder nicht?
Also mir ist im Moment keine "vergleichbare Technik" bekannt! Damüsste ich auch erstmal Nachforschen...
Edit2:
Also zur not gibt es noch eine andere Möglichkeit, an die Länge der MP3 zu kommen, mit dem Umweg über das Interface "IMediaDet" (MediaDetails)
Delphi-Quellcode:
function GetMultimediaFileDuration(const Filename: AnsiString): Double;
var
MediaDet: IMediaDet;
begin
Result := 0;
if CoCreateInstance(CLSID_MediaDet, nil, CLSCTX_INPROC_SERVER,
IID_IMediaDet, MediaDet) = S_OK then
if MediaDet.put_Filename(Filename) = S_OK then
if MediaDet.put_CurrentStream(0) = S_OK then
if MediaDet.get_StreamLength(Result) <> S_OK then
Result := 0;
MediaDet := nil;
end;
Gibt dir die Länge der MP3 in Sekunden an!