2013-07-24 53 views
0

我们可以使用waveViever绘制波形,同时记录?n音讯叠加的波形,而

private NAudio.Wave.WaveIn wi = null; 
    int waveInDevices = NAudio.Wave.WaveIn.DeviceCount; 
    WaveFileWriter waveWriter = null; 
    SaveFileDialog save; 
    private void button2_Click(object sender, EventArgs e) 
    { 
     save = new SaveFileDialog(); 
     save.Filter = "Wave File (*.wav)|*.wav;"; 
     if (save.ShowDialog() != System.Windows.Forms.DialogResult.OK) return; 

     int deviceNumber = 0; 

     wi = new WaveIn(); 
     wi.DeviceNumber = deviceNumber; 
     wi.WaveFormat = new WaveFormat(44100, WaveIn.GetCapabilities(deviceNumber).Channels); 
     wi.DataAvailable += new EventHandler<WaveInEventArgs>(wi_DataAvailable); 
     waveWriter = new NAudio.Wave.WaveFileWriter(save.FileName, wi.WaveFormat); 
     wi.StartRecording(); 
     timer1.Start(); 
    } 
    private void wi_DataAvailable(object sender, WaveInEventArgs e) 
    { 
     if (waveWriter == null) return; 

     waveWriter.WriteData(e.Buffer, 0, e.BytesRecorded); 
     waveWriter.Flush(); 

    } 
    private void timer1_Tick(object sender, EventArgs e) 
    { 

     waveViewer1.WaveStream = new WaveFileReader(save.Filename); 
    } 

我使用的代码语句来记录文件,你想读文件中waveViewer.However定时器和情节波形的每一个周期的时间间隔它提供了一个错误“的文件是由另一个进程使用”。无论如何要这样做。我应该使用WaveFileReader(Stream streamInput)的第一个重载吗?如果是,请您举例说明第一次超载。

回答

0

我不会建议尝试使用waveViewer,虽然你可以把代码的副本,并用它作为基础。如果您查看NAudio存储库中的WPF演示代码,它支持在录制时绘制波形。

的基本原则是每次DataAvailable事件触发,计算录制音频的最大峰值,并添加到您的波形显示的时间。