![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Длительность музыкальных и видеофайлов
KADAN © (2004-09-10 23:17:00)Доброго здравия всем. Я написал функцию, можно сказать cписал из медиаплеера, но она это делает очень медленно, приходится открывать файл (MCI_OPEN), а видеофайлы открываются долго. Вопрос, можно ли это провернуть как-то побыстрее?
Код:
function GetDuration(Filename:string):string;
var OpenParm: TMCI_Open_Parms;
StatusParm: TMCI_Status_Parms;
SetParm:TMCI_Set_Parms;
Error:Cardinal;
errstring:string;
begin
setlength(errstring,256);
FillChar(OpenParm, SizeOf(TMCI_Open_Parms), 0);
OpenParm.lpstrDeviceType := '';
OpenParm.lpstrElementName := PChar(Filename);
Error := mciSendCommand(0, mci_Open, mci_wait or MCI_OPEN_ELEMENT, Longint(@OpenParm));
if not boolean(error) then begin
SetParm.dwTimeFormat:=longint(tfMilliseconds);
mciSendCommand( OpenParm.wDeviceID, mci_Set, mci_Set_Time_Format, Longint(@SetParm)); //извиняюсь, что без проверки Error
StatusParm.dwItem := mci_Status_Length;
Error := mciSendCommand(OpenParm.wDeviceID, mci_Status, mci_wait or mci_status_item, Longint(@StatusParm))
end else begin
mciGetErrorString(error,pchar(errstring), 255);
showmessage(errstring);
result:='00:00:00';
exit;
end;
if boolean(error) then begin
mciGetErrorString(error,pchar(errstring), 255);
showmessage(errstring);
result:='00:00:00';
end else result:=inttostr(StatusParm.dwReturn div (1000*60*60))+':'+inttostr((StatusParm.dwReturn mod (1000*60*60)) div (1000*60))+':'+inttostr((StatusParm.dwReturn mod (1000*60)) div 1000);
mciSendCommand( OpenParm.wDeviceID, mci_Close, 0, 0);
end;
KADAN (2004-09-13 11:19:00) [1]Рыба, прошу прощения, погорячился.
> читать заголовки файлов
оказалось полезно
KADAN (2004-09-12 22:01:00) [2]Что неужели никто не знает ничего лучшего?
to Cardinal, Рыба: читайте вопрос.
Рыба (2004-09-11 22:29:00) [3]И кавычку :))))
Result := Format( '%d:%d:%d',
Поря на пеньсию...
Рыба (2004-09-11 22:28:00) [4]Забыл запятую
Result := Format(%d:%d:%d' ,
Рыба (2004-09-11 22:24:00) [5]Вот полезная ссылка
http://www.nvkz.kuzbass.net/vitalicite/mp3_descr_rus.htm
Рыба (2004-09-11 22:10:00) [6]По сабжу: читать заголовки файлов. В большинстве должна прописываться длительность. Для каждого формата файлов свой формат заголовков. Так что читай информацию по форматам.
А вот это
>result:=inttostr(StatusParm.dwReturn div (1000*60*60))+':'+inttostr((StatusParm.dwReturn mod (1000*60*60)) div (1000*60))+':'+inttostr((StatusParm.dwReturn mod (1000*60)) div 1000);
Лучше заменить на
with StatusParm do
Result := Format(%d:%d:%d' [dwReturn div 3600000, (dwReturn mod 3600000) div 6000, (dwReturn mod 60000) div 1000]);
Cardinal (2004-09-11 20:24:00) [7]Привет. Код не мой, но, может, тебе он чем-нибудь да поможет:
procedure TForm1.Button1Click(Sender: TObject);
begin
MediaPlayer1.TimeFormat := tfFrames;
ShowMessage('Number of frames = ' + IntToStr(MediaPlayer1.Length));
MediaPlayer1.TimeFormat := tfMilliseconds;
ShowMessage('Number of milliseconds = ' + IntToStr(MediaPlayer1.Length));
end;
---
--