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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.09.2009, 20:44   #1
Манжосов Денис :)
Участник клуба
 
Регистрация: 29.01.2008
Сообщений: 1,039
По умолчанию Проверка на остановку песни

Я использую для этих целей таймер с интервалом 3000 мс. Тоесть каждые 3 секунды проверяется остановилась ли песня или ещё играет. Если да, то переключиться на другую. Код:
Код:
  if BASS_ChannelIsActive(Channel) = BASS_ACTIVE_STOPPED then
   begin
    Stopped := false;
    BASS_ChannelStop(Channel);
    BASS_StreamFree(Channel);
    Channel := 0;
    if MusicList.ItemIndex = MusicList.Count - 1 then
     begin
      MusicList.ItemIndex := 0;
      PlayFile(MusicList.Items.Strings[MusicList.itemIndex]);
      lb_Title.Caption := ExtractFileName(MusicList.Items.Strings[MusicList.itemIndex]);
      exit;
     end;
    MusicList.ItemIndex := CurrentItemIndex + 1;
    if MusicList.ItemIndex <> MusicList.Count - 1 then Inc(CurrentItemIndex);
    MusicList.Selected[MusicList.ItemIndex];
    PlayFile(MusicList.Items.Strings[MusicList.ItemIndex]);
    lb_Title.Caption := ExtractFileName(MusicList.Items.Strings[MusicList.itemIndex]);
   end;
Вникать в него не нужно, просто показываю как идёт проверка. А вопрос в следующем:
Можно ли обойтись без таймера? К примеру перехватывать событие остановки проигрывания? Спасибо.
Манжосов Денис :) вне форума Ответить с цитированием
Старый 21.09.2009, 20:48   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

ну в Вашей же проге останавливается в опред момент?
например по нажатию кнопки...там и можно поймать
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 21.09.2009, 20:51   #3
Манжосов Денис :)
Участник клуба
 
Регистрация: 29.01.2008
Сообщений: 1,039
По умолчанию

Нет, всё идёт автоматом. Тоесть песня играет, пользователь не вмешивается.
P.S. То, что Вы предложили - слишком легко, я и сам бы это сделал ))
Манжосов Денис :) вне форума Ответить с цитированием
Старый 24.09.2009, 18:00   #4
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Я почти уверен что в BASS есть для этого событие, пройдись по исходникам компонента, ты ведь через TBASSPlayer работаешь?

А почему 3 секунды интервал? Сделай 500 мс и не будет задержки (среднее время задержки будет 250 мс = 1/4 секунды), это не большая нагрузка для процессора, можно сказать вообще не нагрузка.

Вот у тебя в коде
Код:
if BASS_ChannelIsActive(Channel) = BASS_ACTIVE_STOPPED then
функция BASS_ChannelIsActive проверяет состояние канала, значит этот канал незадолго до этого какая-то другая функция привела в состояние Stopped, т.е. присвоила чему-то там значение константы BASS_ACTIVE_STOPPED. Залезь в исходники (если это возможно) и посмотри, что эта функция проверяет, и где еще присваиваются эти значения.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 25.09.2009, 15:41   #5
Манжосов Денис :)
Участник клуба
 
Регистрация: 29.01.2008
Сообщений: 1,039
По умолчанию

Насчёт нагрузки на процессор это очень хорошо. Исправлю. Я не использую TbassPlayer, просто чистая библиотека bass.dll и заголовочный pas файл bass.pas. Можно пройтись по bass.pas и посмотреть там. Спасибо.
Манжосов Денис :) вне форума Ответить с цитированием
Старый 25.09.2009, 18:07   #6
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

я отправляю сообщение что трек закончился и выполняются отпределенные действия.

отправляй через PostMessage.
P.S. подсказка Bass_SetSync (что то такое я уже щас не вспомню)
ZuBy вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Узнать размер и длину песни Манжосов Денис :) Мультимедиа в Delphi 5 27.12.2011 03:23
Время воспроизведения песни Волк Мультимедиа в Delphi 8 02.06.2009 22:35
Название песни в медиа плэйере yulia Мультимедиа в Delphi 5 30.09.2008 19:25
Как убрать голос из песни? Ильич Мультимедиа в Delphi 20 30.05.2007 07:04