Wiedergeben von Audiodateien
Nach oben zu Tutorial: Audio-Video in FireMonkey
In diesem Tutorial wird gezeigt, wie Mediendaten in eine FireMonkey-Anwendung einbezogen und wiedergegeben werden.
Inhaltsverzeichnis
Formularentwurf
- Verwenden Sie das im vorherigen Tutorial erstellte Formular.
- Fügen Sie dem leeren TFlowLayout Folgendes hinzu:
-
- Eine TLabel-Komponente. Setzen Sie deren Text auf Playing.
- Ein TButton-Steuerelement zum Starten der Wiedergabe der im vorherigen Tutorial aufgenommenen Audiodatei.
- Ein TButton-Steuerelement zum Anhalten oder Unterbrechen der Wiedergabe der Audiodatei.
-
- Ändern Sie den Namen der beiden Schaltflächen in PlayButton bzw. StopPlayButton.
- Deaktivieren Sie StopPlayButton, indem Sie die Eigenschaft Enable der Schaltfläche auf False setzen.
- Fügen Sie dem Formular eine TMediaPlayer-Komponente hinzu.
- Fügen Sie dem Formular zwei weitere TImages-Komponenten hinzu. Setzen Sie die Eigenschaft TImage.Bitmap der TImage-Komponenten auf Bilder, die den Wiedergabe- bzw. den Unterbrechungsvorgang veranschaulichen. Normalweise ist das Symbol für die Wiedergabe ein Pfeil und für die Unterbrechung zwei parallele vertikale Striche.
- Legen Sie für alle Bilder dieselbe Position und dieselbe Größe fest. Die drei Bilder sollten sich vollständig überlagern.
- Setzen Sie die Eigenschaft Opacity aller Bilder auf
0
. Das sichtbare Bild ist das Bild, das den aktuell ausgeführten Vorgang anzeigt. - Fügen Sie dem Formular eine TTimer-Komponente hinzu, und aktivieren Sie sie.
Implementierung
Um eine Audiodatei mit einem TMediaPlayer, wiederzugeben, legen Sie den FileName fest.
- 1. Doppelklicken Sie auf die Schaltfläche Play, um OnClick-Ereignisbehandlungsroutinen hinzuzufügen.
Delphi:
procedure TForm1.PlayButtonClick(Sender: TObject);
begin
// This application plays only recorded data, so if there is no data recorded there is nothing to play.
if (Mic <> nil) and (Mic.State = TCaptureDeviceState.Stopped) then
begin
//Specifies the file to be played.
MediaPlayer1.FileName := Mic.FileName;
//Checks if the data can be decoded.
if MediaPlayer1.Media <> nil then
begin
if (MediaPlayer1.State = TMediaState.Stopped) then
begin
Timer1.Enabled := true;
StopPlayButton.Enabled := true;
MediaPlayer1.Play;
//Updates the opacity of each image.
// Image2 shows the play sign.
Image1.Opacity := 0;
Image2.Opacity := 1;
Image3.Opacity := 0;
end;
end;
end
else
begin
ShowMessage('The audio device is still capturing');
end;
end;
C++:
void __fastcall TForm1::PlayButtonClick(TObject *Sender)
{
// This application plays only recorded data, so if there is no data recorded there is nothing to play.
if ((Mic != NULL) && (Mic->State == TCaptureDeviceState::Stopped))
{
//Specifies the file to be played.
MediaPlayer1->FileName = Mic->FileName;
//Checks if the data can be decoded.
if (MediaPlayer1->Media != NULL)
{
Timer1->Enabled = 1;
StopPlayButton->Enabled = 1;
MediaPlayer1->Play();
//Updates the opacity of each image.
// Image2 shows the play sign.
Image1->Opacity = 0;
Image2->Opacity = 1;
Image3->Opacity = 0;
}
}
else
ShowMessage("The audio device is still capturing.");
}
- 2. Doppelklicken Sie auf die Schaltfläche Stop/Pause, um OnClick-Ereignisbehandlungsroutinen hinzuzufügen.
Delphi:
procedure TForm1.StopPlayButtonClick(Sender: TObject);
begin
if MediaPlayer1.Media <> nil then
begin
if MediaPlayer1.State = TMediaState.Playing then
begin
MediaPlayer1.Stop;
Image1.Opacity := 0;
Image2.Opacity := 0;
Image3.Opacity := 1;
Timer1.Enabled := false;
end
else
begin
Image1.Opacity := 0;
Image2.Opacity := 1;
Image3.Opacity := 0;
MediaPlayer1.Play;
Timer1.Enabled := true;
end;
end;
end;
C++:
void __fastcall TForm1::StopPlayButtonClick(TObject *Sender)
{
if (MediaPlayer1->Media != NULL)
{
if (MediaPlayer1->State == TMediaState::Playing)
{
MediaPlayer1->Stop();
Image1->Opacity = 0;
Image2->Opacity = 0;
Image3->Opacity = 1;
Timer1->Enabled = 0;
}
else
{
Image1->Opacity = 0;
Image2->Opacity = 1;
Image3->Opacity = 0;
Timer1->Enabled = 1;
}
}
}
- 3. Doppelklicken Sie auf den Timer, um OnTimer-Ereignisbehandlungsroutinen hinzuzufügen. Mit dem Timer wird die Opazität der Bilder während der Wiedergabe manipuliert.
Delphi:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if (MediaPlayer1.Media <> nil) and
(MediaPlayer1.CurrentTime = MediaPlayer1.Duration) then
begin
Image1.Opacity := 0;
Image2.Opacity := 0;
Image3.Opacity := 0;
StopPlayButton.Enabled:=false;
MediaPlayer1.Stop;
MediaPlayer1.CurrentTime:=0;
end;
end;
C++:
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
if ((MediaPlayer1->Media != NULL) &&
(MediaPlayer1->CurrentTime == MediaPlayer1->Duration))
{
Image1->Opacity = 0;
Image2->Opacity = 0;
Image3->Opacity = 0;
StopPlayButton->Enabled = 0;
MediaPlayer1->Stop();
MediaPlayer1->CurrentTime = 0;
}
}
Ausführen der Anwendung
- 1. Führen Sie das Projekt durch Drücken von F9 aus.
- 2. Drücken Sie die Schaltfläche Record, um mit der Aufnahme der Audiodaten zu beginnen. Das Dialogfeld SaveDialog wird geöffnet.
- 3. Wählen Sie einen Pfad und einen Dateinamen zum Speichern der aufgenommenen Daten aus.
- Das Formular sollte wie folgt aussehen:
- 4. Drücken Sie die Schaltfläche Stop, um die Aufnahme anzuhalten. Wenn Sie die Aufnahme nicht durch Aufruf der Methode StopCapture beenden, wird die gespeicherte Datei bei der Wiedergabe in einem Media-Player nicht korrekt decodiert.
- 5. Drücken Sie die Schaltfläche Play. Die Wiedergabe der Mediendatei wird gestartet.
- Das Formular sollte während der Wiedergabe folgendermaßen aussehen:
- 6. Drücken Sie die Schaltfläche Stop/Pause. Die Mediendatei wird unterbrochen.
- Das Formular sollte während der Unterbrechung der Mediendatei folgendermaßen aussehen:
Zurück
Weiter
Siehe auch
Beispiele
- PlayAudioFile (Beispiel)