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.