HoloLens 2 ARM64 ビルド で Photon Voice 2 が正常に動かない場合の対処法
HoloLens 2 開発で Photon Voice 2 を利用しているのですが, Editor で確認した時は正常に音声の通信が出来ているのに, 実際に HoloLens 2 にデプロイして実機確認すると音声が通じなくなったことがありました.
Photon VoiceがHoloLensで動かなくなっている顔をしている
— Denik (@xrdnk) 2020年10月19日
↑ この2日後に,HoloLens 2 のデモ展示が予定されているという状況(震え声)
検証時の環境
- Unity 2019.4.12f1
- Photon Voice ver 2.21
- Pun 2.22
- Photon Lib: 4.1.4.5
エラー原因
Release or Debug でデプロイしてみると,左目の Development Console にこんな感じに表示されていました.
OpusCodec.Encoder: System.DllNotFoundException: Unable to load DLL 'opus_egpv': The specified module could not be found.
読んで字の如くですが,DLLが見つからないことによるエラーです.
Photon Voice Libs を見てみる
この opus_egpv.dll の正体は何かは精確なところは断言できませんが, Photon Voice に何かしら利用されていることだけはわかります. Photon Voice の フォルダ構成を見てみるとこんな感じです.
PhotonVoice
├─Code
│ ├─Editor
│ ├─PUN
│ │ └─Editor
│ └─UtilityScripts
│ ├─AudioUtils
│ │ └─CSCore
│ ├─Editor
│ └─MicAmplifier
├─Demos
│ ├─DemoProximityVoiceChat
│ │ ├─Materials
│ │ ├─Prefabs
│ │ ├─Resources
│ │ ├─Scenes
│ │ └─Scripts
│ ├─DemoVoiceMinimal
│ ├─DemoVoicePun
│ │ ├─Animation
│ │ ├─Audio
│ │ ├─Editor
│ │ │ └─CrossPlatformInput
│ │ ├─Fonts
│ │ ├─Materials
│ │ ├─Models
│ │ │ └─Characters
│ │ │ └─Materials
│ │ ├─Prefabs
│ │ ├─Resources
│ │ ├─Scripts
│ │ ├─Standard Assets
│ │ │ └─CrossPlatformInput
│ │ │ ├─Prefabs
│ │ │ ├─Scripts
│ │ │ │ └─PlatformSpecific
│ │ │ └─Sprites
│ │ ├─Stylized city
│ │ │ ├─Materials
│ │ │ └─Models
│ │ │ └─Materials
│ │ └─Textures
│ └─DemoVoiceUI
│ ├─Media
│ ├─Prefabs
│ ├─RobotoFont
│ └─Scripts
├─Icons
├─PhotonVoiceApi
│ ├─Core
│ │ └─POpusCodec
│ │ └─Enums
│ └─Platforms
│ ├─Apple
│ ├─Unity
│ └─Windows
└─PhotonVoiceLibs
├─Android
│ └─libs
│ ├─arm64-v8a
│ ├─armeabi-v7a
│ └─x86
├─AudioIn.bundle
│ └─Contents
│ ├─MacOS
│ └─_CodeSignature
├─iOS
│ └─Photon
├─opus_egpv.bundle
│ └─Contents
│ └─MacOS
├─webrtc-audio.bundle
│ └─Contents
│ └─MacOS
├─WSA
│ ├─ARM
│ ├─x64
│ └─x86
├─x86
└─x86_64
で,opus_egpv.dll は Photon Voice Libs にプラットフォームごとにおいてあるのですが, 今回は HoloLens 2 ということで,WSA (Windows Store App) 向けにビルドしています. WSA フォルダに着目すると,原因が一目瞭然です.
├─WSA
│ ├─ARM
│ ├─x64
│ └─x86
ARM64 フォルダがありません.ARM64 では opus_egpv.dll が公式に提供されていないようです.
対処法
非推奨な対処法
フォーラムを見てみると私と似た現象が起きているところがあったので,以下を参考に.
一応こちらのフォーラム上でARM64版のdllが非公式で.package形式で提供されている模様ですが, 古いこともありクラッシュが生じることもあるようなので非推奨です.
もしダウンロードしたい場合は自己責任ですが,こちらからダウンロードできます. 新しいのが欲しい場合は,developer☆photonengine.com (☆ → @) へ連絡とのこと.
正しい対処法
正しい対処法としては,ARM64ビルドではなく,ARMでビルドすれば問題なく動作します. ですので,HoloLens 2 で Photon Voice 2 を利用する場合は,現状 ARM でビルドするのが確実ではないかと思います.
以下,フォーラムの回答を参考.
FYI: If you want to build for UWP/ARM32 then you should be fine. If not please send us the error you encounter during compilation, build or deploy. If you want to build for UWP/ARM64 then you need the HoloLens add-on which contains the UWP/ARM64 library files. The packages in the linked forum discussion are obsolete and do not work. In order to get access send an email to developer@photonengine.com
終わりに(余談)
ARM64 Buildだとダメだったが,ARMだとOKだった
— Denik (@xrdnk) 2020年10月19日
Photon Voice,WSA ARM64対応がにないっぽい?(フォルダ構成見ると)
これ判明して対処したの,コンテンツ東京展示本番の前日の0:11という頭おかしいことになってる.