Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2013.10.06;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.003 c
2-1358407010
Cobalt
2013-01-17 11:16
2013.10.06
Почему компилируется?


2-1358341960
McLotos
2013-01-16 17:12
2013.10.06
Разбросать результат SQL-запроса по переменным


2-1358417243
Pcrepair
2013-01-17 14:07
2013.10.06
Замена указателей на Локал.Перем при работе функции в потоке


2-1358661812
N.Cage
2013-01-20 10:03
2013.10.06
Как убрать символы переноса в ячейке StringGrid


3-1293263111
dik59
2010-12-25 10:45
2013.10.06
Создание домена





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский