Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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


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;


---
--


Наверх

Титульная страница Поиск, карта сайта Написать письмо