Модераторы: Snowy, Alexeis, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TMediaPlayer 
:(
    Опции темы
sergeboss
Дата 9.7.2003, 01:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 26.6.2003

Репутация: нет
Всего: нет



Есть динамический массив a, который содержит имена файлов (1.avi, 2.avi, ..... n.avi).
Как заставить TMediaPlayer проиграть все файлы по очереди?
Заранее спасибо!

PM MAIL   Вверх
cot
Дата 9.7.2003, 05:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 4.6.2003

Репутация: нет
Всего: нет



var i:integer;
...........
for i:=0 to Length(DinMass)-1 do
MediaPlayer1.Play(DinMass[i])
end;
Как то так. На работоспособность не проверял.
PM MAIL   Вверх
sergeboss
Дата 9.7.2003, 07:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 26.6.2003

Репутация: нет
Всего: нет



К сожалениею это далеко не так.....
PM MAIL   Вверх
Kesh
  Дата 9.7.2003, 08:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 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/

Будут вопросы, пиши...


--------------------
user posted image
PM MAIL WWW ICQ Skype   Вверх
B2_Russia
Дата 9.7.2003, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


В доску свой :)
**


Профиль
Группа: Участник
Сообщений: 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 и запускай новый трек если предыдущий не был прерван юзером.

Надеюсь помог
PM WWW ICQ   Вверх
sergeboss
Дата 9.7.2003, 23:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 26.6.2003

Репутация: нет
Всего: нет



И это я все пробовал..... вот именно здесь, я даю новое имя файла из массива, но он не открывает его, а проигрывает старый!
PM MAIL   Вверх
Pakshin A. S.
Дата 10.7.2003, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: нет
Всего: 61



Работает на 100%:
Код

 ...
 MediaPlayer1.Close;
 MediaPlayer1.FileName:=YourFileName;
 MediaPlayer1.Open;
 ...


P. S.
Что насчёт проигравания по очереди, сам думай...
PM   Вверх
Pakshin A. S.
Дата 10.7.2003, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: нет
Всего: 61



Соответсвенно пользуйся MediaPlayer1.Play и MediaPlayer1.Stop
PM   Вверх
&-ray
Дата 10.7.2003, 23:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 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 (если нужно отображать процесс проигрывания)


--------------------
"Совсем неважно от чего помрешь, ведь куда важнее - для чего родился..." С.Б.

--------------------
И снова мышь беру я в руки
Куда иду? - Конечно в сруки!
PM MAIL WWW   Вверх
sergeboss
Дата 11.7.2003, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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;
PM MAIL   Вверх
Akella
Дата 11.7.2003, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 1
Всего: 329



Цитата
Close; - вот здесь постоянно возникает ошибка!!!!! application-defined exeception (code 0xc0000008)

А если убрать эту строку, ты пробовал? Без закрытия, сразу открытие нового файла и проигрывание.
PM MAIL   Вверх
sergeboss
Дата 11.7.2003, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 26.6.2003

Репутация: нет
Всего: нет



Тогда он проигрывает не новый - а старый файл.... И ничего не могу сдлать, пробовал так же и с таймером... ошибка все таже!
PM MAIL   Вверх
&-ray
Дата 11.7.2003, 23:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 406
Регистрация: 15.4.2003
Где: Казахстан, г Аста на

Репутация: нет
Всего: нет



У меня с таймером все ОК.
Может надо со свойствами проигрывателя чего мутить, у меня такие:
AutoEnable:=true;
AutoOpen:=false;
AutoRewind:=true;

ЗЫ По таймеру после проверки позиции проигрывания плеера просто останавливаю его
mediaplayer.stop
, затем прописывал файл для проигрывания
mediaplayer.filename:=...
, потом открываю
mediaplayer.open
mediaplayer.play

У меня все работает smile.gif




--------------------
"Совсем неважно от чего помрешь, ведь куда важнее - для чего родился..." С.Б.

--------------------
И снова мышь беру я в руки
Куда иду? - Конечно в сруки!
PM MAIL WWW   Вверх
Pakshin A. S.
Дата 11.7.2003, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: нет
Всего: 61



Убери Stop, ведь при выполнении Close MediaPlayer сам себя останавливает.
PM   Вверх
cot
Дата 12.7.2003, 08:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 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.

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




[ Время генерации скрипта: 0.0670 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.