Enregistrement des entrées de NAudio WaveIn et sortie vers NAudio WaveOut

Je veux pouvoir obtenir l’entrée d’un périphérique de microphone via NAudio.WaveIn, puis émettre cette entrée exacte sur un périphérique de sortie via NAudio.WaveOut.

Comment je ferais ça?

Voici le code qui a fonctionné pour moi:

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using NAudio.Wave; using NAudio.CoreAudioApi; namespace WindowsFormsApplication1 { public partial class Form4 : Form { private BufferedWaveProvider bwp; WaveIn wi; WaveOut wo; public Form4() { InitializeComponent(); wo = new WaveOut(); wi = new WaveIn(); wi.DataAvailable += new EventHandler(wi_DataAvailable); bwp = new BufferedWaveProvider(wi.WaveFormat); bwp.DiscardOnBufferOverflow = true; wo.Init(bwp); wi.StartRecording(); wo.Play(); } void wi_DataAvailable(object sender, WaveInEventArgs e) { bwp.AddSamples(e.Buffer, 0, e.BytesRecorded); } } } 

Le meilleur moyen serait d’utiliser BufferedWaveProvider comme entrée de WaveOut. Ensuite, dans le rappel DataAvailable de WaveIn, fournissez les données enregistrées au BufferedWaveProvider

 void DataAvailable(object sender, WaveInEventArgs args) { bufferedWaveProvider.AddSamples(args.Buffer, 0, args.BytesRecorded); } 

Vous devez savoir que la taille de la mémoire tampon par défaut entraînera un retard notable. Par conséquent, si vous espériez une latence faible, vous devrez peut-être expérimenter un peu la taille de la mémoire tampon pour voir à quel point vous pouvez l’obtenir.