Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.08.2015, 07:20   #1
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,949
По умолчанию MediaPlayer глючит

Доброго времени суток!
Дан код:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
    f,dl:string;
    sl:tStringList;
begin
   sl:=tStringList.Create;
   f:='E:\Список песен.txt';//здесь содержатся имена mp3-файлов
   sl.LoadFromFile(f);
   For i:=0 to sl.Count-1 do
   begin
      Label1.Caption:=Format('%d / %d',[i,sl.Count]);
      Label1.Repaint;
      MediaPlayer1.FileName:=sl[i];
      try
      MediaPlayer1.Open;
      dl:=IntToStr(MediaPlayer1.Length);
      except
         dl:='0';
      end;
      MediaPlayer1.Close;
      sl[i]:=sl[i]+' - '+dl;
   end;
   sl.SaveToFile(f);
   sl.Free;
end;
Этим кодом я измеряю длительность песен. При выполнении кода возникает ошибка (см. рис.). Замечено, что ровно 125 файлов открывает без ошибок, а на 126 появляется ошибка. Менял счетчик (цикл For от 50/100/200 и т.д.) - все-равно та же самая причина - на 126-м файле глюк.
Не подскажите, в чем здесь проблема? и как ее устранить?
Заранее благодарен!

P.S.: ОС - Windows 7 Домашняя базовая; среда программирования - Delphi 6
Изображения
Тип файла: png Безымянный.png (38.0 Кб, 97 просмотров)
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]
newerow1989 вне форума Ответить с цитированием
Старый 01.08.2015, 11:43   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Про ошибку такую не слышал. Но если говнокодить - создавай динамически компонент, отсчитал 125 - уничтожай и по-новой. А по хорошему изучить устройство mp3 и длительность определять из данных файла. Ну вот например
http://habrahabr.ru/post/103635/
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 01.08.2015, 13:30   #3
uberchel
Участник клуба
 
Аватар для uberchel
 
Регистрация: 19.01.2009
Сообщений: 1,455
По умолчанию

Делал как-то для своего компонента базе mp даааааавным дааавно:

Код:
function mp3time(var sec: Integer): string;
var
  h, m: Integer;
  hs, ms, ss: string;
begin
  m := Round(Int(Round(sec / 16.7) / 60));
  h := Round(Int(m / 60));
  m := m - h * 60;
  
  if h < 10 then
     hs := '0' + Inttostr(h)
  else
     hs := inttostr(h);
  
  if m < 10 then
     ms := '0' + Inttostr(m)
  else
     ms := inttostr(m);
  
  Result := hs + ':' + ms
end;

Использование:
string:= mp3time(MediaPlayer1.position); //Вывотим время проигрывания
string:=mp3time(MediaPlayer1.Length ); //Длительность трека
string:=mp3time(MediaPlayer1.Length - MediaPlayer1.position); //Сколько осталось
uberchel вне форума Ответить с цитированием
Старый 01.08.2015, 13:46   #4
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,949
По умолчанию

Здесь необходимо отметить, что прослушав 125 песен, на 126-й вылезает та же ошибка, указанной на картинке! А эту проблему как решить?
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]
newerow1989 вне форума Ответить с цитированием
Старый 01.08.2015, 14:02   #5
uberchel
Участник клуба
 
Аватар для uberchel
 
Регистрация: 19.01.2009
Сообщений: 1,455
По умолчанию

Значит mmsystem не поддерживает такой тип фильтра, это не ак не обойти на стандартном медиаплеере, только исключением try except или уж юзать directShow/Sound, если не охото возится с ним. то bass.dll в помощь.
uberchel вне форума Ответить с цитированием
Старый 03.08.2015, 00:58   #6
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Это всегда так? Или 126 композицию в файле тоже меняли на другую , например?

Видел глючные файлы музыки, их даже аимп не играл, но в список вносил, пару раз видел. Mp3.

Вот поэтому и спросил на счет композиции.
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 03.08.2015, 11:34   #7
DIONISKA
Форумчанин
 
Регистрация: 07.11.2011
Сообщений: 156
По умолчанию

Мб просто стоит автозавершение зависших приложений? всё-же MediaPlayer не даёт обработать сообщения основного потока т.к. работает в цикле(а там 126+ итераций - любой таймаут выйдет), может стоит вставить "Aplication.ProcessMessages" в тело цикла?
DIONISKA вне форума Ответить с цитированием
Старый 03.08.2015, 15:39   #8
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

Пытаетесь сделать плейлист. Так загрузите список песен в ListBox, а пути к песням в параллельный TStringList. Потом можно воспрозводить по очереди(например, можно сделать это при помощи таймера).
По сути вы должны были перед тем, как "открывать" новый файл - "закрыть" старый.
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Старый 09.08.2015, 07:38   #9
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,949
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
если говнокодить - создавай динамически компонент, отсчитал 125 - уничтожай и по-новой.
Пытался. Ошибка та же самая.

Цитата:
Сообщение от Алексей_2012 Посмотреть сообщение
Это всегда так? Или 126 композицию в файле тоже меняли на другую , например?
Да, только с mp3-файлами такая проблема. А с остальными (wav, wma) таких проблем не было.

Цитата:
Сообщение от DIONISKA Посмотреть сообщение
работает в цикле(а там 126+ итераций - любой таймаут выйдет)
Бесполезно. При прослушивании 125 песен, на 126-й выдает ошибку.


Я думаю, что это из-за обновлений Windows (июль 2015). Раньше такого у меня не было.
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]

Последний раз редактировалось newerow1989; 09.08.2015 в 07:48.
newerow1989 вне форума Ответить с цитированием
Старый 09.08.2015, 12:50   #10
ResourceSpace
Форумчанин
 
Аватар для ResourceSpace
 
Регистрация: 30.06.2015
Сообщений: 353
Смех

Содержимое "E:\Список песен.txt" корректно?
Я создал такой файл из 250 одинаковых строк, запустил код, он быстро отработал и в конце "испортил" файл. Так и задумано?
Сохраняйте SaveToFile в другой файл что ли...

По коду будет не лишним добавить:
Код:
Application.ProcessMessages();
sl[i]:=Trim(sl[i]);
If Length(sl[i])=0 Then
      Continue();
If Not FileExists(sl[i]) Then
      Continue();
MediaPlayer1.FileName:=sl[i];
И кстати как минимум:
Цитата:
[i+1,sl.Count]
ResourceSpace вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Браузер глючит... Aleksckjy HTML и CSS 3 21.01.2015 11:43
Wi Fi глючит nikox12 Компьютерное железо 5 03.05.2014 20:26
Глючит MediaPlayer или я что-то не то делаю? TUberwer Общие вопросы Delphi 4 14.08.2013 22:50
глючит монитор Aries Компьютерное железо 2 14.04.2011 17:36
Глючит Excel ---FISHER--- Общие вопросы Delphi 34 09.08.2009 20:30