|
Вопрос # 2 042/ вопрос решён / |
|
Доброго времени суток, уважаемые эксперты!
Я как-то задавал подобный вопрос уже - но ответа не получил - а только кучу критики - и теперь понимаю, что не зря. Вообщем у меня остался всего один не разрешенный вопрос - а именно как с помощью одного компонента TMediaPlayer поигрывать по очереди песни -т. е. при нажатии на баттон MediaPlayer1 проигрывал сначала первый трек, закончил второй и т. д.! Желательно не через StringList - ато это я вообще не понимаю - если это возможно окнечно... Огромное спасибо! Ато очень хочу разобраться - но не выходи никак...
Приложение: Переключить в обычный режим-
-
- procedure TForm1.PNGButton1Click(Sender: TObject);
- begin
- MediaPlayer1.FileName := ExtractFilePath(Application.ExeName)+'Sound1.mp3';
- MediaPlayer1.Open;
- MediaPlayer1.Play;
- end;
-
- procedure TForm1.PNGButton2Click(Sender: TObject);
- begin
- MediaPlayer1.FileName := ExtractFilePath(Application.ExeName)+'Sound2.mp3';
- MediaPlayer1.Open;
- MediaPlayer1.Play;
- end;
-
-
 |
Вопрос задал: Вечперик (статус: Посетитель)
Вопрос отправлен: 4 ноября 2008, 11:10
Состояние вопроса: решён, ответов: 2.
|
Ответ #1. Отвечает эксперт: Feniks
Здравствуйте, Вечперик!
У TMediaPlayer есть событие OnNotify. С помощью его вы можете определить, что проигрывание песни окончено. Вот тогда и берите следующую, какую вам нужно.
Пример:
procedure TForm1.FormCreate(Sender: TObject);
begin
MediaPlayer1.Notify := True;
MediaPlayer1.OnNotify := NotifyProc;
end;
procedure TForm1.NotifyProc(Sender: TObject);
begin
with Sender as TMediaPlayer do
begin
case Mode of
mpStopped:
// Проигрывание остановлено, значит берем следующий трек
end;
//must set to true to enable next-time notification
Notify := True;
end;
end;
Что тут не понятного ? В чем у вас сложности ?
P.S. Желаю удачи.
 |
Ответ отправил: Feniks (статус: Бакалавр)
Время отправки: 4 ноября 2008, 11:37
Оценка за ответ: 5
|
Ответ #2. Отвечает эксперт: min@y™
Надо использовать событие TMediaPlayer.OnNotify. Оно генерируется при возникновении любого события, связанного с воспроизведением: (Back, Close, Eject, Next, Open, Pause, PauseOnly, Play, Previous, Resume, Rewind, StartRecording, Step, Stop), причём свойство TMediaPlayer.Notify должно быть установлено в True. Имей в виду ещё, что это свойство сбрасывается в False при каждом вызове OnNotify и его в обработчике этого события надо снова ставить в True, чтобы следующее событие OnNotify вызвало его обработчик.
Чтобы отловить момент окончания воспроизведения очередного файла, нужно написать что-то типа:
procedure TForm1.MediaPlayer1Notify(Sender: TObject);
begin
if MediaPlayer1.Mode = mpStopped
then begin
MediaPlayer1.Close();
MediaPlayer1.FileName:= 'Следующее_имя_файла.mp3';
MediaPlayer1.Open();
MediaPlayer1.Play();
end;
Notify:= True; // Чтобы вызвалось следующее событие
end;
Цитата:
Желательно не через StringList - ато это я вообще не понимаю - если это возможно окнечно... Огромное спасибо! Ато очень хочу разобраться - но не выходи никак...
Это, конечно, возможно, но рекомендуется только мазохистам. :))
Относительно большие куски кода мне вставлять не разрешают, поэтому смотри приложение.
З.Ы. Никак не вкурю, что такого СТРАШНОГО в TStringList? Обясни на форуме, плиз.
Приложение: Переключить в обычный режим- var
- FileIndex: Integer = 1;
-
- procedure TForm1.PNGButton1Click(Sender: TObject);
- begin
- MediaPlayer1.FileName := ExtractFilePath(Application.ExeName) + 'Sound' + IntToStr(FileIndex) +
'.mp3';
- MediaPlayer1.Open;
- MediaPlayer1.Play;
- end;
-
- procedure TForm1.MediaPlayer1Notify(Sender: TObject);
- var
- FileName: string;
- begin
- if MediaPlayer1.Mode = mpStopped
- then begin
- MediaPlayer1.Close();
-
- Inc(FileIndex);
- FileName:= 'Sound' + IntToStr(FileIndex) + '.mp3';
-
- if FileExists(FileName)
- then begin
- MediaPlayer1.FileName:= FileName;
- MediaPlayer1.Open();
- MediaPlayer1.Play();
- end
-
-
- mb_Ok + mb_IconError);
- end;
-
-
- end;
-
 |
Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 4 ноября 2008, 12:06
Оценка за ответ: 5
|
Мини-форум вопроса
Всего сообщений: 4; последнее сообщение — 4 ноября 2008, 12:16; участников в обсуждении: 2.
|
Вадим К (статус: Академик), 4 ноября 2008, 11:26 [#1]:
Ну так я вроде писал, что у медиаплеера есть такое событие, как "песня кончилась". Так вот, берём по списку новую и запускаем. В чём проблема?
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Вечперик (статус: Посетитель), 4 ноября 2008, 12:01 [#2]:
Feniks, большое спасибо... но не понял полностью я пока... а.. если честно, вообще не понял, какэ то мне помжет - получается тем кодом, что Вы написали я эту функцию разграничить треки ввел - а как ее применять и где пока не понимаю...
Вадим К, может и писали - но я не видел...
>Так вот, берём по списку новую и запускаем
вот с этим и проблема.. что-то не могу понять где...
|
|
Вадим К (статус: Академик), 4 ноября 2008, 12:05 [#3]:
Ну вот, пока не поймёте, как это работает, пока в Вашей голове не сложиться всё это, все наши ответы и рекомендации пойдут на смарку.
А список = это ведь обычный плейлист, который может быть представлен банальным массивом или Memo (StringList) с списком треков.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Вечперик (статус: Посетитель), 4 ноября 2008, 12:16 [#4]:
min@y™, огромное спасибо - попробую разобраться....
Вадим К, поэтому сейчас иду разбирать... былагодаря постам Feniks и min@y™ думаю пойму наконец весь приницип...
Всем еще раз большое спасибо - пошел разбирать))
|
31 января 2011, 19:32: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|