Placeholder-Software / Dissonance

Unity Voice Chat Asset
70 stars 5 forks source link

[UWP] Audio effect Dissonance Echo Cancellation could not be found #135

Closed Alexees closed 5 years ago

Alexees commented 5 years ago

@martindevans Just want to hook in on this for UWP in Unity 2018.2.6f1. I am receiving this error after upgrading from 6.2.4 to 6.2.6, or I have not noticed it at all since I have implemented it just recently. The size of the copied dll matches the x86 one, so it's the right one and avaiable. They are configured correctly in Unity. I even did a fresh import of the new dissonance package after deleting all the old files. I can try to revert back to 6.2.4 to see if it was recently introduced, but I doubt it. Update: same thing with 6.2.4. Trying empty project now Update: same thing happened again:

New Projekt with 2018.2.6f1, imported dissonance and HLAPI

Alexees commented 5 years ago
Initialize engine version: 2018.2.6f1 (c591d9a97a0b)

[AudioManager] InitNormal(tryDeviceDefaults = false, preferredOutputType = FMOD_OUTPUTTYPE_AUTODETECT) attempt with hardAudioDisable: false

[AudioManager] Setting output to FMOD_OUTPUTTYPE_AUTODETECT

[AudioManager] InitNormal succeeded with output "FMOD_OUTPUTTYPE_WASAPI". Driver name is "Speakers (Intel SST Audio Device (WDM))". Speaker mode is "FMOD_SPEAKERMODE_STEREO"

'DissonanceLoading.exe' (CoreCLR: CoreCLR_UWP_Domain): Loaded 'C:\Data\Users\DefaultAccount\AppData\Local\DevelopmentFiles\Template3DVS.Debug_x86.as\UnityEngineProxy.dll'. Cannot find or open the PDB file.
'DissonanceLoading.exe' (CoreCLR: CoreCLR_UWP_Domain): Loaded 'C:\Data\Users\DefaultAccount\AppData\Local\DevelopmentFiles\Template3DVS.Debug_x86.as\System.Linq.dll'. Cannot find or open the PDB file.
'DissonanceLoading.exe' (CoreCLR: CoreCLR_UWP_Domain): Loaded 'C:\Data\Users\DefaultAccount\AppData\Local\DevelopmentFiles\Template3DVS.Debug_x86.as\System.Reflection.Extensions.dll'. Module was built without symbols.
Begin showing splash screen.

The following GlobalManagers were stripped from the build (Either because they're not used or not supported on this platform):
  ClusterInputManager
  CrashReportManager
  PerformanceReportingManager

UnloadTime: 7.954000 ms

Audio effect Dissonance Echo Cancellation could not be found. Check that the project contains the correct native audio plugin libraries and that the importer settings are set up correctly.

(Filename: C:\buildslave\unity\build\Modules/Audio/Public/mixer/audiomixerruntime.cpp Line: 378)

End showing splash screen.
martindevans commented 5 years ago

Is this deploying to the hololens, or just standard desktop UWP?

Could you check the import settings on the files in Assets/Plugins/Dissonance/Plugins/UWP, check that the two files (opus/AudioPluginDissonance) in the two folders (x86/x86_64) have import settings corresponding to their location.

untitled
Alexees commented 5 years ago

It's Hololens I'm testing this with at the moment. I double checked. Yes, they are both configured correctly.

martindevans commented 5 years ago

What's odd about this is that the AEC and the audio preprocessor are both in the same DLL. The preprocessor is critical to Dissonance so if that wasn't loading correctly nothing would work at all! It's obviously some kind of problem with the "automagic" Unity uses to load audio plugins. We've previously had other issues related to this (#91) but they should be resolved now.

Could you just sanity check that the DLLs are definitely the correct ones. Both in the editor itself, and also in the built application deployed to the hololens. Here are the expected file hashes (you'll be using the x86 ones on Hololens):

PS C:\Users\Martin\Documents\Unity\Dissonance\Assets\Plugins\Dissonance\Plugins\UWP> Get-ChildItem -Recurse | Get-FileHash

Algorithm       Hash                                                                   Path
---------       ----                                                                   ----
SHA256          326711AFEC8212671056FEB07E874F97DB99FE3BDAC0F313419FEF69B063D245       C:\Users\Martin\Documents\Unity\Dissonance\Assets\Plugins\Dissonance\Plugins\UWP\x86\AudioPluginDissonance.dll
SHA256          B7D04E35E36A7E90196A386F8953BE1E6E356B723A2C0673B049E134C3A1E09E       C:\Users\Martin\Documents\Unity\Dissonance\Assets\Plugins\Dissonance\Plugins\UWP\x86\opus.dll
SHA256          F63C65A50E264E913F94FD907A646C9980C5BF46F4E33A2A15428F806925DA69       C:\Users\Martin\Documents\Unity\Dissonance\Assets\Plugins\Dissonance\Plugins\UWP\x86_64\AudioPluginDissonance.dll
SHA256          B368FC64F3314C415BB26771F3BE1FCC7768ABB0AECB90FFE0061AC6E1C60425       C:\Users\Martin\Documents\Unity\Dissonance\Assets\Plugins\Dissonance\Plugins\UWP\x86_64\opus.dll
Alexees commented 5 years ago

This is from the Assets folder:

SHA256          326711AFEC8212671056FEB07E874F97DB99FE3BDAC0F313419FEF69B063D245       D:\UnityProjects\MR\CADExplorer\Assets\Plugins\Dissonance\Plugins\UWP\x86\AudioPluginDissonance.dll
SHA256          B7D04E35E36A7E90196A386F8953BE1E6E356B723A2C0673B049E134C3A1E09E       D:\UnityProjects\MR\CADExplorer\Assets\Plugins\Dissonance\Plugins\UWP\x86\opus.dll
SHA256          F63C65A50E264E913F94FD907A646C9980C5BF46F4E33A2A15428F806925DA69       D:\UnityProjects\MR\CADExplorer\Assets\Plugins\Dissonance\Plugins\UWP\x86_64\AudioPluginDissonance.dll
SHA256          B368FC64F3314C415BB26771F3BE1FCC7768ABB0AECB90FFE0061AC6E1C60425       D:\UnityProjects\MR\CADExplorer\Assets\Plugins\Dissonance\Plugins\UWP\x86_64\opus.dll

This is from the actual build:

SHA256          F63C65A50E264E913F94FD907A646C9980C5BF46F4E33A2A15428F806925DA69       D:\UnityProjects\MR\CADExplorer\Builds\beta\clientUWP\CAD Explorer (Preview)\Plugins\X64\AudioPluginDissonance.dll
SHA256          326711AFEC8212671056FEB07E874F97DB99FE3BDAC0F313419FEF69B063D245       D:\UnityProjects\MR\CADExplorer\Builds\beta\clientUWP\CAD Explorer (Preview)\Plugins\X86\AudioPluginDissonance.dll
SHA256          326711AFEC8212671056FEB07E874F97DB99FE3BDAC0F313419FEF69B063D245       D:\UnityProjects\MR\CADExplorer\Builds\beta\clientUWP\CAD Explorer (Preview)\AudioPluginDissonance.dll
SHA256          B368FC64F3314C415BB26771F3BE1FCC7768ABB0AECB90FFE0061AC6E1C60425       D:\UnityProjects\MR\CADExplorer\Builds\beta\clientUWP\CAD Explorer (Preview)\Plugins\X64\opus.dll
SHA256          B7D04E35E36A7E90196A386F8953BE1E6E356B723A2C0673B049E134C3A1E09E       D:\UnityProjects\MR\CADExplorer\Builds\beta\clientUWP\CAD Explorer (Preview)\Plugins\X86\opus.dll
SHA256          B7D04E35E36A7E90196A386F8953BE1E6E356B723A2C0673B049E134C3A1E09E       D:\UnityProjects\MR\CADExplorer\Builds\beta\clientUWP\CAD Explorer (Preview)\opus.dll

To me this looks correct, although they appear 3 times in the build

You do not seem to have the chance of debugging it in a hololens, do you? I can try with The Mixed Reality Portal as that's available to everyone and see if it happens there too. Update: Yap, same thing for the portal

martindevans commented 5 years ago

It looks like something went wrong last time I rebuilt the UWP plugin. The exported symbols from the x86 AudioPluginDissonance are:

1     0 00019600 Dissonance_ConfigureAecSuppression
2     1 000194B0 Dissonance_ConfigureNoiseSuppression
3     2 00018FC0 Dissonance_CreatePreprocessor
4     3 00019490 Dissonance_DestroyPreprocessor
5     4 0001A4F0 Dissonance_GetAecMetrics
6     5 0001A4E0 Dissonance_GetFilterState
7     6 00019710 Dissonance_GetVadSpeechState
8     7 000197B0 Dissonance_PreprocessCaptureFrame
9     8 0001A450 Dissonance_PreprocessorExchangeInstance
10    9 00018EA0 UnityGetAudioEffectDefinitions

The important one is the final one, that's how queries what audio filters to load from the DLL. The same output for the current UWP/x86/AudioPluginDissonance:

1    0 00001CF0 Dissonance_ConfigureAecSuppression
2    1 00001CB0 Dissonance_ConfigureNoiseSuppression
3    2 000019F0 Dissonance_CreatePreprocessor
4    3 00001C90 Dissonance_DestroyPreprocessor
5    4 00001120 Dissonance_GetAecMetrics
6    5 00001110 Dissonance_GetFilterState
7    6 00001D70 Dissonance_GetVadSpeechState
8    7 00001D90 Dissonance_PreprocessCaptureFrame
9    8 00001080 Dissonance_PreprocessorExchangeInstance

As you can see the UnityGetAudioEffectDefinitions function hasn't been exported, which means Unity thinks there are no filters in the DLL. Presumably I misconfigured the linker somehow.

If you email me (martin@placeholder-software.co.uk) your invoice number I'll send you back a fixed DLL as soon as I have one.

martindevans commented 5 years ago

I've modified the linker settings to explicitly export the UnityGetAudioEffectDefinitions symbol and I've also explicitly named the symbol to prevent C++ name mangling. The exports now look like this:

1     0 00002820 Dissonance_ConfigureAecSuppression = _Dissonance_ConfigureAecSuppression
2     1 000027E0 Dissonance_ConfigureNoiseSuppression = _Dissonance_ConfigureNoiseSuppression
3     2 00002530 Dissonance_CreatePreprocessor = _Dissonance_CreatePreprocessor
4     3 000027C0 Dissonance_DestroyPreprocessor = _Dissonance_DestroyPreprocessor
5     4 00001500 Dissonance_GetAecMetrics = _Dissonance_GetAecMetrics
6     5 000014F0 Dissonance_GetFilterState = _Dissonance_GetFilterState
7     6 000028A0 Dissonance_GetVadSpeechState = _Dissonance_GetVadSpeechState
8     7 000028C0 Dissonance_PreprocessCaptureFrame = _Dissonance_PreprocessCaptureFrame
9     8 00001460 Dissonance_PreprocessorExchangeInstance = _Dissonance_PreprocessorExchangeInstance
10    9 00001070 UnityGetAudioEffectDefinitions = _UnityGetAudioEffectDefinitions@4

As you can see all the Dissonance symbols are still there, and the UnityGetAudioEffectDefinitions symbol has been added without any mangling (i.e. @4). I've emailed you this DLL to try out.

Alexees commented 5 years ago

@martindevans the problem is gone on the Hololens, thanks for the updated DLL. But it's also missing in the x64 dll which I need for the Mixed Reality Client.

martindevans commented 5 years ago

Thanks for checking that and confirming that it's fixed. I'll make the same changes to the 64 bit build now and send you the DLL once it's done :)

Edit: I've sent it

Alexees commented 5 years ago

Hey Martin, I looks like all the DLLs are broken. I've now run the project on OculusGO(Android) and the same error appeared. Could you just run through all of them and push an update or something?

martindevans commented 5 years ago

Is the error the same as #110 (Android AEC fails to load)? If so that's a Unity bug and we're waiting for a fix from them.

Alexees commented 5 years ago

jup, is. Waiting... :)

martindevans commented 5 years ago

Hey Alexees, did you see my latest post on the Android issue? According to Unity it's fixed, so hopefully that will fix your Oculus GO problem.

martindevans commented 5 years ago

Dissonance 6.3.0 just went live on the asset store, that version includes the rebuilt DLLs to fix this issue. I'll close this issue now, don't hesitate to re-open it if the problem persists :)