Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.12.12;
Скачать: CL | DM;

Вниз

Длительность музыкальных и видеофайлов   Найти похожие ветки 

 
KADAN ©   (2004-09-10 23:17) [0]

Доброго здравия всем. Я написал функцию, можно сказать 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;


 
Cardinal ©   (2004-09-11 20:24) [1]

Привет. Код не мой, но, может, тебе он чем-нибудь да поможет:

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;


---
--


 
Рыба ©   (2004-09-11 22:10) [2]

По сабжу: читать заголовки файлов. В большинстве должна прописываться длительность. Для каждого формата файлов свой формат заголовков. Так что читай информацию по форматам.

А вот это

>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]);


 
Рыба ©   (2004-09-11 22:24) [3]

Вот полезная ссылка
http://www.nvkz.kuzbass.net/vitalicite/mp3_descr_rus.htm


 
Рыба ©   (2004-09-11 22:28) [4]

Забыл запятую
Result := Format(%d:%d:%d",


 
Рыба ©   (2004-09-11 22:29) [5]

И кавычку :))))
Result := Format("%d:%d:%d",

Поря на пеньсию...


 
KADAN ©   (2004-09-12 22:01) [6]

Что неужели никто не знает ничего лучшего?

to Cardinal, Рыба: читайте вопрос.


 
KADAN ©   (2004-09-13 11:19) [7]

Рыба, прошу прощения, погорячился.

> читать заголовки файлов

оказалось полезно



Страницы: 1 вся ветка

Текущий архив: 2004.12.12;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.034 c
14-1100855016
Ilya___
2004-11-19 12:03
2004.12.12
Подскажите пожалуйста. правильно ли я делаю?


8-1094660317
AzIN
2004-09-08 20:18
2004.12.12
TMediaPlayer


8-1094910180
InfMag
2004-09-11 17:43
2004.12.12
Форматы данных


1-1101389411
Layner
2004-11-25 16:30
2004.12.12
Скролы на TPanel


1-1101738973
Гриша
2004-11-29 17:36
2004.12.12
мемо