我尝试使用Unity3D开发应用程序,Unity3D必须访问麦克风并在套接字上发送捕获的音频。 我想在Hololens上运行这个应用程序。
我已经看到Unity的Microphone类没有自动检测句子结尾的方法,所以我想使用Windows.Media.Audio命名空间中的AudioGraph类,我在这里使用它。已经用于UWP项目;这是因为AudioGraph类自动检测句子的结尾并创建一个我可以在套接字上写的音频片段。
我已经创建了一个暴露某些功能的类库,我希望将它用作Unity中的托管插件。 我面临的问题是类库是在Unity编辑器中成功构建和导入的,但是当我运行Unity项目时,这将失败:
TypeLoadException:由于类型加载错误而无法找到方法
OR
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的麦克风类并自己实现静音检测功能吗?
答案 0 :(得分:0)
AudioGraph是一个UWP API。您的Unity项目是否针对UWP?我觉得它不是。
我不认为可以在Unity桌面应用程序中直接从Unity C#脚本中使用AudioGraph;我认为该配置中使用的Mono运行时无法连接到AudioGraph服务。由于这也是Unity Player中使用的运行时,我认为你在Unity内部播放场景时也无法使用AudioGraph。
但是,如果您的应用可以选择定位UWP,那么您的赔率就会提高。我实际上成功地创建了一个使用AudioGraph进行声音的UWP目标Unity项目。我必须:
这确实奏效了。我正在修改它,因为我决定我不希望我的核心音频处理在C#中。我还想要一个适用于桌面和UWP的解决方案,而这个解决方案却没有。我目前正在尝试决定是否围绕AudioGraph编写P / Invoke C ++包装器,或者编写基于WASAPI的P / Invoke C ++库。无论哪种方式,一旦我有一些东西,主持人允许,我会用链接更新这个答案。