Lecture de fichiers audio

De RAD Studio
Aller à : navigation, rechercher

Remonter à Tutoriel : Audio-vidéo dans FireMonkey

Ce tutoriel montre comment inclure et exécuter des données multimédia audio dans une application FireMonkey.

Conception de la fiche

  1. Utilisez la fiche créée lors du tutoriel précédent.
  2. Ajoutez à la disposition flux vide :
    • Un TLabel. Définissez son texte sur Playing.
    • Un TButton pour commencer la lecture du fichier audio enregistré en suivant les étapes du tutoriel précédent.
    • Un TButton pour arrêter ou suspendre la lecture du fichier audio.
  3. Remplacez le nom des deux boutons par PlayButton et StopPlayButton.
  4. Spécifiez que StopPlayButton sera désactivé en définissant la propriété Enable du bouton sur False.
  5. Ajoutez un TMediaPlayer à la fiche.
  6. Ajoutez deux autres TImages à la fiche. Définissez la propriété TImage.Bitmap de chaque TImage sur des images suggestives pour les actions de lecture et de pause. L'icône habituelle pour l'action lecture est une flèche et l'icône utilisée pour la pause représente deux barres verticales parallèles.
  7. Définissez toutes les images sur des positions et des tailles identiques. Les trois images devraient être entièrement superposées.
  8. Définissez la propriété Opacity de l'image sur 0. L'image visible sera l'image qui affiche le processus en cours d'exécution.
  9. Ajoutez un TTimer à la fiche. Définissez-le comme activé.
    La fiche doit ressembler à ceci :
    Audio Play Form Design.png

Implémentation

Pour lire un fichier audio en utilisant un TMediaPlayer, définissez la propriété FileName.

1. Double-cliquez sur le bouton Play pour lui attacher des gestionnaires d'événement OnClick.
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. Double-cliquez sur le bouton Stop/Pause pour lui attacher des gestionnaires d'événement OnClick.
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. Double-cliquez sur le timer pour lui attacher les gestionnaires d'événement OnTimer. Le timer est utilisé pour manipuler les opacités des images lors du processus de lecture.
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;
  }
}

Exécuter l'application

1. Exécutez le projet en appuyant sur F9.
2. Appuyez sur le bouton Record pour commencer l'enregistrement des données audio. La boîte de dialogue SaveDialog s'affiche.
3. Choisissez un chemin et un nom de fichier pour enregistrer les données enregistrées.
La fiche doit ressembler à ceci :
Recording process.png
4. Appuyez sur le bouton Stop pour arrêter l'enregistrement. Si l'enregistrement n'est pas finalisé en appelant la méthode StopCapture, le fichier sauvegardé ne sera pas correctement décodé lorsqu'il sera lu par un lecteur multimédia.
5. Appuyez sur le bouton Play. La lecture du fichier multimédia commence.
La fiche doit ressembler à ceci lors du processus de lecture :
Playing process.png
6. Appuyez sur le bouton Stop/Pause. La lecture du fichier multimédia est suspendue.
La fiche doit ressembler à ceci lors de la pause du fichier multimédia :
Stop process.png

Précédent

Suivant

Voir aussi

Exemples