Первый пост. Дайте мне знать, если я нарушу какие-либо правила!
Я хотел бы поэкспериментировать с Pure Data и Unity 5. Мне кажется, uPD подойдет лучше всего. Я выполнил инструкции на странице github и загрузил первый образец сцены. Консоль Unity сообщает об ошибках с dll:
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 и использовал прилагаемый пакетный файл для создания dll x64. Я заменил libpdcsharp.dll в проекте Unity, и теперь консоль сообщает:
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 привязки. При этом я получаю сообщение об ошибке о несоответствии структуры между моим решением проекта Unity / Visual Studio и пакетом nuget libPDBinding версии 0.10.0. Это связано с профилями единства, как описано в статье под названием «Использование NuGet в инструментах Visual Studio для Unity». Я не могу разместить ссылку здесь, потому что я слишком новичок.
Тем не менее, я думаю, что мне удалось составить свой собственный libPDBinding.dll
. Приношу извинения за затягивание, просто удостоверяюсь, что я делаю это правильно: после использования libPD\mingw64_build_csharp.bat
для компиляции x64-версии libpdcsharp.dll
я ссылаюсь на это и libpd\libs\mingw64\libwinthread-1.dll
в решении VS и получаю результирующий LibPDBinding.dll
, который был создан с помощью .NET 3.5. Как уже упоминалось, libpdcsharp.dll
был скомпилирован с использованием файла пакетной обработки/создания, поэтому правильно ли я предполагаю, что этот файл был собран с правильными настройками?
Я продолжаю копировать эти 3 dll в папку ресурсов единства. Для справки, это пустой проект единства с uPD в качестве единственного пакета, загруженного в пример сцены uPD.
Я все еще получаю некоторые ошибки во время выполнения и некоторые предупреждения визуальной студии следующим образом.
Ошибка выполнения Unity:
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 Studio x 50 или около того:
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
Еще раз спасибо за любую помощь. Очень признателен.