首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HowTo:统一5的uPD

HowTo:统一5的uPD
EN

Stack Overflow用户
提问于 2016-10-25 09:10:29
回答 3查看 611关注 0票数 0

第一个岗位。如果我违反了任何规则请告诉我!

我想尝试使用纯数据和统一5。似乎uPD是最合适的。我遵循了github页面上的说明,加载了第一个示例场景。统一控制台用dll报告错误:

代码语言:javascript
复制
Failed to load 'Assets/Magicolo/AudioTools/PureData/Plugins/libpdcsharp.dll', expected 64 bit architecture (IMAGE_FILE_MACHINE_AMD64), but was IMAGE_FILE_MACHINE_I386. You must recompile your plugin for 64 bit architecture.

因此,我克隆了主要的libpd,并使用包含的批处理文件来构建x64 dll。我在统一项目中替换了libpdcsharp.dll,控制台现在报告:

代码语言:javascript
复制
DllNotFoundException: Assets/Magicolo/AudioTools/PureData/Plugins/libpdcsharp.dll
LibPDBinding.LibPD.ProcessArgs[Int32] (System.Int32[] args, System.String& debug) (at Assets/Magicolo/AudioTools/PureData/LibPD/LibPDNativeMessaging.cs:402)
LibPDBinding.LibPD.SendMessage[Int32] (System.String receiver, System.String message, System.Int32[] args) (at Assets/Magicolo/AudioTools/PureData/LibPD/LibPDNativeMessaging.cs:354)
(wrapper synchronized) LibPDBinding.LibPD:SendMessage (string,string,int[])
LibPDBinding.LibPD.ComputeAudio (Boolean state) (at Assets/Magicolo/AudioTools/PureData/LibPD/LibPDNativeMethods.cs:238)
(wrapper synchronized) LibPDBinding.LibPD:ComputeAudio (bool)
LibPDBinding.LibPD.Release () (at Assets/Magicolo/AudioTools/PureData/LibPD/LibPDNativeMethods.cs:207)
(wrapper synchronized) LibPDBinding.LibPD:Release ()
LibPDBinding.LibPD.ReInit () (at Assets/Magicolo/AudioTools/PureData/LibPD/LibPDNativeMethods.cs:79)
(wrapper synchronized) LibPDBinding.LibPD:ReInit ()
LibPDBinding.LibPD..cctor () (at Assets/Magicolo/AudioTools/PureData/LibPD/LibPDNativeMethods.cs:65)
Rethrow as TypeInitializationException: An exception was thrown by the type initializer for LibPDBinding.LibPD
Magicolo.AudioTools.PureDataBridge.SetAudioSettings () (at Assets/Magicolo/AudioTools/PureData/PureDataBridge.cs:46)
Magicolo.AudioTools.PureDataBridge.StartLibPD () (at Assets/Magicolo/AudioTools/PureData/PureDataBridge.cs:25)
Magicolo.AudioTools.PureDataBridge.Start () (at Assets/Magicolo/AudioTools/PureData/PureDataBridge.cs:50)
PureData.StartAll () (at Assets/Magicolo/AudioTools/PureData/PureData.cs:141)
PureData.Initialize () (at Assets/Magicolo/AudioTools/PureData/PureData.cs:58)
PureData.Awake () (at Assets/Magicolo/AudioTools/PureData/PureData.cs:173)

我还尝试将libPDBinding.dll文件从主libpd复制到统一项目,但没有效果。我不知道下一步该去哪里,所以任何帮助都将不胜感激!

进一步进展

建议尝试NuGet来获得绑定dll。在这个问题上,我得到了一个关于我的统一项目/visual解决方案和nuget包libPDBinding版本0.10.0之间的框架不匹配的错误。这与unitys的配置文件有关,如题为“在中使用NuGet”的文章所描述的那样。我不能在这里张贴链接,因为我太新了。

然而,我认为我成功地编译了自己的libPDBinding.dll。很抱歉把它拖了出来,只是确定我这样做是对的:在使用libPD\mingw64_build_csharp.bat编译了x64版本的libpdcsharp.dll之后,我在VS解决方案中引用了这个和libpd\libs\mingw64\libwinthread-1.dll,并得到了用.NET 3.5构建的结果LibPDBinding.dll。如前所述,libpdcsharp.dll是使用批处理/make文件编译的,那么我是否正确地假定该文件是用正确的设置构建的?

我继续复制这3个dll的统一资产文件夹供参考-这是一个空白的统一项目,与uPD作为唯一的包,加载到一个uPD示例场景。

在运行时,我仍然会收到一些错误和一些visual警告,如下所示。

统一运行时错误:

