.NET Framework下C#采集输出设备报错的解决方案咨询
基于.NET Framework的音频输出设备采集解决方案(解决VisioForge安装失败问题)
你的错误提示说明当前代码依赖的VisioForge组件安装失败,建议替换为.NET Framework原生支持的音频方案,避免依赖第三方商业组件的安装问题,以下是两种可行方案:
方案一:使用NAudio库(推荐)
- 安装NAudio包:在NuGet包管理器中搜索并安装适配.NET Framework版本的
NAudio - 替换代码如下:
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
相关产品推荐
相关产品推荐

