You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NAudio中WaveInEvent的DataAvailable事件未触发问题求助

WaveInEvent的DataAvailable事件未触发排查与解决

问题场景

基于net6.0-windows的控制台应用中,使用NAudio 2.1.0的WaveInEvent进行录音时,DataAvailable事件始终无法触发。已尝试遍历所有可用音频设备,问题仍未解决。

相关代码

初始化WaveInEvent的代码:

_msWaveInput = new()
{
    DeviceNumber = validDeviceNumber,
    WaveFormat = new NAudio.Wave.WaveFormat(rate: 48000, bits: 16, channels: 2),
    NumberOfBuffers = 1,
    BufferMilliseconds = bufferSizeMs
};

_msWaveInput.DataAvailable += WaveIn_DataAvailable;            
_msWaveInput?.StartRecording();

private void WaveIn_DataAvailable(object? sender, WaveInEventArgs e)
{
   // 从未触发!
}

项目配置

<PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net6.0-windows</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
    <Platforms>AnyCPU;x64</Platforms>
  </PropertyGroup>

NAudio版本

<PackageReference Include="NAudio" Version="2.1.0" />

已尝试操作

遍历所有可用设备编号逐一测试:

for (int i = -1; i < NAudio.Wave.WaveIn.DeviceCount; i++)
{
    // i为设备编号,已全部试过!
}

解决方案

针对控制台应用中WaveInEvent事件不触发的问题,可从以下方向排查修复:

  • 阻止主线程退出:控制台程序启动录音后,若主线程直接结束,WaveInEvent的后台线程会被终止,事件自然无法触发。在StartRecording()后添加阻塞逻辑,比如Console.ReadLine()或new ManualResetEvent(false).WaitOne(),让程序保持运行状态。
  • 适配设备支持的音频格式:部分设备可能不支持48000Hz、16位双声道的格式。通过WaveIn.GetCapabilities(i)获取设备的支持参数,选择匹配的格式初始化WaveFormat,比如改用更通用的44100Hz采样率。
  • 调整缓冲区设置:NumberOfBuffers = 1容易引发缓冲区策略异常,建议设置为2或3(NAudio推荐的默认值),提升录音稳定性。
  • 确保对象生命周期:_msWaveInput必须是类级别的成员变量,不能是局部变量。如果是局部变量,初始化后可能被GC回收,导致事件无法触发。

示例修改代码:

_msWaveInput = new()
{
    DeviceNumber = validDeviceNumber,
    WaveFormat = new NAudio.Wave.WaveFormat(rate: 44100, bits: 16, channels: 2),
    NumberOfBuffers = 2,
    BufferMilliseconds = 100
};

_msWaveInput.DataAvailable += WaveIn_DataAvailable;            
_msWaveInput.StartRecording();

Console.WriteLine("正在录音,按任意键停止...");
Console.ReadLine(); // 阻塞主线程

_msWaveInput.StopRecording();
_msWaveInput.Dispose();

内容的提问来源于stack exchange,提问作者James Harcourt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 06:05:05