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

.NET Framework下C#采集输出设备报错的解决方案咨询

基于.NET Framework的音频输出设备采集解决方案(解决VisioForge安装失败问题)

你的错误提示说明当前代码依赖的VisioForge组件安装失败,建议替换为.NET Framework原生支持的音频方案,避免依赖第三方商业组件的安装问题,以下是两种可行方案:

方案一:使用NAudio库(推荐)

  1. 安装NAudio包:在NuGet包管理器中搜索并安装适配.NET Framework版本的NAudio
  2. 替换代码如下:
using NAudio.Wave;

// 遍历所有输出设备
for (int n = 0; n < WaveOut.DeviceCount; n++)
{
    var caps = WaveOut.GetCapabilities(n);
    Console.WriteLine($"{caps.ProductName}");
}

注:NAudio的WaveOut类和你原代码结构高度一致,无需额外配置即可直接获取设备信息,完全规避VisioForge的安装问题。

方案二:使用Windows原生API(无第三方依赖)

如果不想引入第三方库,可直接调用Windows系统的winmm.dll原生函数:

using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public struct WAVEOUTCAPS
{
    public ushort wMid;
    public ushort wPid;
    public uint vDriverVersion;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
    public string szPname;
    public uint dwFormats;
    public ushort wChannels;
    public ushort wReserved1;
    public uint dwSupport;
}

public class WaveOutNative
{
    [DllImport("winmm.dll", CharSet = CharSet.Auto)]
    public static extern int waveOutGetNumDevs();

    [DllImport("winmm.dll", CharSet = CharSet.Auto)]
    public static extern int waveOutGetDevCaps(int uDeviceID, ref WAVEOUTCAPS pwoc, int cbwoc);
}

// 使用示例
int deviceCount = WaveOutNative.waveOutGetNumDevs();
for (int n = 0; n < deviceCount; n++)
{
    WAVEOUTCAPS caps = new WAVEOUTCAPS();
    WaveOutNative.waveOutGetDevCaps(n, ref caps, Marshal.SizeOf(caps));
    Console.WriteLine(caps.szPname);
}

错误原因说明

你原代码中的WaveOut属于VisioForge库,更新后该库的试用版(TRAIL)安装流程异常,导致组件无法正常加载。替换为上述两种方案即可彻底摆脱该依赖问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 16:27:06