0

初投稿。ルールを破ったら教えて!

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 リポジトリのクローンを作成し、含まれているバッチ ファイルを使用して x64 dll をビルドしました。Unity プロジェクトの libpdcsharp.dll を置き換えたところ、コンソールに次のように報告されるようになりました。

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 プロジェクト/ビジュアル スタジオ ソリューションと nuget パッケージ libPDBinding バージョン 0.10.0 の間のフレームワークの不一致に関するエラーが発生します。これは、記事「Using NuGet in Visual Studio Tools for Unity」で説明されているように、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 の unity アセット フォルダーをコピーします。参照用に、uPD を唯一のパッケージとして uPD サンプル シーンにロードされた空の unity プロジェクトです。

実行時にいくつかのエラーが発生し、次のようなビジュアル スタジオの警告が表示されます。

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

助けてくれてありがとう。とても有難い。

4

3 に答える 3

0

それは働いています。私が知る限り、uPD github コードにはエラーがあります。うまくいけば、それは修正されます。その間、プロセスをゼロから開始しました。これは、uPD テスト シーンを Unity 5 で動作させるために行ったことです。

  1. github から uPD を取得します。そこにユニティパッケージがあります
  2. github から libPD を入手します。
  3. libPD github ページの指示に従って、libpdcsharp.dll の x64 バージョンをコンパイルします。
  4. Unity プロジェクト内の既存の libpdcsharp.dll を、コンパイルした x64 バージョンに置き換えます。
  5. libpd ファイルで libpd\libs\mingw64\libwinthread-1.dll を見つけ、これを unity プロジェクトに配置します。他の dll と同じ場所で問題ありません。Dllをどこに置くかは問題ではないと思います(少なくとも私のテストでは違いはありませんでした)
  6. プロジェクトを実行すると、Unity でエラーが発生することがわかりますEntryPointNotFoundException: libpd_safe_init
  7. エラーをダブルクリックして、問題のスクリプトを開きます。
  8. 次のコード行を見つけます。[DllImport("libpdcsharp", EntryPoint="libpd_safe_init")]
  9. libpdcsharp[DllImport("libpdcsharp", EntryPoint="libpd_init")]の init 関数の実際のエントリ ポイントです。libpd_safe_init が何かわかりません。

トラブルシューティングと問題の発見を手伝ってくれた貢献者に感謝します!

于 2016-10-25T16:42:30.593 に答える
0

私は LibPD の C# バインディングのメンテナーです。

リンクを正しい libwinpthread-1.dll バージョン (32 ビットではなく 64 ビット) に変更する必要もあります。最終的なプロジェクトでは、3 つの dll すべてが必要です。

  • LibPDBinding.dll (マネージ ラッパー)
  • libpdcsharp.dll (ネイティブ dll)
  • libwinpthread-1.dll (Windows で POSIX スレッドを有効にするため)

また: NuGetのバージョンを試しましたか? 独自のバージョンのバインディングをコンパイルする必要はありません。

EDIT : あなたの警告は別のソースからのものです: という名前LibPDの 2 つのクラスがあり、C# コンパイラはどちらを使用するかわかりません。

これらの型が同じ名前空間にあるかどうかはわかりません。

それらが同じ名前空間にある場合は、名前空間を変更してください。

それらが異なる名前空間にあるusing LibPd = LibPDBinding.LibPD;場合、NuGet のバージョンを使用するusing LibPd = <yournamespace>.LibPD;場合、または独自のバージョンを使用する場合は、行を追加します。

于 2016-10-25T12:58:59.633 に答える