【问题标题】:NAudio Plot waveform while recording in WaveViewer controlNAudio 在 WaveViewer 控件中记录时绘制波形
【发布时间】:2013-07-24 10:44:22
【问题描述】:

我们可以在录制时使用 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) 的第一个重载吗?如果是的话,请你举一个关于第一次重载的例子。

【问题讨论】:

    标签: naudio waveform


    【解决方案1】:

    我不建议尝试使用 waveViewer,尽管您可以复制代码并将其用作基础。如果您查看 NAudio 存储库中的 WPF 演示代码,它支持在录制时绘制波形。

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

    【讨论】:

      猜你喜欢
      • 2022-11-01
      • 2014-01-10
      • 1970-01-01
      • 1970-01-01
      • 2013-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-09
      相关资源
      最近更新 更多