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();