Enregistrement audio

De Appmethod Topics
Aller à : navigation, rechercher

Remonter à Tutoriel : Audio-vidéo dans FireMonkey

Ce tutoriel montre comment utiliser FireMonkey pour capturer des données multimédia audio.

Formats de fichiers supportés

Nous vous recommandons d'enregistrer et d'utiliser des fichiers multimédia aux formats suivants selon la plate-forme :

  • .wav sur Windows
  • .caf sur iOS et Mac OS X
  • .3gp sur Android

Vous pouvez également lire d'autres types de fichiers multimédia, tels que les fichiers MP3.

Conception de la fiche

  1. Sélectionnez : Fichier > Nouveau > Application multi-périphérique > Application vide.
  1. Ajoutez un TGridLayout sur la fiche. La disposition ayant la focalisation, définissez les paramètres suivants dans l'inspecteur d'objets :
    • Align sur MostTop.
    • ItemWidth sur la moitié de la largeur totale de la fiche.
  2. Ajoutez deux objets TFlowLayout au TGridLayout (la deuxième disposition flux sera utilisée dans le prochain tutoriel : Lecture de fichiers audio).
  3. Ajoutez les composants suivants au premier TFlowLayout :
    • Un TLabel. Définissez son texte sur Capturing.
    • Un TButton pour commencer l'enregistrement des données.
    • Un TButton pour arrêter l'enregistrement des données.
  4. Remplacez le nom des deux boutons par RecordButton et StopButton.
  5. Spécifiez que StopButton sera désactivé en définissant la propriété Enable du bouton sur False.
  6. Ajoutez un TSaveDialog à la fiche.
  7. Ajoutez un TImage. Définissez la propriété du Bitmap du TImage sur une image suggestive pour le processus d'enregistrement. L'icône généralement utilisée pour un processus d'enregistrement est un cercle rouge.
    La fiche doit ressembler à ceci :
    Audio Record Form Design.png

Implémentation

1. Incluez l'unité FMX.Media :
Object Pascal :
// Delphi version of the implementation
uses
 FMX.Media;
C++ :
// C++ version of the implementation
#include <FMX.Media.hpp>
2. Déclarez un membre public TAudioCaptureDevice nommé Mic à la classe TForm1 :
Object Pascal :
type
  TForm1 = class(TForm)
   // ...............
  public
    Mic: TAudioCaptureDevice;
C++ :
  class TForm1 : public TForm
  // ...............
  public:
    TAudioCaptureDevice *Mic;
3. Définissez la propriété Opacity de l'image sur 0. L'image n'est visible que lorsque le processus d'enregistrement démarre.
4. Double-cliquez sur le bouton Record pour lui attacher des gestionnaires d'événement OnClick.
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. Double-cliquez sur le bouton Stop pour lui attacher des gestionnaires d'événement OnClick.
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;
  }
}

Exécuter l'application

1. Pour exécuter le projet, appuyez sur F9.
2. Pour commencer l'enregistrement des données audio, appuyez sur le bouton Record. La boîte de dialogue SaveDialog s'affiche.
3. Choisissez un chemin et un nom de fichier pour enregistrer les données enregistrées.
4. Pour arrêter l'enregistrement, appuyez sur le bouton Stop. Si l'enregistrement ne s'arrête pas en appelant la méthode StopCapture, le fichier sauvegardé ne sera pas correctement décodé lorsqu'il sera lu par un lecteur multimédia.

Précédent

Suivant

Voir aussi