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

Вниз

MediaPlayer   Найти похожие ветки 

 
aka   (2013-01-17 10:42) [0]

Здравствуйте, делаю задание - создание MP3 плеера. Написал рекурсивную процедуру заполнения списка проигрывания, но работает очень медленно из-за MediaPlayer.Open;


type

PMp3File = ^TMp3File;
TMp3File = record
 path: WideString;
 name: WideString;
 intLeng: Integer;
 strLeng: String[10];
end;

var
 Mp3FileList: TList;
 AMp3File: PMp3File;

procedure TMainForm.AddFolderToList(const Path: String);
var
 searchResult : TSearchRec;
begin
 if FindFirst(Path + "\*.mp3", faAnyFile, searchResult) = 0 then
 begin
   repeat
     New(AMp3File);
     AMp3File^.path := Path;
     AMp3File^.name := searchResult.Name;

     MediaPlayer.FileName := Path +"\"+ searchResult.Name;
     AMp3File^.strLeng := FormatDateTime("hh:nn:ss",(MediaPlayer.Length div 1000)/(24*60*60));

     MediaPlayer.Open;
     AMp3File^.intLeng := MediaPlayer.Length;

     ListBox.Items.Add(AMp3File^.name + " - " + AMp3File^.strLeng);
     Mp3FileList.Add(AMp3File);

     Application.ProcessMessages;
   until FindNext(searchResult) <> 0;
 end;

 if FindFirst(Path + "\*", faDirectory, searchResult) = 0 then
 begin
   repeat
     if(searchResult.Name <> ".") and (searchResult.Name <> "..") then
       AddFolderToList(Path + "\"+searchResult.Name);
   until FindNext(searchResult) <> 0;
 end;
end;

AddFolderToList("D:\Music");


Все дело в том, что нужно узнать время воспроизведения файла, а для этого нужно подставить плееру имя файла, открыть его и получить время.
MediaPlayer.FileName := Path +"\"+ searchResult.Name;
MediaPlayer.Open;
AMp3File^.intLeng := MediaPlayer.Length;


Но работает этот прием очень медленно.

Можно как нибудь быстрее?


 
QAZ10   (2013-01-17 10:53) [1]

при таком "задании" ты должен сам написать декодер,а не медиаплеер подсовывать


 
Vlad   (2013-01-17 11:47) [2]


> QAZ10   (17.01.13 10:53) [1]
>
> при таком "задании" ты должен сам написать декодер,а не
> медиаплеер подсовывать

Ничего не должен.


 
Anatoly Pogoretsky   (2013-01-17 12:00) [3]

> Vlad  (17.01.2013 11:47:02)  [2]

Должен Феде рубль


 
brother ©   (2013-01-17 12:04) [4]

откажись от MediaPlayer и поробуй использовать bass.dll - все проблеммы отпадут!


 
aka   (2013-01-17 12:27) [5]


> brother ©   (17.01.13 12:04) [4]

Ну ладно, попробую


 
brother ©   (2013-01-17 12:43) [6]

те уговорил?)


 
aka   (2013-01-17 13:30) [7]


> brother ©   (17.01.13 12:43) [6]

Ну спасибо, работает быстро как молния.


procedure TMainForm.AddFolderToList(const Path: String);
var
 searchResult : TSearchRec;
 Channel: dword;
 ChanLeng: Int64;
 AllTime: Int64;
 H, M, S: Integer;
begin
 if FindFirst(Path + "\*.mp3", faAnyFile, searchResult) = 0 then
 begin
   repeat
     New(AMp3File);
     AMp3File^.path := Path;
     AMp3File^.name := searchResult.Name;

     Channel := BASS_StreamCreateFile(false, pChar(Path +"\"+ searchResult.Name), 0, 0, 0);
     ChanLeng := BASS_ChannelGetLength(Channel,BASS_POS_BYTE);
     AllTime := Trunc(BASS_ChannelBytes2Seconds(Channel, ChanLeng));

     AMp3File^.intLeng := AllTime; // second
     H := AllTime div 3600;
     M := (AllTime - H * 3600) div 60;
     S := AllTime - H * 3600 - M * 60;
     AMp3File^.strLeng := Format("%.2d:%.2d:%.2d", [H, M, S]);

     ListBox.Items.Add(AMp3File^.name + " - " + AMp3File^.strLeng);
     Mp3FileList.Add(AMp3File);

     Application.ProcessMessages;
   until FindNext(searchResult) <> 0;
 end;

 if FindFirst(Path + "\*", faDirectory, searchResult) = 0 then
 begin
   repeat
     if(searchResult.Name <> ".") and (searchResult.Name <> "..") then
       AddFolderToList(Path + "\"+searchResult.Name);
   until FindNext(searchResult) <> 0;
 end;
end;



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

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

Наверх




Память: 0.48 MB
Время: 0.009 c
6-1269649035
defen
2010-03-27 03:17
2013.10.06
демодуляция сигнала с GMSK модуляцией


2-1358365235
lordalexander
2013-01-16 23:40
2013.10.06
не могу понять почему ошибка


15-1367086920
О-Сознание
2013-04-27 22:22
2013.10.06
Поиск на Хабре.


15-1366917087
О-Сознание
2013-04-25 23:11
2013.10.06
VCL построена на "сигналах-слотах"?


2-1358698446
Pcrepair
2013-01-20 20:14
2013.10.06
контрол имеющий пару строка-число