|
Вопрос # 5 137/ вопрос открыт / |
|
Здравствуйте! Я сделал проигрыватель, все относительно стабильно работает, но нет функции которая запускает следующий трек по окончании предыдущего. Подскажите пожалуйста как это реализовать. За ранее спасибо!!!!
 |
Вопрос задал: Loki05 (статус: Посетитель)
Вопрос отправлен: 29 марта 2011, 20:49
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: F.@.E.R
Здравствуйте, Loki05!
Переходе на следующий трек можно осуществить простымо способом. Для этого нам понадобится объект TTimer и написать там следующий код.
 |
Ответ отправил: F.@.E.R (статус: 1-ый класс)
Время отправки: 30 марта 2011, 02:41
|
Мини-форум вопроса
Всего сообщений: 11; последнее сообщение — 31 марта 2011, 00:32; участников в обсуждении: 4.
|
AlexMPEI (статус: 1-ый класс), 29 марта 2011, 21:27 [#1]:
есть 2 способа:
1) динамически формировать плейлист WMP, тогда все как раз само будет делаться
2) подписаться на событие StateChanged от WMP и когда придет стэйт стоп подсовывать WMP следующий трек для проигрывания.
|
29 марта 2011, 21:35: Вопрос перемещён из тематического раздела Delphi » Общие вопросы по программированию в раздел Delphi » Мультимедийные приложения модератором Ерёмин А.А.
|
Loki05 (статус: Посетитель), 29 марта 2011, 21:51 [#2]:
AlexMPEI: можно про 2 способ подробнее и желательно с примерами кода, а то я так не очень представляю себе это
|
|
Loki05 (статус: Посетитель), 29 марта 2011, 21:52 [#3]:
Только если что у меня простой компонент MediaPlayer Delphi 7
|
|
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 (статус: Посетитель), 30 марта 2011, 18:26 [#5]:
Подскажите пожалуйста почему когда я на таймер вешаю код: begin if mediaplayer1.length = mediaplayer1.position then
у меня выскакивает ошибка сразу после запуска приложения, а кампелятор не чего не находит
|
|
Вадим К (статус: Академик), 30 марта 2011, 18:58 [#6]:
нужно проверить в таймере, а не воспроизводится ли что то в этот момент. если нет, то нет и смысла сравнивать.
Хотя с таймером - это плохая затея.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
F.@.E.R (статус: 1-ый класс), 30 марта 2011, 18:59 [#7]:
Потому, что объекту TMediaPlayer1 не присвоено имя файла который надо проиграть и поэтому неизвестна полная длина файла.
Можно сделать так
If length(mediaPlayer1.fileName) <> 0 then
Включаем таймер для нашего кода.
Timertrack.enable:=true
Else
Timertrack.enable:=false;
|
|
Loki05 (статус: Посетитель), 30 марта 2011, 19:02 [#8]:
Вадим К: подскажите тогда пожалуйста каким образом можно реализовать переход к следующему треку либо на какое событие вешать этот код?
|
|
F.@.E.R (статус: 1-ый класс), 30 марта 2011, 19:07 [#9]:
Вадим К. А почему плохо здесь использовать таймер?
|
|
Loki05 (статус: Посетитель), 30 марта 2011, 19:08 [#10]:
F.@.E.R: ОГРОМНОЕ СПАСИБО!!!! Все работает!!!
|
|
Вадим К (статус: Академик), 31 марта 2011, 00:32 [#11]:
таймер будет проверять постоянно (лишняя нагрузка, усложнение логики). Но может не проверить в нужную минуту. Наиболее правильно либо разобраться, как заставить плеер самому выбирать следующую песню (плейлист для этого и создан), либо поискать событие окончания воспроизведения.
Если там событий много, а названия непонятные, можно делать так, как я делал раньше. Ставим мемо на форму, во всех подозрительных событиях вписываем что то вида
Memo1.lines.add('имя события');
так же можно и некоторые параметры выписывать. Потом, запустив приложение - медитируем на вывод
Галочка "подтверждения прочтения" - вселенское зло.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|