Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 5 137

/ вопрос открыт /

Здравствуйте! Я сделал проигрыватель, все относительно стабильно работает, но нет функции которая запускает следующий трек по окончании предыдущего. Подскажите пожалуйста как это реализовать. За ранее спасибо!!!!

Loki05 Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Loki05 (статус: Посетитель)
Вопрос отправлен: 29 марта 2011, 20:49
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: F.@.E.R

Здравствуйте, Loki05!
Переходе на следующий трек можно осуществить простымо способом. Для этого нам понадобится объект TTimer и написать там следующий код.

Приложение:
  1. begin if mediaplayer1.length = mediaplayer1.position then
  2.  
  3. End;


Ответ отправил: F.@.E.R (статус: 1-ый класс)
Время отправки: 30 марта 2011, 02:41


Мини-форум вопроса

Всего сообщений: 11; последнее сообщение — 31 марта 2011, 00:32; участников в обсуждении: 4.
AlexMPEI

AlexMPEI (статус: 1-ый класс), 29 марта 2011, 21:27 [#1]:

есть 2 способа:
1) динамически формировать плейлист WMP, тогда все как раз само будет делаться
2) подписаться на событие StateChanged от WMP и когда придет стэйт стоп подсовывать WMP следующий трек для проигрывания.

29 марта 2011, 21:35: Вопрос перемещён из тематического раздела Delphi » Общие вопросы по программированию в раздел Delphi » Мультимедийные приложения модератором Ерёмин А.А.

Loki05

Loki05 (статус: Посетитель), 29 марта 2011, 21:51 [#2]:

AlexMPEI: можно про 2 способ подробнее и желательно с примерами кода, а то я так не очень представляю себе это
Loki05

Loki05 (статус: Посетитель), 29 марта 2011, 21:52 [#3]:

Только если что у меня простой компонент MediaPlayer Delphi 7
AlexMPEI

AlexMPEI (статус: 1-ый класс), 29 марта 2011, 22:56 [#4]:

1)
WindowsMediaPlayer1.currentPlaylist. ...
Это текущий плэйлист WMP. у него там полно свойств и функций - добавление, удаление, очстка, количество и т.п. Его можно очистить
WindowsMediaPlayer1.currentPlaylist.clear;
потом добавить нужные треки
WindowsMediaPlayer1.currentPlaylist.insertItem(...);
свои примеры сейчас найти не могу. Тут все просто. единственное что оперирование идет не путями или именами файлов, а объектами IWMPMedia, а уже у этого объекта куча полезных свойств, в том числе и sourceURL.
2)
у WMP есть событие PlayStateChange(ASender: TObject;
NewState: Integer) через NewState мы получаем текущее состояние WMP. Если проишло NewState = wmppsStopped, значит проигрывание кончилось и можно сказать дать плееру команду играть новый файл, только это лучше делать через таймер, а не в этой функции.
Loki05

Loki05 (статус: Посетитель), 30 марта 2011, 18:26 [#5]:

Подскажите пожалуйста почему когда я на таймер вешаю код: begin if mediaplayer1.length = mediaplayer1.position then
у меня выскакивает ошибка сразу после запуска приложения, а кампелятор не чего не находит
Вадим К

Вадим К (статус: Академик), 30 марта 2011, 18:58 [#6]:

нужно проверить в таймере, а не воспроизводится ли что то в этот момент. если нет, то нет и смысла сравнивать.
Хотя с таймером - это плохая затея.
Галочка "подтверждения прочтения" - вселенское зло.
F.@.E.R

F.@.E.R (статус: 1-ый класс), 30 марта 2011, 18:59 [#7]:

Потому, что объекту TMediaPlayer1 не присвоено имя файла который надо проиграть и поэтому неизвестна полная длина файла.
Можно сделать так
If length(mediaPlayer1.fileName) <> 0 then
Включаем таймер для нашего кода.
Timertrack.enable:=true
Else
Timertrack.enable:=false;
Loki05

Loki05 (статус: Посетитель), 30 марта 2011, 19:02 [#8]:

Вадим К: подскажите тогда пожалуйста каким образом можно реализовать переход к следующему треку либо на какое событие вешать этот код?
F.@.E.R

F.@.E.R (статус: 1-ый класс), 30 марта 2011, 19:07 [#9]:

Вадим К. А почему плохо здесь использовать таймер?
Loki05

Loki05 (статус: Посетитель), 30 марта 2011, 19:08 [#10]:

F.@.E.R: ОГРОМНОЕ СПАСИБО!!!! Все работает!!!
Вадим К

Вадим К (статус: Академик), 31 марта 2011, 00:32 [#11]:

таймер будет проверять постоянно (лишняя нагрузка, усложнение логики). Но может не проверить в нужную минуту. Наиболее правильно либо разобраться, как заставить плеер самому выбирать следующую песню (плейлист для этого и создан), либо поискать событие окончания воспроизведения.
Если там событий много, а названия непонятные, можно делать так, как я делал раньше. Ставим мемо на форму, во всех подозрительных событиях вписываем что то вида
Memo1.lines.add('имя события');
так же можно и некоторые параметры выписывать. Потом, запустив приложение - медитируем на вывод:)
Галочка "подтверждения прочтения" - вселенское зло.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:40
Выполнено за 0.02 сек.