Посмотрел я модуль Bass, и вот что я там нашел:
Код:
// BASS_ChannelIsActive return values
BASS_ACTIVE_STOPPED = 0;
BASS_ACTIVE_PLAYING = 1;
BASS_ACTIVE_STALLED = 2;
BASS_ACTIVE_PAUSED = 3;
...
function BASS_ChannelIsActive(handle: DWORD): DWORD; stdcall;external bassdll;
Ну и соответственно вывод, код на основе предыдущего поста:
Код:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if BASS_ChannelIsActive(MusicStream) in [BASS_ACTIVE_STALLED, BASS_ACTIVE_STALLED] then
begin
//думаю что именно BASS_ACTIVE_STALLED говорит о том что закончилась играть предыдущая песня., но не уверен.
//if BASS_ChannelIsActive(MusicStream) = BASS_ACTIVE_PLAYING then Exit;
//в таком случае, будет пытаться воспроитзводить всегда, даже когда пользователь не захочет этого, если конечно timer.enabled = true
if ListBox1.ItemIndex<ListBox1.Count-1 then
ListBox1.ItemIndex:=ListBox1.ItemIndex+1;
else //зацикливание плейлиста
ListBox1.ItemIndex:=0;
Play;
end;
end;
Есть недостаток использования таймера, советую включать таймер (enabled:=true) при старте пролигрывания первой песни, и отключать при нажатии кнопки стоп или закрытии приложения.
Смотри модуль bass.pas, там есть все что тебе нужно, так же смотри примеры, которые идут с библиотекой.