当声音输入达到一定水平时,使用naudio开始录制波形

时间:2011-12-12 20:43:18

标签: c# naudio

我正在尝试创建一个应用程序,允许我在每次输入音量大于给定音量时录制wav文件。

我有代码来记录按钮的声音,但我想自动化它,我的代码如下:

public partial class Form1 : Form
{
    private WaveIn waveIn;
    private WaveFileWriter writer;
    String outputFilename = @"c:\test.wav";

    public Form1()
    {
        InitializeComponent();

        int sampleRate = 22000;
        int channels = 1;
        waveIn = new WaveIn();
        waveIn.WaveFormat = new WaveFormat(sampleRate, channels);
        waveIn.DeviceNumber = 0;
        waveIn.DataAvailable += new EventHandler<WaveInEventArgs>(
            waveIn_DataAvailable);
        writer = new WaveFileWriter(outputFilename, waveIn.WaveFormat);        
        waveIn.StartRecording();   
    }

    void waveIn_DataAvailable(object sender, WaveInEventArgs e)
    {
        writer.WriteData(e.Buffer, 0, e.BytesRecorded);
    }

    private void button1_Click(object sender, EventArgs e)
    {
        waveIn.StopRecording();
        waveIn.Dispose();
        writer.Close();
    }
}

1 个答案:

答案 0 :(得分:3)

<{>>在waveIn_DataAvailable中,您可以通过查看e.Buffer中的字节来检查每个示例。 (假设您以16位记录,每对字节是一个样本 - 使用BitConverter.ToInt16)。如果任何样本超过您指定的阈值,则可以使用writer.WriteData进行书写。

要关闭录音,您可能需要检查是否已经过了一定数量的“静音”样本。