2011-04-17 19 views

risposta

4

Il modo migliore sarebbe utilizzare un BufferedWaveProvider come input per WaveOut. Poi, nella richiamata DataAvailable di WaveIn, fornire i dati registrati al BufferedWaveProvider

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

Devi essere consapevole del fatto che le dimensioni del buffer di default si tradurrà in un notevole ritardo, quindi se speravano bassa latenza che potrebbe essere necessario sperimentare un po 'con le dimensioni del buffer per vedere quanto in basso si può ottenere.

12

Ecco il codice che ha funzionato per me:

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

     } 
    } 
} 
Problemi correlati