由于类型加载错误,Unity3D中的AudioGraph TypeLoadException无法找到方法

问题描述 投票:0回答:1

我正在尝试使用Unity3D开发一个应用程序,它必须访问麦克风并在套接字上发送捕获的音频。我想在Hololens上运行这个应用程序。

我已经看到Unity的Microphone类没有自动检测句子结尾的方法,所以我想使用Windows.Media.Audio命名空间中的AudioGraph类,我已经在UWP项目中使用过它;这是因为AudioGraph类自动检测句子的结尾并创建一个我可以在套接字上写的音频段。

我已经创建了一个暴露一些函数的类库,我想在Unity中使用它作为托管插件。我面临的问题是类库是在Unity编辑器中成功构建和导入的,但是当我运行Unity项目时,这将失败:

TypeLoadException:由于类型加载错误而无法找到方法

要么

TypeLoadException:加载类型加载时发生故障

我发现这个错误是由我在托管插件中的声明引起的:

AudioGraph graph;

删除每个引用并调用AudioGraph实例或方法,托管插件将正常工作,只有在调用属于Windows.Media.Audio的类时,插件才会失败。

作为测试,我在插件中添加了此方法:

public int c;

public void AddValues(int a, int b)
{
        c = a + b;
}

从Unity脚本执行此调用我没有得到错误:

UWPUtilities utils = new UWPUtilities();
Debug.Log("Generated random: " + utils.GenerateRandom(1, 99));

在dll项目中使用AudioGraph的实例,统一调试器甚至不会重新实现UWPUtilities的实例化,它会抛出TypeLoadException

我如何使用AudioGraph类或Windows.Media.Audio命名空间中的每个类?这种方法是否可行o我必须使用Unity的麦克风类并自己实现静音检测功能吗?

c# .net unity3d dll
1个回答
0
投票

AudioGraph是一个UWP API。您的Unity项目是否针对UWP?我觉得它不是。

我不认为可以直接从Unity桌面应用程序中的Unity C#脚本中使用AudioGraph;我认为该配置中使用的Mono运行时无法连接到AudioGraph服务。由于这也是Unity Player中使用的运行时,我认为在Unity内部播放场景时你也无法使用AudioGraph。

但是,如果您的应用可以选择定位UWP,那么您的赔率就会提高。我实际上成功地创建了一个使用AudioGraph进行声音的UWP目标Unity项目。我不得不:

  • 使用Unity应用程序所需的声音操作创建一个界面,并将此界面添加到Unity项目,以及一个包含“当前声音界面”的静态字段
  • 创建一个默认情况下使用的界面的模拟实现,当在Unity内部播放应用程序时(这让我可以使用Unity测试除声音之外的所有内容)
  • 使用AudioGraph创建一个单独的UWP .NET C#DLL项目来实现接口;将项目添加到Unity生成的UWP解决方案
  • 修改主UWP应用程序代码以更新静态“当前声音接口”字段,这样当在UWP下运行时,接口通过DLL将声音操作路由到AudioGraph

这实际上有效。我正在修改它,因为我决定我不希望我的核心音频处理在C#中。我还想要一个适用于桌面和UWP的解决方案,而这个解决方案却没有。我目前正在尝试决定是否围绕AudioGraph编写P / Invoke C ++包装器,或者编写基于WASAPI的P / Invoke C ++库。无论哪种方式,一旦我有一些东西,主持人允许,我会用链接更新这个答案。

© www.soinside.com 2019 - 2024. All rights reserved.