![]() |
|
Модераторы: Snowy, Alexeis, MetalFan |
![]()
|
|
| sergeboss |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 26.6.2003 Репутация: нет Всего: нет |
Есть динамический массив a, который содержит имена файлов (1.avi, 2.avi, ..... n.avi).
Как заставить TMediaPlayer проиграть все файлы по очереди? Заранее спасибо! |
|||
|
||||
| cot |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 69 Регистрация: 4.6.2003 Репутация: нет Всего: нет |
var i:integer;
........... for i:=0 to Length(DinMass)-1 do MediaPlayer1.Play(DinMass[i]) end; Как то так. На работоспособность не проверял. |
|||
|
||||
| sergeboss |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 26.6.2003 Репутация: нет Всего: нет |
К сожалениею это далеко не так.....
|
|||
|
||||
| Kesh |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2488 Регистрация: 31.7.2002 Где: Германия, Saarbrü cken Репутация: 1 Всего: 54 |
Если использование 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 |
|
|||
![]() В доску свой :) ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 3.7.2003 Где: Тверь Репутация: нет Всего: 1 |
Слушай сюда.
У 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 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 26.6.2003 Репутация: нет Всего: нет |
И это я все пробовал..... вот именно здесь, я даю новое имя файла из массива, но он не открывает его, а проигрывает старый!
|
|||
|
||||
| Pakshin A. S. |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 5056 Регистрация: 16.2.2003 Репутация: нет Всего: 61 |
Работает на 100%:
P. S. Что насчёт проигравания по очереди, сам думай... |
|||
|
||||
| Pakshin A. S. |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 5056 Регистрация: 16.2.2003 Репутация: нет Всего: 61 |
Соответсвенно пользуйся MediaPlayer1.Play и MediaPlayer1.Stop
|
|||
|
||||
| &-ray |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 406 Регистрация: 15.4.2003 Где: Казахстан, г Аста на Репутация: нет Всего: нет |
Я делал так:
установил таймер с интервалом 100мс и проверял MediaPlayer.Position, как только MadiaPlayer.position:=mediaplayer.length, значит пора менять пластинку (принцип как указал Pakshin A. S.), только вместо MediaPlayer1.FileName:=YourFileName; подставляешь значение из массива: MediaPlayer1.FileName:=SongArray[currentsong+1] , где currentsong - индекс текущей песни в массиве. ЗЫ По этому же таймеру можно менять положение TrackBar.Position (если нужно отображать процесс проигрывания) -------------------- "Совсем неважно от чего помрешь, ведь куда важнее - для чего родился..." С.Б. -------------------- И снова мышь беру я в руки Куда иду? - Конечно в сруки! |
|||
|
||||
| sergeboss |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 26.6.2003 Репутация: нет Всего: нет |
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 |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 1 Всего: 329 |
А если убрать эту строку, ты пробовал? Без закрытия, сразу открытие нового файла и проигрывание. |
|||
|
||||
| sergeboss |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 26.6.2003 Репутация: нет Всего: нет |
Тогда он проигрывает не новый - а старый файл.... И ничего не могу сдлать, пробовал так же и с таймером... ошибка все таже!
|
|||
|
||||
| &-ray |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 406 Регистрация: 15.4.2003 Где: Казахстан, г Аста на Репутация: нет Всего: нет |
У меня с таймером все ОК.
Может надо со свойствами проигрывателя чего мутить, у меня такие: AutoEnable:=true; AutoOpen:=false; AutoRewind:=true; ЗЫ По таймеру после проверки позиции проигрывания плеера просто останавливаю его mediaplayer.stop , затем прописывал файл для проигрывания mediaplayer.filename:=... , потом открываю mediaplayer.open mediaplayer.play У меня все работает -------------------- "Совсем неважно от чего помрешь, ведь куда важнее - для чего родился..." С.Б. -------------------- И снова мышь беру я в руки Куда иду? - Конечно в сруки! |
|||
|
||||
| Pakshin A. S. |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 5056 Регистрация: 16.2.2003 Репутация: нет Всего: 61 |
Убери Stop, ведь при выполнении Close MediaPlayer сам себя останавливает.
|
|||
|
||||
| cot |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 69 Регистрация: 4.6.2003 Репутация: нет Всего: нет |
Прошу прощения за предыдущий бестолковый ответ. Вот это работает, проверено:
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. |
|||
|
||||
![]()
|
| Правила форума "Delphi: Звук, графика и видео" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |