Форум: "Начинающим";
Текущий архив: 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