Тема: Bass
Показать сообщение отдельно
  #13  
Старый 14.10.2010, 20:49
Asinkrit Asinkrit вне форума
Местный
 
Регистрация: 29.10.2009
Сообщения: 446
Репутация: 271
По умолчанию

Посмотрел я модуль 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, там есть все что тебе нужно, так же смотри примеры, которые идут с библиотекой.
Ответить с цитированием