代码语言:javascript
复制
EntryPointNotFoundException: libpd_safe_init
LibPDBinding.LibPD.ReInit () (at Assets/Magicolo/AudioTools/PureData/LibPD/LibPDNativeMethods.cs:81)
(wrapper synchronized) LibPDBinding.LibPD:ReInit ()
LibPDBinding.LibPD..cctor () (at Assets/Magicolo/AudioTools/PureData/LibPD/LibPDNativeMethods.cs:65)
Rethrow as TypeInitializationException: An exception was thrown by the type initializer for LibPDBinding.LibPD
Magicolo.AudioTools.PureDataBridge.SetAudioSettings () (at Assets/Magicolo/AudioTools/PureData/PureDataBridge.cs:46)
Magicolo.AudioTools.PureDataBridge.StartLibPD () (at Assets/Magicolo/AudioTools/PureData/PureDataBridge.cs:25)
Magicolo.AudioTools.PureDataBridge.Start () (at Assets/Magicolo/AudioTools/PureData/PureDataBridge.cs:50)
PureData.StartAll () (at Assets/Magicolo/AudioTools/PureData/PureData.cs:141)
PureData.Initialize () (at Assets/Magicolo/AudioTools/PureData/PureData.cs:58)
PureData.Awake () (at Assets/Magicolo/AudioTools/PureData/PureData.cs:173)

Visual警告x50左右:

代码语言:javascript
复制
Warning CS0436  The type 'LibPD' in 'D:\unity projects\libpdinunity\Assets\Magicolo\AudioTools\PureData\LibPD\LibPdNativeUnity.cs' conflicts with the imported type 'LibPD' in 'LibPDBinding, Version=0.3.0.177, Culture=neutral, PublicKeyToken=null'. Using the type defined in 'D:\unity projects\libpdinunity\Assets\Magicolo\AudioTools\PureData\LibPD\LibPdNativeUnity.cs'.   libpdinunity.CSharp D:\unity projects\libpdinunity\Assets\Magicolo\AudioTools\PureData\PureDataCommunicator.cs  87  Active

再次感谢你的帮助。非常感谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-10-25 16:42:30

起作用了。据我所知,uPD github代码有一个错误。希望能修好。同时,我刚刚从零开始这个过程,这就是我为了让uPD测试场景在统一5中工作所做的事情:

  1. 从github接uPD。里面有一个统一的包裹
  2. 从github接libPD。
  3. 按照libPD github页面上的说明编译libpdcsharp.dll的x64版本
  4. 用您编译的x64版本替换您的统一项目中现有的x64
  5. 在libpd文件中找到libpd\libs\mingw64 64\libwin线程-1.dll,并将其放在您的统一项目中--与另一个dll相同的位置是可以的。我认为在哪里放置Dll并不重要(至少对我的测试没有影响)
  6. 运行该项目并注意到您在unity EntryPointNotFoundException: libpd_safe_init中出现了一个错误
  7. 双击错误以打开问题脚本。
  8. 查找以下代码行:[DllImport("libpdcsharp", EntryPoint="libpd_safe_init")]
  9. 将其更改为[DllImport("libpdcsharp", EntryPoint="libpd_init")],这是libpdcsharp中init函数的真正入口点。我不知道libpd_safe_init是什么。

感谢那些帮助我解决问题并发现问题的贡献者!

票数 0
EN

Stack Overflow用户

发布于 2016-10-25 09:29:33

查看您的错误,libpdcsharp当前位于<ProjectDirectory>/Assets/Magicolo/AudioTools/PureData/Plugins/

这个DLL文件应该放在<ProjectDirectory>/Asset

另外,确保libpdcsharp是用.NET 2.0或3.5编译的。如果您用.NET 4.0和更高版本编译它,这是行不通的。

票数 0
EN

Stack Overflow用户

发布于 2016-10-25 12:58:59

我是C#绑定LibPD的维护者。

您还需要将链接更改为正确的libwinp线程-1.dll版本(64位而不是32位)。在您的最后一个项目中,您需要所有3个all:

  • LibPDBinding.dll (托管包装器)
  • libpdcsharp.dll (本机dll)
  • Libwinp线程-1.dll(用于在Windows上启用POSIX线程)

还有:你试过NuGet的版本了吗?不需要编译自己版本的绑定。

编辑:您的警告来自不同的来源:您有两个名为LibPD的类,而C#编译器不知道要使用哪个类。

我不确定这些类型是否位于相同的命名空间中。

如果它们位于同一个名称空间中,则更改您的命名空间。

如果它们位于不同的名称空间中,如果希望使用来自NuGet的版本,则添加一行NuGet;如果要使用版本,则添加using LibPd = <yournamespace>.LibPD;

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40235885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档