| 
| 
 | Вопрос # 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('имя события');
 так же можно и некоторые параметры выписывать. Потом, запустив приложение - медитируем на вывод
   Галочка "подтверждения прочтения" - вселенское зло. |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |