Photon Voice For ARM64?

Hello,
I hope this is the proper place to query on this matter.

I'm using Photon Voice with HoloLens 2 and it is working great.
Currently, though, I cant build for ARM64 since the opus binaries are only compiled for ARM.

Any chance to get binaries for ARM64?
Thanks in advance.

Comments

  • JohnTube
    JohnTube ✭✭✭✭✭
    Hi @YanivClone,

    Yes this is a good place for such query.

    We already received a similar request in the past few days.
    We still need time to do some research and try to estimate this.
    But we want to support it.

    Thanks for your patience and understanding.
  • Thank you,
    Where should I check for future updates? the asset store Photon Voice 2 Asset?
  • JohnTube
    JohnTube ✭✭✭✭✭
    edited September 2020
    hi @YanivClone,

    could you try this lib?
  • Thank you, I will try and update.
  • Currently Receiving this error on the device:

    [PV] OpusCodec.Encoder: System.DllNotFoundException: Unable to load DLL 'opus_egpv': The specified module could not be found.
    at POpusCodec.Wrapper.opus_encoder_create (POpusCodec.Enums.SamplingRate Fs, POpusCodec.Enums.Channels channels, POpusCodec.Enums.OpusApplicationType application) [0x00000] in <00000000000000000000000000000000>:0
    at POpusCodec.OpusEncoder..ctor (POpusCodec.Enums.SamplingRate inputSamplingRateHz, POpusCodec.Enums.Channels numChannels, System.Int32 bitrate, POpusCodec.Enums.OpusApplicationType applicationType, POpusCodec.Enums.Delay encoderDelay) [0x00000] in <00000000000000000000000000000000>:0
    at Photon.Voice.OpusCodec+Encoder`1[T]..ctor (Photon.Voice.VoiceInfo i, Photon.Voice.ILogger logger) [0x00000] in <00000000000000000000000000000000>:0
    at Photon.Voice.OpusCodec+EncoderFloat..ctor (Photon.Voice.VoiceInfo i, Photon.Voice.ILogger logger) [0x00000] in <00000000000000000000000000000000>:0
    at Photon.Voice.OpusCodec+Factory.CreateEncoder (Photon.Voice.VoiceInfo i, Photon.Voice.ILogger logger) [0x00000] in <00000000000000000000000000000000>:0
    at Photon.Voice.LocalVoiceAudio`1[T].CreateDefaultEncoder (Photon.Voice.VoiceInfo info) [0x00000] in <00000000000000000000000000000000>:0
    at Photon.Voice.LocalVoice..ctor (Photon.Voice.VoiceClient voiceClient, Photon.Voice.IEncoder encoder, System.Byte id, Photon.Voice.VoiceInfo voiceInfo, System.Int32 channelId) [0x00000] in <00000000000000000000000000000000>:0
    at Photon.Voice.LocalVoiceFramedBase..ctor (Photon.Voice.VoiceClient voiceClient, Photon.Voice.IEncoder encoder, System.Byte id, Photon.Voice.VoiceInfo voiceInfo, System.Int32 channelId, System.Int32 frameSize) [0x00000] in <00000000000000000000000000000000>:0
    at Photon.Voice.LocalVoiceFramed`1[T]..ctor (Photon.Voice.VoiceClient voiceClient, Photon.Voice.IEncoder encoder, System.Byte id, Photon.Voice.VoiceInfo voiceInfo, System.Int32 channelId, System.Int32 frameSize) [0x00000] in <00000000000000000000000000000000>:0
    at Photon.Voice.LocalVoiceAudio`1[T]..ctor (Photon.Voice.VoiceClient voiceClient, Photon.Voice.IEncoder encoder, System.Byte id, Photon.Voice.VoiceInfo voiceInfo, Photon.Voice.IAudioDesc audioSourceDesc, System.Int32 channelId) [0x00000] in <00000000000000000000000000000000>:0
    at Photon.Voice.LocalVoiceAudioFloat..ctor (Photon.Voice.VoiceClient voiceClient, Photon.Voice.IEncoder encoder, System.Byte id, Photon.Voice.VoiceInfo voiceInfo, Photon.Voice.IAudioDesc audioSourceDesc, System.Int32 channelId) [0x00000] in <00000000000000000000000000000000>:0
    at Photon.Voice.LocalVoiceAudio`1[T].Create (Photon.Voice.VoiceClient voiceClient, System.Byte voiceId, Photon.Voice.IEncoder encoder, Photon.Voice.VoiceInfo voiceInfo, Photon.Voice.IAudioDesc audioSourceDesc, System.Int32 channelId) [0x00000] in <00000000000000000000000000000000>:0
    at Photon.Voice.VoiceClient+<>c__DisplayClass45_0`1[T].<CreateLocalVoiceAudio>b__0 (System.Byte vId, System.Int32 chId) [0x00000] in <00000000000000000000000000000000>:0
    at System.Func`3[T1,T2,TResult].Invoke (T1 arg1, T2 arg2) [0x00000] in <00000000000000000000000000000000>:0
    at Photon.Voice.VoiceClient.createLocalVoice (Photon.Voice.VoiceInfo voiceInfo, System.Int32 channelId, System.Func`3[T1,T2,TResult] voiceFactory) [0x00000] in <00000000000000000000000000000000>:0
    at Photon.Voice.VoiceClient.CreateLocalVoiceAudio[T] (Photon.Voice.VoiceInfo voiceInfo, Photon.Voice.IAudioDesc audioSourceDesc, System.Int32 channelId, Photon.Voice.IEncoder encoder) [0x00000] in <00000000000000000000000000000000>:0
    at Photon.Voice.VoiceClient.CreateLocalVoiceAudioFromSource (Photon.Voice.VoiceInfo voiceInfo, Photon.Voice.IAudioDesc source, System.Boolean forceShort, System.Int32 channelId, Photon.Voice.IEncoder encoder) [0x00000] in <00000000000000000000000000000000>:0
    at Photon.Voice.Unity.Recorder.CreateLocalVoiceAudioAndSource () [0x00000] in <00000000000000000000000000000000>:0
    at Photon.Voice.Unity.Recorder.Setup () [0x00000] in <00000000000000000000000000000000>:0
    at Photon.Voice.Unity.Recorder.StartRecording () [0x00000] in <00000000000000000000000000000000>:0
    at Photon.Voice.Unity.Recorder.Init (Photon.Voice.VoiceClient voiceClient, System.Object customObj) [0x00000] in <00000000000000000000000000000000>:0
    at PhotonVoiceNetworkManager.OnJoinedRoom () [0x00000] in <00000000000000000000000000000000>:0
    at Photon.Realtime.MatchMakingCallbacksContainer.OnJoinedRoom () [0x00000] in <00000000000000000000000000000000>:0
    at Photon.Realtime.LoadBalancingClient.OnEvent (ExitGames.Client.Photon.EventData photonEvent) [0x00000] in <00000000000000000000000000000000>:0
    at ExitGames.Client.Photon.PeerBase.DeserializeMessageAndCallback (ExitGames.Client.Photon.StreamBuffer stream) [0x00000] in <00000000000000000000000000000000>:0
    at ExitGames.Client.Photon.EnetPeer.DispatchIncomingCommands () [0x00000] in <00000000000000000000000000000000>:0
    at ExitGames.Client.Photon.PhotonPeer.DispatchIncomingCommands () [0x00000] in <00000000000000000000000000000000>:0
    at Photon.Voice.Unity.VoiceConnection.FixedUpdate () [0x00000] in <00000000000000000000000000000000>:0
    UnityEngine.DebugLogHandler:LogFormat(LogType, Object, String, Object[])
    UnityEngine.Logger:Log(LogType, Object)
    UnityEngine.Debug:LogError(Object)
    Photon.Realtime.LoadBalancingClient:DebugReturn(DebugLevel, String)
    Photon.Voice.LoadBalancingTransport:LogError(String, Object[])
    Photon.Voice.Encoder`1:.ctor(VoiceInfo, ILogger)
    Photon.Voice.EncoderFloat:.ctor(VoiceInfo, ILogger)
    Photon.Voice.Factory:CreateEncoder(VoiceInfo, ILogger)
    Photon.Voice.LocalVoiceAudio`1:CreateDefaultEncoder(VoiceInfo)
    Photon.Voice.LocalVoice:.ctor(VoiceClient, IEncoder, Byte, VoiceInfo, Int32)
    Photon.Voice.LocalVoiceFramedBase:.ctor(VoiceClient, IEncoder, Byte, VoiceInfo, Int32, Int32)
    Photon.Voice.LocalVoiceFramed`1:.ctor(VoiceClient, IEncoder, Byte, VoiceInfo, Int32, Int32)
    Photon.Voice.LocalVoiceAudio`1:.ctor(VoiceClient, IEncoder, Byte, VoiceInfo, IAudioDesc, Int32)
    Photon.Voice.LocalVoiceAudioFloat:.ctor(VoiceClient, IEncoder, Byte, VoiceInfo, IAudioDesc, Int32)
    Photon.Voice.LocalVoiceAudio`1:Create(VoiceClient, Byte, IEncoder, VoiceInfo, IAudioDesc, Int32)
    Photon.Voice.<>c__DisplayClass45_0`1:<CreateLocalVoiceAudio>b__0(Byte, Int32)
    System.Func`3:Invoke(T1, T2)
    Photon.Voice.VoiceClient:createLocalVoice(VoiceInfo, Int32, Func`3)
    Photon.Voice.VoiceClient:CreateLocalVoiceAudio(VoiceInfo, IAudioDesc, Int32, IEncoder)
    Photon.Voice.VoiceClient:CreateLocalVoiceAudioFromSource(VoiceInfo, IAudioDesc, Boolean, Int32, IEncoder)
    Photon.Voice.Unity.Recorder:CreateLocalVoiceAudioAndSource()
    Photon.Voice.Unity.Recorder:Setup()
    Photon.Voice.Unity.Recorder:StartRecording()
    Photon.Voice.Unity.Recorder:Init(VoiceClient, Object)
    PhotonVoiceNetworkManager:OnJoinedRoom()
    Photon.Realtime.MatchMakingCallbacksContainer:OnJoinedRoom()
    Photon.Realtime.LoadBalancingClient:OnEvent(EventData)
    ExitGames.Client.Photon.PeerBase:DeserializeMessageAndCallback(StreamBuffer)
    ExitGames.Client.Photon.EnetPeer:DispatchIncomingCommands()
    ExitGames.Client.Photon.PhotonPeer:DispatchIncomingCommands()
    Photon.Voice.Unity.VoiceConnection:FixedUpdate()


    It is odd because everything looks fine in the plugin folder (I have the opus_egpv.dll in the WSA/ARM64 folder and it manages to build to ARM64 which it wouldn't if the plugin wasn't there ).
    Maybe Something in the code needs to change?
    Ill keep trying, Yaniv.
  • JohnTube
    JohnTube ✭✭✭✭✭
    edited February 2020
    Hey @YanivClone,

    Maybe it works only with UWP?
    What scripting backend did you try?
  • I'm building For UWP WSA ARM64 with IL2CPP scripting backend (HoloLens 2)
    The same configuration works with ARM
  • JohnTube
    JohnTube ✭✭✭✭✭
    hi @YanivClone,

    What Unity version is this?
    Did you try re opening Unity or re opening project?
    Or maybe a clean build, not sure how to do that from Unity?
  • Unity version: 2019.2.12f
    I tried a clean build (deleting all the previous build file and building it again from scratch)
    I'll try to reimport all the photon voice libs + if it doesn't work ill try to reopen a project and copy everything there
  • ok, I saw a log from the device that I have missed:
    "Loading native plugins
    Loading opus_egpv.dll
    Plugins: Failed to load 'opus_egpv' because one or more of its dependencies could not be loaded."

    Maybe it could help us understand the problem?
  • JohnTube
    JohnTube ✭✭✭✭✭
    I see, thanks @YanivClone.
    We will investigate internally.
  • JohnTube
    JohnTube ✭✭✭✭✭
    edited September 2020
    Hey @YanivClone,

    Could you try this one instead?
    Remove old "WSA/ARM64" folder first.
  • Trying now will update.
    Thank you!
  • Now it loads properly into the device without any error,
    Upon usage, it crashes the software.

    To be sure I have built it without using the voice comms and it won't crash.
    I can't even seem to get any log about the crash as the logging stream stops abruptly.

    I'll try enabling the INFO log on Voice Communication component to get logs
  • Hey John,
    Can't seem to gather anything interesting from the logs, just keep crushing once it starts.
  • JohnTube
    JohnTube ✭✭✭✭✭
    Hey @YanivClone,

    Thanks a lot again for your testing.
    We will investigate further.
  • Been experiencing the same issues as YanivClone. And the recent unitypackage posted by JohnTube crashes on use.
  • So I've come accross the same issue. My plan was to use this for HoloLens2 with the provided binaries I can build for ARM64 and I can receive voice on device but as soon as I want to transmit something the app just crashed (sadly without leaving any trace in the log)
  • rjwpols
    rjwpols
    edited May 2020
    Hi, did anyone found a workable solution for using Voice2 with HoloLens2 using ARM64?
  • Hello! We now have a requirement for ARM64 on HoloLens2 as well. Please advise on when an arm64 voice dll might be available! Thank you for your efforts already!
  • JohnTube
    JohnTube ✭✭✭✭✭
    Hi @rjwpols, @Neff,

    Thank you for choosing Photon!

    #here, #everyone

    Please send an email to developer@photonengine.com to request this as it will not be part of the public SDK.
  • JohnTube
    JohnTube ✭✭✭✭✭
    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