Перейти к содержанию
Fire Monkey от А до Я
  • 0

Событие завершения воспроизведения файла.


Alex7wrt

Вопрос

Всем здравствуйте!

Необходимо отлавливать событие, когда музыкальный трек заканивает воспроизведение (причем, определять нужно точно). В медиаплеере такого события не нашел. Все, что придумал - это в таймере с маленьким интервалом (10-50 мс) выполнять проверку TMediaplayer.State = TMediaState.Stopped, но это довольно ресурсоемко, и все равно интервал великоват. Есть ли способ сделать так, чтобы по окончанию воспроизведения трека генерировалось это событие?

Или есть ли нересурсоемкий способ зациклить воспроизведение трека с минимальной задержкой между циклами?

Изменено пользователем Alex7wrt
Ссылка на комментарий

Рекомендуемые сообщения

  • 0

Не знаю, как у вас, а у меня на ХЕ7 данный прием не сработал бы. Плеер при окончании трека не переводится в состояние TMediaState.Stopped. Поэтому я проверяю позицию каретки плеера на равенство с длиной трека (ЕМНИП, Ярослав когда-то описывал этот метод на форуме). Но если ставить интервалы таймера 10-50мс, то отрабатывает вполне себе быстро, хотя, конечно, у вас может быть специфика программы особенная.

Ссылка на комментарий
  • 0

Спасибо за ответ. Действительно, часто не переводится в Stopped. Как это исправить меня также интересует. Сравнением Duration с CurrentTime у меня сейчас и реализовано, но думал, что можно сделать лучше...

Изменено пользователем Alex7wrt
Ссылка на комментарий
  • 0
procedure TfMain.Timer1Timer(Sender: TObject);
begin

  if not(m.State in [TMediaState.Unavailable, TMediaState.Stopped]) then
    exit;

  m.CurrentTime := 0;
  m.filename :=GetNextSoundFile;
  m.Volume := 1;
  m.Play;  

end;

Такой код работает под Android. Под виндой не работает.

 

Также, если выводить в лог 

    Memo1.Lines.Add(m.Duration.ToString);
    Memo1.Lines.Add(m.CurrentTime.ToString);

То что под Андроидом, что под виндой, значения нулевые. То есть на них опираться нельзя.

 

Помогите, как под виндой убедиться, что файл отыграл?

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...