Enregistrement audio en C# avec la bibliothèque NAudio

Pour capturer de l'audio et l'enregistrer au format WAV en utilisant C#, la bibliothèque Naudio s'avère pratique, notammant après des tentatives infrcutueuses avec DirectX. La bibliothèque Naudio peut être téléchargée depuis le site officiel : http://naudio.codeplex.com/.

Voici une interface définissant les opérations de base pour l'enregistrement :

using System;

namespace EnregistrementAudio
{
    public interface IEnregistreur
    {
        void ConfigurerFichier(string chemin);
        void Demarrer();
        void Arreter();
    }
}

Une classe d'implémentation utilisant NAudio pour gérer l'enregistrement :

using NAudio.Wave;
using System;

namespace EnregistrementAudio
{
    class EnregistreurNAudio : IEnregistreur
    {
        private WaveIn sourceEntree = null;
        private WaveFileWriter writerFichier = null;
        private string cheminFichier = "";

        public void Demarrer()
        {
            sourceEntree = new WaveIn();
            sourceEntree.WaveFormat = new WaveFormat(16000, 16, 1);

            sourceEntree.DataAvailable += SurDonneesDisponibles;
            sourceEntree.RecordingStopped += SurArretEnregistrement;

            writerFichier = new WaveFileWriter(cheminFichier, sourceEntree.WaveFormat);

            sourceEntree.StartRecording();
        }

        public void Arreter()
        {
            if (sourceEntree != null)
            {
                sourceEntree.StopRecording();
                sourceEntree.Dispose();
                sourceEntree = null;
            }

            if (writerFichier != null)
            {
                writerFichier.Dispose();
                writerFichier = null;
            }
        }

        public void ConfigurerFichier(string chemin)
        {
            cheminFichier = chemin;
        }

        private void SurDonneesDisponibles(object emetteur, WaveInEventArgs arguments)
        {
            if (writerFichier != null)
            {
                writerFichier.Write(arguments.Buffer, 0, arguments.BytesRecorded);
                writerFichier.Flush();
            }
        }

        private void SurArretEnregistrement(object emetteur, StoppedEventArgs arguments)
        {
            Arreter();
        }
    }
}

Exemple d'utilisasion :

var enregistreur = new EnregistreurNAudio();
enregistreur.ConfigurerFichier("sortie.wav");
enregistreur.Demarrer();
// ... après un certain temps ou sur événement ...
enregistreur.Arreter();

Étiquettes: C# naudio enregistrement audio format WAV

Publié le 25 juillet à 11h42