Odtwarzacz jest tylko jedna z form większego projektu, wiec nie musi być tak rozbudowany, dlatego robię go na Mplayerze a nie Bass itp.
Docelowo zależało mi na tym by wczytywał przy starcie utwory (kilkaset) a potem z nich można było wyselekcjonować kilka list odtwarzania, wywołanych z MMenu.
W tej chwili cały kod wygląda tak następująco (wyjadacze pewnie się pośmieją (jestem zielony :)) proszę o uwagi, sugestie)
procedure TOdtwarzacz.Play;
begin
mediaPlayer.FileName:= music_List.Items.Strings[music_List.ItemIndex];
mediaPlayer.Open;
ScrollBar2.Max := MediaPlayer.Length;
mediaPlayer.Play;
end;
procedure TOdtwarzacz.OtworzPliki(OdtworzOdRazu : Boolean);
var
i: Integer;
begin
if (OpenD.Execute) and(music_List.Items.Count > 0)then
music_List.Items.Clear;
for i:= 0 to OpenD.Files.Count-1 do
begin
music_List.Items.Add(OpenD.Files[i]);
end;
if(OdtworzOdRazu)then
begin
music_List.ItemIndex:= 0;
Play;
end;
end;
procedure TOdtwarzacz.Otwrzplik1Click(Sender: TObject);
begin
OtworzPliki(True);
end;
procedure TOdtwarzacz.Dodajpliki1Click(Sender: TObject);
begin
OtworzPliki(False);
end;
procedure TOdtwarzacz.mediaPlayerNotify(Sender: TObject);
begin
if mediaPlayer.NotifyValue = nvSuccessful then
begin
if(Cshuffle.checked)then
begin
LosujUtwory;
end
else
begin
if(music_List.ItemIndex = music_List.Items.Count-1)then
music_List.ItemIndex:= 0
else
music_List.ItemIndex:= music_List.ItemIndex+1;
Play;
end;
end;
end;
procedure TOdtwarzacz.Button1Click(Sender: TObject);
begin
Play;
end;
procedure TOdtwarzacz.Button2Click(Sender: TObject);
begin
mediaPlayer.pauseonly;
end;
procedure TOdtwarzacz.Button8Click(Sender: TObject);
begin
mediaplayer.Play;
end;
procedure TOdtwarzacz.Button3Click(Sender: TObject);
begin
mediaplayer.Stop;
end;
procedure TOdtwarzacz.Button5Click(Sender: TObject);
begin
music_List.ItemIndex:= music_List.ItemIndex+1;
play;
end;
procedure TOdtwarzacz.Button4Click(Sender: TObject);
begin
music_List.ItemIndex:= music_List.ItemIndex-1;
play;
end;
procedure TOdtwarzacz.Button9Click(Sender: TObject);
begin
if(music_List.Items.Count > 0)then
music_List.Items.Clear
end;
procedure TOdtwarzacz.Button6Click(Sender: TObject);
begin
if(music_List.Items.Count > 0)then
music_list.DeleteSelected;
end;
Procedure TOdtwarzacz.LosujUtwory;
begin
Randomize;
music_list.ItemIndex:= Random(music_list.Items.Count + 1);
play;
end;
procedure SetWavVolume(Lewy,Prawy:Byte);
begin
waveOutSetVolume(WAVE_MAPPER, Integer((Lewy shl 24) or (Prawy shl 8 )));
end;
procedure SetCDVolume(Lewy,Prawy:Byte);
begin
auxSetVolume(0, Integer((Lewy shl 24) or (Prawy shl 8 )));
end;
procedure TOdtwarzacz.ScrollBar1Change(Sender: TObject);
begin
form1.ProgressBar1.Position := ScrollBar1.Position;
if ScrollBar1.Position = 60 then WaveOutSetVolume(0, $ffffffff)
else WaveOutSetVolume(0,$ff*ScrollBar1.Position*1024*$ff);
end;
procedure TOdtwarzacz.Timer1Timer(Sender: TObject);
begin
If MediaPlayer.FileName = '' Then Exit;
ScrollBar2.Position := MediaPlayer.Position;
end;
procedure TOdtwarzacz.ScrollBar2Scroll(Sender: TObject;
ScrollCode: TScrollCode; var ScrollPos: Integer);
begin
MediaPlayer.Position := ScrollBar2.Position;
mediaplayer.Play;
end;
procedure TOdtwarzacz.Button7Click(Sender: TObject);
begin
ScrollBar1.Position:= 0
end;
procedure Todtwarzacz.listfiles(dir, mask: string);
var
rec: TSearchRec;
found: Integer;
begin
if dir[Length(dir)] <> '\' then dir := dir + '\';
found := findfirst(dir + mask, faAnyFile, rec);
try
Music_list.ScrollWidth := 0;
Screen.Cursor := crAppStart;
while found = 0 do
begin
Application.ProcessMessages;
if (rec.Attr and faDirectory <= 0) then
music_list.Items.Add(dir + rec.Name);
//Music_list.Items.Add(ExtractFileName(dir + rec.Name));
found := findnext(rec);
end;
finally
findclose(rec);
end;
found := findfirst(dir + '*.*', faAnyFile, rec);
try
while found = 0 do
begin
if (rec.Attr and faDirectory > 0) and (rec.Name[1] <> '.') then
ListFiles(dir + rec.Name, mask);
found := findnext(rec);
end;
finally
Screen.Cursor := crDefault;
Label3.Caption := 'Znalezionych plików mp3 - ' + inttostr(Music_list.Items.Count);
findclose(rec);
end;
end;
procedure TOdtwarzacz.FormCreate(Sender: TObject);
begin
ListFiles('d:\muzyka' ,'*.mp3');
ScrollBar1.Position:= 30;
end;
end.