Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > TMediaPlayer не проигрывает аудио файлы(


Автор: Superklug 1.3.2008, 18:55
Здравствуйте!
К меня появилась необходимость воспроизводить mp3 файлы. Решил использовать компонент TMediaPlayer. Кинул его на форму, сделал прозрачным. В OnCreate формы присвоил параметру FileName адрес нужного звука.
Файл должен был проигрываться при выполнении определенных условий, которые я проверяю по таймеру. Т.о. у меня есть две функции:
Код

void TfmMain::StartSignal()
{
        MediaPlayer->Play();
}

void TfmMain::StopSignal()
{
        MediaPlayer->Stop();
}


и обработка события OnTimer:
Код

void __fastcall TfmMain::OnTimer(TObject *Sender)
{
        if(...)
                StartSignal();
}


Остановка сигнала должна происходить по клику мышкой на форме, поэтому писал так:
Код

void __fastcall TfmMain::FormMouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
        StopSignal();
}


По непонятным мне причинам воспроизведение файла не происходит!  smile 
Самое интересное, что если расположить на форме две кнопки и в обработчики событий OnClick вставить функции StartSignal и StopSignal, все прекрасно работает...

Пожалуйста объясните в чем дело? Может я не правильно использую MediaPlayer?

P.S. Если кто-то знает более разумный способ воспроизведения mp3, напишите. Буду очень рад.

Автор: Sharkfire 1.3.2008, 20:44
Пробвал делать отладку чтобы проверить как оно ваще работает?

Автор: Craft 1.3.2008, 21:45
Я б тебе не советовал вызивать свою функцыю из таймера. Просто он вызивается каждую секунду и может я думаю это и визывает что у тебя не проигрывается mp3.  Что тебе мешает сделать кнопки для воспроизведения и нормально их оформить?

Автор: Superklug 2.3.2008, 20:35
Цитата(Craft @  1.3.2008,  21:45 Найти цитируемый пост)
Я б тебе не советовал вызивать свою функцыю из таймера. Просто он вызивается каждую секунду и может я думаю это и визывает что у тебя не проигрывается mp3.  Что тебе мешает сделать кнопки для воспроизведения и нормально их оформить? 

Кнопки мне делать никак нельзя. Тут просто что-то вроде будильника. Т.е. при выполнении опр условий звучит сигнал. С PlaySound все прекрасно работало, но wav занимает слишком много места...

Цитата(Sharkfire @  1.3.2008,  20:44 Найти цитируемый пост)
Пробвал делать отладку чтобы проверить как оно ваще работает? 

Не совсем понятно что конкретно нужно отлаживать?

Я считаю способ с MediaPlayer-ом не самый лучший вариант воспроизведения mp3. Может кто-нибудь предложит более изящное решение?

Автор: THandle 2.3.2008, 23:34
Superklug, как понять не происходит проигрывание файла? MediaPlayer->Open делаешь?


Извиняюсь, что на Делфи, но Билдера просто под рукой нет.

Код

var
  Form1: TForm1;
  b : boolean = false;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  b := true;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  MediaPlayer1.FileName := 'C://1.mp3';
  MediaPlayer1.Open;
end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  MediaPlayer1.Stop;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if b then
    MediaPlayer1.Play;
end;



Отлично работает. Файл воспроизводится.

Автор: Craft 2.3.2008, 23:47
Посмотри  http://www.delphirus.com/modules.php?name=News&new_topic=6 Может этот вариант подойдет. Но здесь тоже с использованием MediaPlayer. Можеш попробовать через PlaySound(). В противном случае если тебя не устраивает MediaPlayer то можеш воспроизводить mp3 через DirectSound. Вариантов много.

Автор: Superklug 3.3.2008, 17:25
Цитата(THandle @  2.3.2008,  23:34 Найти цитируемый пост)
Отлично работает. Файл воспроизводится.

Я еще больше запутался... В вашем примере все работает. У меня практически тоже самое( Попробую найти ошибку.

Автор: Superklug 3.3.2008, 17:42
Ребята, спосибо всем за помощь!
Оказывается я сам намудрил) Забыл в потоке Synchronize прописать))) Теперь наконец-то все работает!  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)