我们可以使用waveViever在录制时绘制波形吗?
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中每个定时器的滴答间隔读取文件并绘制波形。但是它会给出“另一个进程正在使用文件”的错误。无论如何要做到这一点。我应该使用WaveFileReader的首次重载(Stream streamInput)吗?如果是,请举例说明首次超载。
答案 0 :(得分:0)
我不建议尝试使用waveViewer,尽管您可以获取代码的副本并将其用作基础。如果您查看NAudio存储库中的WPF演示代码,它支持在录制时绘制波形。
基本原则是每次触发DataAvailable事件时,计算录制音频的最大峰值并将其添加到波形显示中。