Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.01.2011, 22:48   #1
ZBEP
Форумчанин
 
Аватар для ZBEP
 
Регистрация: 23.03.2009
Сообщений: 334
По умолчанию Bass.dll событие после окончания воспроизведения.

Здравствуйте!
Скорее всего об этом уже писалось и в справке это по идее должно быть, но я не могу найти что-то.

В общем как, используя Bass.dll можно проверить закончилось ли воспроизведение трека, без использования таймера?

Сейчас делаю так:
Код:
var
  Form1             :TForm1;
  TreckNum        :integer;
  Muz                :HStream;
  TreckList         :TStringList;

procedure TForm1.SpisTreck(Sender: TObject);
var Fm: TSearchRec;
begin
  TreckList.Free;
  TreckList:=TStringList.Create;
  FindFirst(extractfilepath(paramstr(0))+'\Sound\*.mp3', 0, Fm);
  if Fm.name <> '' then
  begin
    TreckList.Add(Fm.name);
    while FindNext(Fm)=0 do TreckList.Add(Fm.name);
  end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
TreckNum:=TreckNum+1;
if TreckNum>TreckList.Count-1 then TreckNum:=0;
Muz:=Bass_StreamCreateFile(false,PChar('Sound\'+TreckList.Strings[TreckNum]),0,0,BASS_UNICODE or BASS_STREAM_AUTOFREE);
BASS_ChannelPlay(Muz,false);
Timer1.Interval:=Trunc(BASS_ChannelBytes2Seconds(muz,BASS_ChannelGetLength(muz,0)))*1000;
end;
Получаю длину трека, присваиваю интервалу таймера это значение в мс и затем после заданного промежутка времени таймер переключает на следующий трек.
Но как это сделать без таймера, не знаю.

Последний раз редактировалось ZBEP; 28.01.2011 в 03:23.
ZBEP вне форума Ответить с цитированием
Старый 28.01.2011, 05:41   #2
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

если сам хочешь проверить, то дергай периодически BASS_StreamGetFilePosition(), а если хочешь, чтобы басс тебя дернул, то:

Код:
function BASS_StreamCreateFileUser(system, flags: DWORD; var procs: BASS_FILEPROCS; user: Pointer): HSTREAM; stdcall; external bassdll;

  BASS_FILEPROCS = record
    close: FILECLOSEPROC;
    length: FILELENPROC;
    read: FILEREADPROC;
    seek: FILESEEKPROC;
  end;
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 28.01.2011, 09:41   #3
ZBEP
Форумчанин
 
Аватар для ZBEP
 
Регистрация: 23.03.2009
Сообщений: 334
По умолчанию

veniside, Спасибо! То что нужно!
ZBEP вне форума Ответить с цитированием
Старый 29.01.2011, 11:19   #4
Exception
Пользователь
 
Регистрация: 31.12.2007
Сообщений: 37
По умолчанию

Достаточно BASS_ChannelSetSync + BASS_SYNC_END.
Exception вне форума Ответить с цитированием
Старый 30.01.2011, 04:06   #5
ZBEP
Форумчанин
 
Аватар для ZBEP
 
Регистрация: 23.03.2009
Сообщений: 334
По умолчанию

Exception, вообще шикарно!
Спасибо!

Теперь и на сайте нашел темы похожие: http://programmersforum.ru/showthread.php?p=428991

Последний раз редактировалось ZBEP; 30.01.2011 в 05:26.
ZBEP вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кем я могу работать после окончания учебы помимо как прогрммистом Kobe Помощь студентам 7 13.09.2010 03:44
Закрытие приложения после воспроизведения boostman Мультимедиа в Delphi 2 29.11.2009 13:13
Ошибка при выхове функций Bass.dll из другой DLL SalasAndriy Общие вопросы Delphi 7 21.10.2009 23:36
Продолжение воспроизведения, bass.dll BredoZavR Мультимедиа в Delphi 4 06.06.2009 18:46
Ошибка после воспроизведения mp3-мелодий Митяй2 Мультимедиа в Delphi 14 21.10.2007 11:30