| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Звук, графика и видео > TMediaPlayer |
| Автор: sergeboss 9.7.2003, 01:47 |
| Есть динамический массив a, который содержит имена файлов (1.avi, 2.avi, ..... n.avi). Как заставить TMediaPlayer проиграть все файлы по очереди? Заранее спасибо! |
| Автор: cot 9.7.2003, 05:45 |
| var i:integer; ........... for i:=0 to Length(DinMass)-1 do MediaPlayer1.Play(DinMass[i]) end; Как то так. На работоспособность не проверял. |
| Автор: sergeboss 9.7.2003, 07:29 |
| К сожалениею это далеко не так..... |
| Автор: Kesh 9.7.2003, 08:18 |
| Если использование TMediaPlayer не принципиально, то могу посоветовать использовать компоненты DSPACK, заточенные для проигрывания свяческих видеофайлов (включая DVD), для работы требуется DirectX 9.0, точнее DirectShow 9.0. Подробнее читай здесь... DSPACK - http://www.progdigy.com/ DirectX 9.0 SDK for Delphi - http://clootie.narod.ru/ Будут вопросы, пиши... |
| Автор: B2_Russia 9.7.2003, 15:01 |
| Слушай сюда. У TMediaPlayer имеется свойство Mode. Короче говоря тебе перед загрузкой нового трека (avi) нужно узнать закончился ли предыдущий. Предлагаю обработать событие OnNotify: const ModeStr: array[TMPModes] of string = ('Not ready', 'Stopped', 'Playing', 'Recording', 'Seeking', 'Paused', 'Open'); procedure TForm1.MediaPlayer1Notify(Sender: TObject); begin with Sender as TMediaPlayer do begin Form1.Caption := ModeStr[Mode]; { Note we must reset the Notify property to True } { so that we are notified the next time the } { mode changes } Notify := True; end; end; Это я скопировал из Helpа по Delphi разберешься? Здесь проверь на Stopped и запускай новый трек если предыдущий не был прерван юзером. Надеюсь помог |
| Автор: sergeboss 9.7.2003, 23:41 |
| И это я все пробовал..... вот именно здесь, я даю новое имя файла из массива, но он не открывает его, а проигрывает старый! |
| Автор: Pakshin A. S. 10.7.2003, 22:26 | ||
Работает на 100%:
P. S. Что насчёт проигравания по очереди, сам думай... |
| Автор: Pakshin A. S. 10.7.2003, 22:28 |
| Соответсвенно пользуйся MediaPlayer1.Play и MediaPlayer1.Stop |
| Автор: &-ray 10.7.2003, 23:27 |
| Я делал так: установил таймер с интервалом 100мс и проверял MediaPlayer.Position, как только MadiaPlayer.position:=mediaplayer.length, значит пора менять пластинку (принцип как указал Pakshin A. S.), только вместо MediaPlayer1.FileName:=YourFileName; подставляешь значение из массива: MediaPlayer1.FileName:=SongArray[currentsong+1] , где currentsong - индекс текущей песни в массиве. ЗЫ По этому же таймеру можно менять положение TrackBar.Position (если нужно отображать процесс проигрывания) |
| Автор: sergeboss 11.7.2003, 10:12 |
| procedure TForm3.MediaPlayer1Notify(Sender: TObject); begin with MediaPlayer1 do begin if Mode=mpStopped then begin Stop; Close; - вот здесь постоянно возникает ошибка!!!!! application-defined exeception (code 0xc0000008) FileName:=c[2]+'.avi'; Open; Play; Notify:=true; end; end; end; |
| Автор: Akella 11.7.2003, 12:57 | ||
А если убрать эту строку, ты пробовал? Без закрытия, сразу открытие нового файла и проигрывание. |
| Автор: sergeboss 11.7.2003, 16:16 |
| Тогда он проигрывает не новый - а старый файл.... И ничего не могу сдлать, пробовал так же и с таймером... ошибка все таже! |
| Автор: &-ray 11.7.2003, 23:50 |
| У меня с таймером все ОК. Может надо со свойствами проигрывателя чего мутить, у меня такие: AutoEnable:=true; AutoOpen:=false; AutoRewind:=true; ЗЫ По таймеру после проверки позиции проигрывания плеера просто останавливаю его mediaplayer.stop , затем прописывал файл для проигрывания mediaplayer.filename:=... , потом открываю mediaplayer.open mediaplayer.play У меня все работает |
| Автор: Pakshin A. S. 11.7.2003, 21:28 |
| Убери Stop, ведь при выполнении Close MediaPlayer сам себя останавливает. |
| Автор: cot 12.7.2003, 08:07 |
| Прошу прощения за предыдущий бестолковый ответ. Вот это работает, проверено: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, MPlayer; type TfmPlayer = class(TForm) btSelect: TButton; cbMass: TComboBox; OpenDialog1: TOpenDialog; btPlay: TButton; MediaPlayer1: TMediaPlayer; procedure btSelectClick(Sender: TObject); procedure btPlayClick(Sender: TObject); procedure MediaPlayer1Notify(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure PlayMass(Ind:integer); private { Private declarations } public { Public declarations } end; var fmPlayer: TfmPlayer; implementation {$R *.dfm} var i:integer; procedure TfmPlayer.btSelectClick(Sender: TObject); begin if OpenDialog1.Execute then cbMass.Items.Add(OpenDialog1.Filename); cbMass.Text:=cbMass.Items[0] end; procedure TfmPlayer.PlayMass(Ind:integer); begin if cbMass.Items.Count>Ind then with MediaPlayer1 do begin Notify:=false; FileName:= cbMass.Items[Ind]; Open;Play;Notify:=true end; end; procedure TfmPlayer.btPlayClick(Sender: TObject); begin PlayMass(i) end; procedure TfmPlayer.MediaPlayer1Notify(Sender: TObject); begin Inc(i);PlayMass(i) end; procedure TfmPlayer.FormCreate(Sender: TObject); begin i:=0 end; procedure TfmPlayer.FormClose(Sender: TObject; var Action: TCloseAction); begin Action:=caFree; MediaPlayer1.Close end; end. |
| Автор: sergeboss 25.7.2003, 10:43 |
| большое спасибо всем, кто принял участие в обсуждении данной темы! |
| Автор: lacost 7.12.2008, 20:16 | ||
| Не хочу создавать ещё оду тему по этому компоненту но возникли следующие вопросы: Как определить время звучаия файла? свойство Position я тау понимаю показывает текущий номер байта..если так можно сказать а свойство Length я так понимаю размер файла в байтах, или я ошибаюсь? Ещё такой вопрос сделал регулировку звука в MP как предлагает DRKB но для миди файлов звук не регулируется, как быть? Зарание спасибо за ответы.
|