为什么DataAvailable在5秒后停止被调用?

时间:2019-04-28 19:22:10

标签: c# naudio

这是我正在研究的C#编码的新领域,请原谅我对此的无知。我试图学习有关使用NAudio进行数字信号处理的更多信息。我首先尝试创建一个简单的控制台应用程序。使用下面的代码,NAudio“ DataAvailable”事件仅使用5秒钟,此时不再调用该事件。将数据保存到.WAV文件时,文件的长度也只有5秒。

我说“密西西比州1,密西西比州2等”,从而通过麦克风手动为语音测试计时。最多10次,以确保我至少尝试录制5秒以上。在“密西西比5”之后,录音将自动停止并触发“ RecordingStopped”事件。在“ DataAvailable”事件内部,我只是让它向输出窗口写入Guids以确保程序仍在运行,但是5秒钟后,它将停止写入输出控制台。

我是否缺少一个步骤告诉NAudio不断录制,直到用户触发事件然后迫使其停止?

这是我尝试使用的代码:

static void Main(string[] args)
{
    int deviceCount = WaveIn.DeviceCount;

    if (deviceCount > 0)
    {
        waveFileWriter = new WaveFileWriter(@"F:/" + Guid.NewGuid() + ".wav", new WaveFormat(44100, 24, WaveInEvent.GetCapabilities(deviceCount - 1).Channels));

        waveInEvent = new WaveInEvent();
        waveInEvent.DeviceNumber = deviceCount - 1;
        waveInEvent.WaveFormat = new WaveFormat(44100, 24, WaveInEvent.GetCapabilities(deviceCount - 1).Channels);

        WaveInProvider waveIn = new WaveInProvider(waveInEvent);
        waveInEvent.DataAvailable += new EventHandler<WaveInEventArgs>(waveInEvent_DataAvailable);
        waveInEvent.StartRecording();
    }

    // used to keep the console window open for testing...
    Console.ReadLine();
}

private static void waveInEvent_DataAvailable(object sender, WaveInEventArgs e)
{
    if (waveFileWriter == null)
    {
        return;
    }

    Console.WriteLine(Guid.NewGuid());
}

private static void waveInEvent_RecordingStopped(Object sender, StoppedEventArgs e)
{
    Console.Write("This is getting called automatically after 5 seconds... IDK why???");
}

我希望上面的代码可以无限期地运行,直到触发了一个停止记录的事件为止,但是事实并非如此。

谢谢。

更新:

为清楚起见,将“ waveIn”变量重命名为“ waveInProvider”。

1 个答案:

答案 0 :(得分:0)

请参阅@Mark Heath和我本人在以上文章中的评论。似乎您应该从WaveInProvider读取缓冲区,否则它会填满并引发异常。使用“ waveInProvider.Read(e.Buffer,0,e.BytesRecorded);”在您的“ DataAvailable”回调事件内部,以防止发生这种情况。