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

制作音效板选择音频捕获设备触发COMException错误求助

问题描述

制作音效板时,选择音频捕获设备触发以下COM异常:

System.Runtime.InteropServices.COMException
HResult=0x88890003
Message=0x88890003
Source=NAudio.Wasapi
StackTrace:
at NAudio.CoreAudioApi.AudioClient.get_AudioRenderClient()
at NAudio.Wave.WasapiOut.Init(IWaveProvider waveProvider)
at SoundFish.Form1.listBoxSounds_SelectedIndexChanged(Object sender, EventArgs e) in C:\Users\user\source\repos\SoundFish\SoundFish\Form1.cs:line 183
at System.Windows.Forms.ListBox.OnSelectedIndexChanged(EventArgs e)
at System.Windows.Forms.ListBox.WmReflectCommand(Message& m)
at System.Windows.Forms.ListBox.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, WM msg, IntPtr wparam, IntPtr lparam)

已尝试更换捕获设备、重启电脑、关闭占用麦克风的应用,问题仍存在。

解决方案
  • 修正设备类型匹配错误
    错误堆栈显示代码调用了WasapiOut(音频渲染输出类)的初始化方法,但当前操作的是捕获设备。需确认代码是否误将捕获设备当作渲染设备处理:捕获设备应使用WasapiCapture或WasapiLoopbackCapture类,而非WasapiOut。

  • 实时枚举有效设备
    不要缓存设备列表,每次选择设备前重新枚举活跃的音频捕获设备,避免使用已失效的设备实例。示例代码:

    var enumerator = new MMDeviceEnumerator();
    var activeCaptureDevices = enumerator.EnumerateAudioEndPoints(DataFlow.Capture, DeviceState.Active);
    // 用最新的活跃设备列表更新选择框
    
  • 添加设备状态与格式检查
    在初始化音频客户端前,先验证设备状态和格式兼容性,避免调用无效的设备接口:

    if (audioClient.Device.State == DeviceState.Active && 
        audioClient.IsFormatSupported(AudioClientShareMode.Shared, targetWaveFormat))
    {
        // 执行后续初始化逻辑
    }
    else
    {
        // 提示设备不可用或格式不支持
    }
    
  • 升级NAudio版本
    旧版本NAudio存在部分设备兼容性BUG,升级至最新稳定版可修复已知的COM交互问题。

  • 检查系统音频权限
    确认应用已获得麦克风访问权限(Windows设置→隐私和安全性→麦克风),同时关闭后台所有占用音频会话的进程(如录屏软件、语音助手)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 21:22:54