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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обсудим мой код проигрывания мидишек? Обсудим мой код проигрывания мидишек? 
:(
    Опции темы
Olegek
Дата 4.6.2002, 19:51 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Почему этот код после проигрывания MIDI не хочет воспроизвотить следующую выбранную мидишку?
Выводит такие сообщения:
"MMSYSTEM275 Указанный файл не найден. Проверьте правильность ввода пути и имени файла."
и
"No MCI device open."

Код
uses
MPlayer;

var
mp: TMediaPlayer;

procedure TForm1.ColorBtn5Click(Sender: TObject);
begin
with Sender as TButton do
case Tag of
 0 :
 begin
  Tag := 1;
  mp := TMediaPlayer.CreateParented(Handle);
  mp.DeviceType := dtSequencer;
  if not FileExists(Label6.Caption) then
   begin
    if Application.MessageBox('Файл не найден!'#13+
    'Выберите новый из списка вкладки "Музыкальные композиции".', 'Заголовок окна',
    MB_ICONWARNING or MB_OK or MB_DEFBUTTON2 or MB_TASKMODAL) = ID_OK then TabSet1.TabIndex :=2;
   end
   else
    mp.FileName := PChar(Label5.Caption);
    mp.Wait:= True;
    mp.Open;
    mp.Play;
    ColorBtn5.Caption := 'Стоп';
    ColorBtn3.Caption := 'Стоп';
     if (mp.NotifyValue = nvSuccessful) and
        (mp.Mode = mpStopped) then
        begin
     ColorBtn5.Caption := 'Тест';
     ColorBtn3.Caption := 'Тест';
        end;
   end;
   1 :
   begin
    Tag := 0;
    mp.Wait := True;
    mp.Stop;
    ColorBtn5.Caption := 'Тест';
     ColorBtn3.Caption := 'Тест';
    mp.Free;
   end;
end;
end;

  Вверх
Vit
Дата 4.6.2002, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

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



Код конечно вырван с "мясом", так что представляет винигрет, но может дело в том что проверяется наличие файла:

  if not FileExists(Label6.Caption) then

а считывается файл:

  mp.FileName := PChar(Label5.Caption);

Или так и надо?


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
RA
Дата 4.6.2002, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


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

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



Я вот чёто непойму зачем писать

Код

 if not FileExists(Label6.Caption) then
  begin ошибка else
mp.FileName := PChar(Label5.Caption);
и т.д


Тоесть говоря по русски если нету файла 6 то ошибка а если он есть то запустить фаил 5. Нафига тогда проверять наличие файла 6 если он неиспользуется.
PM   Вверх
Olegek
Дата 4.6.2002, 21:04 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Да ребята, верно.
Это я недосмотрел.
Спасибо!
Исправлю.

Но дело, по-моему, совсем не в этом.
Ещё до того, как я поместил все эти проверки, наблюдались подобные ошибки.
  Вверх
Vit
Дата 4.6.2002, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

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



А вообще что это за файл "MMSYSTEM275"? Это тот миди который ты хотел проиграть или какой-то другой файл? Если другой, то имя его смутно мне напоминает, что может просто программа не может найти в системе соответствующего драйвера используемого формата миди.


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Olegek
Дата 4.6.2002, 21:18 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Я решил немного прокоментировать код, убрал из него проверку и сообщение.
Правильно ли я всё делаю?
Меня гложат сомнения.

Код
uses
MPlayer;

var
mp: TMediaPlayer;

//Исходная надпись на кнопке - Тест
procedure TForm1.ColorBtn5Click(Sender: TObject);
begin
with Sender as TButton do
case Tag of
0 :
  begin
   Tag := 1;
   mp := TMediaPlayer.CreateParented(Handle);
   mp.DeviceType := dtSequencer;
   mp.FileName := PChar(Label5.Caption);
   mp.Wait:= True;
   mp.Open;
   mp.Play;
   //Началось воспроизведение
   //Изменяем надпись на кнопке на Стоп
   ColorBtn5.Caption := 'Стоп';
       
    //После завершения проигрывания мидишки
    //изменяем надпись на кнопке снова на Тест
    if (mp.NotifyValue = nvSuccessful) and
       (mp.Mode = mpStopped) then
       begin
        ColorBtn5.Caption := 'Тест';
       end;

  end;
1 :
  begin
   Tag := 0;
   mp.Wait := True;
   mp.Stop;
   mp.Free;
  end;
end;
end;

  Вверх
Olegek
Дата 4.6.2002, 21:22 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата
А вообще что это за файл "MMSYSTEM275"? Это тот миди который ты хотел проиграть или какой-то другой файл? Если другой, то имя его смутно мне напоминает, что может просто программа не может найти в системе соответствующего драйвера используемого формата миди.


MMSYSTEM275 - это скорее всего драйвер.
А программа сначало нормально проигрывает все мидишки.

И, когда случаеться такая неприятность, я закрываю программу, снова открываю - все нормально работает.
  Вверх
Olegek
Дата 4.6.2002, 23:45 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Совсем забыл: и в Label6 и в Label5 отображаеться одно
и тоже имя файла!
  Вверх
Song
Дата 5.6.2002, 08:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Sysman.ru
***


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

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



А может просто ShellExecute() или надо обязательно гемороя ?


--------------------
Прежде чем сказать "Невозможно", подумай, прав ли ты
PM WWW ICQ   Вверх
Olegek
Дата 8.6.2002, 14:52 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата
А может просто ShellExecute() или надо обязательно гемороя ?


Мне не нужно, чтобы открывалься Медиаплейер. К тому же на это уходит время. А насчет, как ты говоришь, гемороя, так зачем вообще что-то создавать, можно вообще всё делать с помощью ShellExecute().
  Вверх
Song
  Дата 8.6.2002, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Sysman.ru
***


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

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



Держи.. бутылка, что ли с тебя...  :D

private
mp: TMediaPlayer; // Обязательно надо использовать глобальную переменную.

Код

Procedure TForm1.CheckTheEnd(Sender:TObject);
Begin
IF mp.Mode=mpStopped then Button1Click(Button1);
End;

procedure TForm1.Button1Click(Sender: TObject);
Begin
Case TButton(Sender).Tag OF
 0: Begin
     TButton(Sender).Tag:=1;
     mp:=TMediaPlayer.CreateParented(Handle);
     With mp Do
      Begin
       DeviceType:=dtAutoSelect;
       FileName:='c:\town.mid';
       Wait:=False;
       Open;
       Play;
       TButton(Sender).Caption:='Стоп';
       onNotify:=CheckTheEnd;
      End;
    End;
 1: IF Assigned(mp) then // Для безопасности
     Begin
      With TButton(Sender) Do
       Begin
        Tag:=0;
        Caption:='Тест';
       End;
      With mp Do
       Begin
        Stop;
        Free;
       End;
     End;
End;
end;


P.S. Обрати внимание на синтаксис - твой синтаксис вряд ли даст другим программистам желания в нём ковыряться.


--------------------
Прежде чем сказать "Невозможно", подумай, прав ли ты
PM WWW ICQ   Вверх
Olegek
Дата 8.6.2002, 17:23 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Вот спасибочки...
А то мучаюсь уже с недели две с этим кодом, глаза чуть ли на лоб не лезли.
  Вверх
Olegek
Дата 10.6.2002, 19:46 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











ВСЕ РАВНО ТЕ ЖЕ ОШИБКИ:

"MMSYSTEM275 Указанный файл не найден. Проверьте правильность ввода пути и имени файла.", "No MCI device open."

После первого завершения проигрывания мидишки - все нормально, но как только я пытаюсь проиграть ее снова - выводяться вышеуказанные сообщения. Причем, они появляються не всегда, но почти всегда.

Ребята помогите!!!
  Вверх
Baa
Дата 10.6.2002, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

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



Вообще лучше проигрывать все через MCI ( Multimedia API ).
Да и с ошибками проще расправлятся + больше контроля над процессом :)


