Aufnehmen von Audio

Aus Appmethod Topics
Wechseln zu: Navigation, Suche

Nach oben zu Tutorial: Audio-Video in FireMonkey

In diesem Tutorial wird gezeigt, wie mit FireMonkey Audio-Mediendaten aufgenommen werden.

Unterstützte Dateiformate

Mediendateien sollten je nach Plattform in den folgenden Formaten gespeichert und verwendet werden:

  • .wav für Windows
  • .caf für iOS und Mac OS X
  • .3gp für Android

Sie können auch andere Mediendateitypen, wie z. B. MP3-Dateien, wiedergeben.

Formularentwurf

  1. Wählen Sie Datei > Neu > Geräteübergreifende Anwendung - Object Pascal > Leere Anwendung.
  1. Fügen Sie dem Formular eine TGridLayout-Komponente hinzu. Legen Sie im Objektinspektor für die TGridLayout-Komponente die folgenden Einstellungen fest:
    • Setzen Sie Align auf MostTop.
    • Setzen Sie ItemWidth auf die Hälfte der Gesamtbreite des Formulars.
  2. Fügen Sie dem TGridLayout zwei TFlowLayout-Objekte hinzu (das zweite TFlowLayout wird im nächsten Tutorial: Wiedergeben von Audiodateien verwendet).
  3. Fügen Sie dem ersten TFlowLayout Folgendes hinzu:
    • Eine TLabel-Komponente. Setzen Sie deren Text auf Capturing.
    • Ein TButton-Steuerelement zum Starten der Datenaufzeichnung.
    • Ein TButton-Steuerelement zum Anhalten der Datenaufzeichnung.
  4. Ändern Sie den Namen der beiden Schaltflächen in RecordButton und StopButton.
  5. Deaktivieren Sie StopButton, indem Sie die Eigenschaft Enable der Schaltfläche auf False setzen.
  6. Fügen Sie dem Formular eine TSaveDialog-Komponente hinzu.
  7. Fügen Sie eine TImage-Komponente hinzu. Setzen Sie die Eigenschaft Bitmap von TImage auf ein Bild, das den Aufzeichnungsvorgang veranschaulicht. Normalerweise wird ein roter Kreis als Symbol für die Aufzeichnung verwendet.
    Das Formular sollte wie folgt aussehen:
    Audio Record Form Design.png

Implementierung

1. Fügen Sie die Unit FMX.Media hinzu:
Object Pascal:
// Delphi version of the implementation
uses
 FMX.Media;
C++:
// C++ version of the implementation
#include <FMX.Media.hpp>
2. Deklarieren Sie in der Klasse TForm1 einen public-TAudioCaptureDevice-Member mit Namen Mic:
Object Pascal:
type
  TForm1 = class(TForm)
   // ...............
  public
    Mic: TAudioCaptureDevice;
C++:
  class TForm1 : public TForm
  // ...............
  public:
    TAudioCaptureDevice *Mic;
3. Setzen Sie die Eigenschaft Opacity des Bildes auf 0. Das Bild ist nur sichtbar, wenn die Aufnahme beginnt.
4. Doppelklicken Sie auf die Schaltfläche Record, um OnClick-Ereignisbehandlungsroutinen hinzuzufügen:
Object Pascal:
procedure TForm1.RecordButtonClick(Sender: TObject);
begin
  //Get the default microphone
  Mic := TCaptureDeviceManager.Current.DefaultAudioCaptureDevice;
  if Mic <> nil then
  begin
    //Set the SaveDialog filter to choose only the supported extension  
    SaveDialog1.Filter :=  Mic.FilterString;
    if SaveDialog1.Execute then
    begin
      RecordButton.Enabled := false;
      StopButton.Enabled := true;
      //Gets the name of the file where to save the recorded data
      Mic.FileName := SaveDialog1.FileName;
      Mic.StartCapture;
      Image1.Opacity:=1;
    end;
  end
  else
  begin
    ShowMessage('Audio capturing device not available');
  end;
end;
C++:
void __fastcall TForm1::RecordButtonClick(TObject *Sender) 
{
  //Get the default microphone
  Mic = TCaptureDeviceManager::Current->DefaultAudioCaptureDevice;
  if (Mic != NULL) 
  {
    //Set the SaveDialog filter to choose only the supported extension
    SaveDialog1->Filter = Mic->FilterString;
    if (SaveDialog1->Execute()) 
    {
      RecordButton->Enabled = 0;
      StopButton->Enabled = 1;
      //Gets the name of the file where to save the recorded data
      Mic->FileName = SaveDialog1->FileName;
      Mic->StartCapture();
      Image1->Opacity = 1;
    }
  }
  else
    ShowMessage("Audio capturing device not available.");
}
5. Doppelklicken Sie auf die Schaltfläche Stop, um OnClick-Ereignisbehandlungsroutinen zuzuordnen:
Object Pascal:
procedure TForm1.StopButtonClick(Sender: TObject);
begin
  if (Mic <> nil) and (Mic.State = TCaptureDeviceState.Capturing) then
  begin
    Mic.StopCapture;
    Image1.Opacity := 0;
    StopButton.Enabled := false;
    RecordButton.Enabled := true;
  end;
end;
C++:
void __fastcall TForm1::StopButtonClick(TObject *Sender) 
{
  if ((Mic != NULL) && (Mic->State == TCaptureDeviceState::Capturing)) 
  {
    Mic->StopCapture();
    Image1->Opacity = 0;
    StopButton->Enabled = 0;
    RecordButton->Enabled = 1;
  }
}

Ausführen der Anwendung

1. Drücken Sie F9, um das Projekt auszuführen.
2. Drücken Sie die Schaltfläche Record, um die Aufnahme von Audiodaten zu beginnen. Das Dialogfeld SaveDialog wird geöffnet.
3. Wählen Sie einen Pfad und einen Dateinamen zum Speichern der aufgenommenen Daten aus.
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.

Zurück

Weiter

Siehe auch