Главная страница
    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-1358365235
lordalexander
2013-01-16 23:40
2013.10.06
не могу понять почему ошибка


15-1367267405
Юрий
2013-04-30 00:30
2013.10.06
С днем рождения ! 30 апреля 2013 вторник


15-1366662603
Юрий
2013-04-23 00:30
2013.10.06
С днем рождения ! 23 апреля 2013 вторник


15-1366835403
Юрий
2013-04-25 00:30
2013.10.06
С днем рождения ! 25 апреля 2013 четверг


4-1267109067
davinchi
2010-02-25 17:44
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский