2011-04-17 1 views

ответ

4

Лучшим способом было бы использовать BufferedWaveProvider в качестве входа в WaveOut. Тогда в DataAvailable обратного вызова WaveIn, предоставить данные, записанные в BufferedWaveProvider

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

Вы должны знать, что размеры буфера по умолчанию приведут к заметной задержке, так что если вы были в надежду на низкую латентность вам могут понадобиться немного поэкспериментировать с размерами буфера, чтобы узнать, насколько вы можете получить его.

12

Вот код, который работал на меня:

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

     } 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^