2011-04-17 22 views

Respuesta

4

La mejor manera sería usar un BufferedWaveProvider como entrada para WaveOut. Luego, en la devolución de llamada DataAvailable de WaveIn, suministrar los datos grabados en el BufferedWaveProvider

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

Necesita ser consciente de que los tamaños de búfer predeterminado dará como resultado un retraso notable, por lo que si usted esperaba una baja latencia que pueda necesitar experimentar un poco con tamaños de búfer para ver qué tan bajo puede obtenerlo.

12

Este es el código que trabajó para mí:

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

     } 
    } 
} 
Cuestiones relacionadas