Rozwiązałem sam ten problem, ale w inny sposób. Z Twojej strony prosiłbym o bardziej szczegółowe podanie co mam wpisać w zdarzeniu TMediaPlayer::OnNoitify
- podaj kod źródłowy.
Tworzę globalną zmienną i:
int i=1;
Na Form1 umieszczam Timer1, Timer2, MediaPlayer, ProgressBar1. Timery ustawiam na Enabled na false.
Na Form1 w zdarzeniu OnCreate uruchamiam timer2:
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Timer2->Enabled = true;
}
W timer2 wpisuje w instrukcjach if ścieżki piosenek, otwieranie odtwarzacza, odtwarzanie, włączanie timera1 i wyłączanie timera2.
void __fastcall TForm1::Timer2Timer(TObject *Sender)
{
if(i == 1)
{
MediaPlayer1->FileName = "Muzyka/piosenka1.wav";
MediaPlayer1->Open();
MediaPlayer1->Play();
Timer1->Enabled = true;
Timer2->Enabled = false;
}
if (i ==2)
{
MediaPlayer1->FileName = "Muzyka/piosenka2.wav";
MediaPlayer1->Open();
MediaPlayer1->Play();
Timer1->Enabled = true;
Timer2->Enabled = false;
i=0;
}
}
Dla timer1 tworzę funkcję odtwarzania piosenki, czekania aż się wykona i powiększania pozycji piosenki o następną, a po wykonaniu tych czynności zamykam timer1 i otwieram timer2.
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
ProgressBar1->Max = MediaPlayer1->Length;
ProgressBar1->Position = MediaPlayer1->Position;
if(ProgressBar1->Position == MediaPlayer1->Length)
{
MediaPlayer1->Close();
Timer1->Enabled = false;
Timer2->Enabled = true;
i++;
}
}
Program tak jest zapętlony by po odtworzeniu 1 i 2 piosenki ponownie rozpoczął odtwarzanie od 1.
Na końcu funkcja zamykania MediaPlayer. Na Form1 w zdarzeniu OnClose zamykam MediaPlayer:
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
MediaPlayer1->Close();
}
Wiem, że to nie jest super rozbudowany odtwarzacz, ale ja potrzebowałem jedynie na stałe wmontować do mojego programu piosenki, które by się odtwarzały automatycznie jedna po drugiej i by były one napisane za pomocą MediaPlayer, a nie funkcji sndPlaySound.