--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
Song
Дата 10.6.2002, 20:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Sysman.ru
***


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

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



Цитата(Guest @ 10.6.2002, 20:46)
ВСЕ РАВНО ТЕ ЖЕ ОШИБКИ:

"MMSYSTEM275 Указанный файл не найден. Проверьте правильность ввода пути и имени файла.", "No MCI device open."

После первого завершения проигрывания мидишки - все нормально, но как только я пытаюсь проиграть ее снова - выводяться вышеуказанные сообщения. Причем, они появляються не всегда, но почти всегда.

Ребята помогите!!!

К сожалению, не могу знать, у меня всё работает.
Видимо, Ваша проблема в кодеке... ???


--------------------
Прежде чем сказать "Невозможно", подумай, прав ли ты
PM WWW ICQ   Вверх
Vit
Дата 10.6.2002, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

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



У меня нет опыта работы с проигрыванием, но исходя из здравого смысла если у вас проигрывается первый файл и не проигрывается дальше значит что-то происходит с загрузкой кодека -  или возникает ошибка и его (кодек выбивает) или он не закрывается корректно, или что-то в этом роде. Может стоит попробовать вынести медиаплеер в DLL чтобы его можно было вообще выгрузить, и повторное проигрывание было подобно повторному запуску программы. Теперь небольшой вопрос - а метод Stop - он синхронный? если он асинхронный, то возможен вариант что компонент разрушается до того как законцится проигрывание. Попробуйте только 1 раз создавать и разрушать плеер, и только подгружать новые файлы...


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Sniper
Дата 10.6.2002, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Baa @ 10.6.2002, 20:49)
Вообще лучше проигрывать все через MCI ( Multimedia API ).
Да и с ошибками проще расправлятся + больше контроля над процессом :)

Ну предлагай пример с MCI для обсуждения.... :-))


--------------------
"Я испытываю отвращение к системе, разработаннной для "пользователя", если в слове "пользователь" закодировано уничижительное значение "тупой и примитивный".
Кен Томпсон, создатель Unix
PM MAIL   Вверх
Song
Дата 11.6.2002, 07:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Sysman.ru
***


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

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



Цитата(Vit @ 10.6.2002, 22:38)
возможен вариант что компонент разрушается до того как законцится проигрывание.

Я пробовал пробить этот вариант
Stop;
While Mode<>Stopped Do Application.ProcessMessages;
у меня  не вышло.


--------------------
Прежде чем сказать "Невозможно", подумай, прав ли ты
PM WWW ICQ   Вверх
Olegek
Дата 12.6.2002, 10:50 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Всем добрый день! Сначала хочу поблагодарить всех за помощь. Наконец то я нашел свою ошибку. Так как моя программа и MIDI файлы находятся в одном каталоге, я решил проигнорировать полные пути:

mp.FileName := Label5.Caption;
(mp.FileName := 'Filename.mid';)


В этом и была моя ошибка. С TmediaPlayer'ом такая "фишка" не проходит. Нужно использовать полные пути. Поэтому я сделал так:

            mp.FileName := ExtractFilePath(Application.EXEName)+Label5.Caption;
            (mp.FileName := 'C:\Path\Filename.mid';)


Теперь все работает. Надеюсь, моя халатность станет другим наукой. Кстати, с DLL файлами такая "фишка" проходит!
  Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

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

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

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


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

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


 




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


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

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