Wiedergeben von Audiodateien

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Tutorial: Audio-Video in FireMonkey

In diesem Tutorial wird gezeigt, wie Mediendaten in eine FireMonkey-Anwendung einbezogen und wiedergegeben werden.

Formularentwurf

  1. Verwenden Sie das im vorherigen Tutorial erstellte Formular.
  2. 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.
  3. Ändern Sie den Namen der beiden Schaltflächen in PlayButton bzw. StopPlayButton.
  4. Deaktivieren Sie StopPlayButton, indem Sie die Eigenschaft Enable der Schaltfläche auf False setzen.
  5. Fügen Sie dem Formular eine TMediaPlayer-Komponente hinzu.
  6. 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.
  7. Legen Sie für alle Bilder dieselbe Position und dieselbe Größe fest. Die drei Bilder sollten sich vollständig überlagern.
  8. Setzen Sie die Eigenschaft Opacity aller Bilder auf 0. Das sichtbare Bild ist das Bild, das den aktuell ausgeführten Vorgang anzeigt.
  9. Fügen Sie dem Formular eine TTimer-Komponente hinzu, und aktivieren Sie sie.
    Das Formular sollte wie folgt aussehen:
    Audio Play Form Design.png

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:
Recording process.png
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:
Playing process.png
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:
Stop process.png

Zurück

Weiter

Siehe auch

Beispiele