![]() |
Re: DSPack : Länge von Lied vor Abspielen herausbekommen
Eben doch, da MCI auf 16 Bit aufsetzt und das
![]() |
Re: DSPack : Länge von Lied vor Abspielen herausbekommen
Zitat:
Dazu reicht Error := mciSendString('status movie time format', Data, 128, 0); getTimeFormat := Data Das ist alles. Data ist ein String wobei 128 der rückgabe wert des Strings in einer länge von 128 ist. Und Songs mit einer größe von 2GB hab ich noch nicht gesehen. :mrgreen: :zwinker: EDIT: Ergänzung:
Delphi-Quellcode:
Error gibt den wert 0 zurück wenn alles in ordnung.
function getLengthInMS; string;
Var Error : Integer: Data : string; begin Error := mciSendString('set movie time format ms', 0, 0, 0) Error := mciSendString('status movie length', Data, 128, 0) Result := Data; end; Geschrieben nicht getestet! gruss |
Re: DSPack : Länge von Lied vor Abspielen herausbekommen
Bei AVIs gilt 1 GB Beschränkung :zwinker:
Und wer sagt, das sich die Nutzer nur Musikvideos ansehen? :stupid: Ich habe Filme, die über 1 GB sind :mrgreen: Zitat:
Der Typ Data muß PChar oder ein Array sein. Rückgabewert wird nicht überprüft. Semikolon vergessen :mrgreen: "Movie" ist der Aliasname :wink: |
Re: DSPack : Länge von Lied vor Abspielen herausbekommen
Zitat:
translated from Vb ;) muss noch was lernen.! :wall: gruss |
Re: DSPack : Länge von Lied vor Abspielen herausbekommen
Und wie wendet man die Prozedur korrekt an ? Ich habe eine normalerweise funktionierende Überprüfung eingebaut, ob es eine Audio oder Videodatei ist und ab diesem Zeitpunkt knallt es bei Application.Run. Der Debugger ist duch alles durch und beim Run bleibt der Debugger in einer Schleife hängen. Deshalb weiß ich nicht ansatzweise, wo der Fehler liegt.
Nachtrag: Ich weiß jetzt wo der Fehler liegt:
Delphi-Quellcode:
Was tun ?
Result := Data;
Der Fehler tritt übrigens beim Anwendungsstart auf, wenn die zuletzt in der Playlist gewesenen Lieder ausgelesen werden (aus Playlist). Ich habe mit Absicht nur Videos in der Playlist stehen, welche zu Anfang geladen wird. |
Re: DSPack : Länge von Lied vor Abspielen herausbekommen
Schick mir dein Teil nochmal das Sample ..
Baue dir dann Heute .. Morgen eine funktionierende Abfrage ein, wenn ich das kann ;) gruss |
Re: DSPack : Länge von Lied vor Abspielen herausbekommen
Abend!
Du solltest Dateinamen in das 8+3 Format wandeln :wink: , da sonst MCI bei zu langen Dateinamen crasht. :stupid: Hier ein Auszug von meiner Komponente, welche MCI nutzt.
Delphi-Quellcode:
Grüßle!
...
CloseMedia; FIDString:='SMC'+IntToStr(Random(16777216)); If UpperCase(ExtractFileExt(FileName))='.CDA' then goto OpenTrack; OpenFile: // Nur im 8+3 Dateiformat öffnen, Dateienamen mit mehr als 64 Zeichen lassen MCI crashen! i:=mciSendString(PChar('open "'+SExtractShortFileName(FFileName)+'" alias '+FIDString), nil, 0, TSMCForm(SMCForm).Handle); If i<>0 then begin ShowErrorMessage(i); SetLastError(i); Exit; end; mciSendString(PChar('status "'+FIDString+'" length '), PC, 255, 0); FFrames:=StrToIntDef(PC, 0); mciSendString(PChar('status "'+FIDString+'" nominal frame rate'), PC, 255, 0); FFrameRate:=StrToIntDef(PC, 0) / 1000; Goto Resume; mciSendString(PChar('capability "'+FIDString+'" has video'), PC, 255, 0); FIsVideoDevice:=(PC='true'); mciSendString(PChar('capability "'+FIDString+'" has audio'), PC, 255, 0); FIsAudioDevice:=(PC='true'); // Test ob Audio im geladenen Media ist, falls dies ein Video ist // Achtung: Muß vor SetAudio sein ! If FIsVideoDevice then begin mciSendString(PChar('status "'+FIDString+'" audio'), PC, 255, 0); FIsAudioDevice:=(PC='on'); end; FFileName:=FileName; SavedMode:=smcNotReady; SendString('set', 'time format ms'); If Assigned(FOnGetDisplayHandle) then FOnGetDisplayHandle(Self, FDisplayHandle); SetDisplayHandle(FDisplayHandle); // Video Größe If FIsVideoDevice then begin mciSendString(PChar('where "'+FIDString+'" source '), PC, 255, 0); s:=Copy(PC, 5, 255); If s<>'' then begin For i:=1 to System.Length(s) do If s[i]=' ' then begin FVideoWidth:=StrToIntDef(Copy(s, 1, i-1), 0); FVideoHeight:=StrToIntDef(Copy(s, i+1, System.Length(s)-i), 0); Break; end; end; FDisplayRect:=Rect(0, 0, FVideoWidth, FVideoHeight); end; FDisplayWidth:=FVideoWidth; FDisplayHeight:=FVideoHeight; // Umgehen eines MCI Bug's bei .MP3 und .WMA If FIsVideoDevice then if (FVideoWidth<4) or (FVideoHeight<4) then FIsVideoDevice:=False; If Assigned(FOnSetDisplayRect) then try FOnSetDisplayRect(Self); except end; If FIsVideoDevice then SetDisplaySize(FDisplayRect, FStretchToWindow); If not FAutoPlay then UpdateDisplay; If not FPlayAudio then DisableAudio; If not FPlayVideo then DisableVideo; mciSendString(PChar('status "'+FIDString+'" length '), PC, 255, 0); FLength:=StrToIntDef(PC, 0); mciSendString(PChar('set "'+FIDString+'" seek exactly on'), PC, 255, TSMCForm(SMCForm).Handle); If FSpeed<>1000 then SetSpeed(FSpeed); DoPlay: If FAutoPlay then Play; ... |
Re: DSPack : Länge von Lied vor Abspielen herausbekommen
Kannst du mir auch noch sagen, was ich davon überhaupt in mein Testprogramm einbauen kann ? Da sind so viele Zeilen, mit denen ich überhaupt nichts anfangen kann, drinnen (so ist das nunmal bei Codeausschnitten).
|
Re: DSPack : Länge von Lied vor Abspielen herausbekommen
Hat es schon mal jemand mit IMediaDet probiert? Dieses Interface ist dafür gedacht, die Länge und evtl. noch ein paar weitere Infos von einer Mediadatei herauszubekommen.
Delphi-Quellcode:
Aufrufen mit:
function GetMediaLength(const AFileName: WideString): Double;
var MediaDet: IMediaDet; hr: HResult; begin hr := CoCreateInstance(CLSID_MediaDet, nil, CLSCTX_INPROC_SERVER, IID_IMediaDet, MediaDet); if Succeeded(hr) then begin MediaDet.put_Filename(AFilename); MediaDet.get_StreamLength(Result); end else Result := -1; MediaDet := nil; end;
Delphi-Quellcode:
I := GetMediaLength('E:\demo.avi');
ShowMessage('Länge: ' + FloatToStr(i) + ' Sekunden'); |
Re: DSPack : Länge von Lied vor Abspielen herausbekommen
Und was braucht und woher bekommt man die dazugehörigen Sachen ? Ich hoffe, dass man MediaDet nicht mitschicken muss.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz