通过CSCore音频库接收NotSupportedException

时间:2019-05-02 04:38:52

标签: c# .net unity3d mono

我正在尝试使用在Unity中运行的CSCore(https://github.com/filoe/cscore)来获取默认音频终结点,并且收到System.NotSupportedException。我正在使用Unity NUnit测试框架进行测试。奇怪的是,当在编辑器中运行代码时,它可以工作,但是构建会收到此异常。有人可以解释为什么会这样吗?

我正在执行的构建是x64,我检查了我正在使用的DLL是否同时针对x86和x64构建。我正在使用1.2.0 Release DLL。下面提供了测试代码和异常堆栈跟踪:

[Test]
public void GetAudioEndpoint_Default_NoException()
{
    Assert.DoesNotThrow(delegate ()
    {
        var deviceEnumerator = new MMDeviceEnumerator();
        var device = deviceEnumerator.GetDefaultAudioEndpoint(DataFlow.Render, Role.Multimedia);
    });
}
GetAudioEndpoint_Default_NoException (0.039s)
---
Expected: No Exception to be thrown
  But was:  <System.NotSupportedException: Specified method is not supported.
  at (wrapper cominterop) CSCore.CoreAudioAPI.MMDeviceEnumerator+MMDeviceEnumeratorObject..ctor()
  at CSCore.CoreAudioAPI.MMDeviceEnumerator.CreateMmDeviceEnumerator () [0x00000] in <b6880cc671004d3aa0cc66420dbddb79>:0 
  at CSCore.CoreAudioAPI.MMDeviceEnumerator..ctor () [0x00000] in <b6880cc671004d3aa0cc66420dbddb79>:0 
  at CSCore.Tests.DeviceTests+<>c.<GetAudioEndpoint_Default_NoException>b__0_0 () [0x00001] in ***\DeviceTests.cs:13 
  at NUnit.Framework.Constraints.ThrowsConstraint+VoidInvocationDescriptor.Invoke () [0x00001] in <59819be142c34115ade688f6962021f1>:0 
  at NUnit.Framework.Constraints.ThrowsConstraint+ExceptionInterceptor.Intercept (System.Object invocation) [0x0000a] in <59819be142c34115ade688f6962021f1>:0 >
---
at CSCore.Tests.DeviceTests.GetAudioEndpoint_Default_NoException () [0x00001] in ***\DeviceTests.cs:11

2 个答案:

答案 0 :(得分:0)

您是否从Assetstore导入了cscore?如果不是,则需要将该dll添加到您的插件文件夹中(如果有dll,请添加一个)。

答案 1 :(得分:0)

最终的原因是,尽管我的脚本运行时版本是.NET 4.X,但我的API兼容性级别仍设置为2.0。这意味着Unity遗漏了CSCore依赖的必需的.NET 4.X依赖项。

正确配置,可通过播放器设置进行访问:

Solution