Idiots guide to Oculus support?

Idiot here. Hitting a hard wall trying to get sound from a Quest 2 (plays sound cues fine, it’s just fmod events that won’t play - yes i have the mobile banks and the events come through). I’ve tried hard to follow what I can find but this install process is punishing. Absolutely not ready for prime time.

This nonsense about ini and so files… That’s really the best help guide available? The windows article has what looks like mac file paths in there. I can’t find any of the locations that are referenced. And Unreal seems to have changed their directory names since it was written as well.

Latest FMOD with UE4.27 and Quest 2

I’m spending tomorrow trying the same thing in wwise. Stay tuned. If anyone wants to try authoring a top to bottom set of instructions it might salvage this experiment. I don’t think a simple troubleshoot is going to do it. I have to be able to replicate this later on a much more mature project with a cloud repo I don’t want to butcher so it’s clear instructions or bust. Thank you.

Here are the steps to setup FMOD for Oculus Quest 2, as a set of step-by-step instructions which should hopefully be more clear:

  1. Follow the Unreal Oculus Setup Guide to ensure everything is working in Unreal to begin with
  2. Download FMOD Studio
  3. Open FMOD Studio
  4. Open the “Examples.fspro” project that came with the FMOD Studio installation
  5. Download FMOD for Unreal, ensuring the version you download matches your FMOD Studio and Unreal versions
  6. Create a folder called “Plugins” in the same directory as your Unreal .uproject file
  7. Unzip FMOD for Unreal into your newly created “Plugins” directory
  8. Create a folder called “Platforms” in the same directory as your Unreal .uproject file
  9. Open the “Platforms” directory and create a new folder called “Android
  10. Open the “Android” directory and create a new folder called “Config
  11. Open the “Config” directory and create a file called “AndroidGame.ini
  12. Open “AndroidGame.ini” and add the following contents:
    [/Script/UnrealEd.ProjectPackagingSettings]
    -DirectoriesToAlwaysStageAsNonUFS=(Path="FMOD/Desktop")
    +DirectoriesToAlwaysStageAsNonUFS=(Path="FMOD/Mobile")
    
  13. Save and close “AndroidGame.ini
  14. Close and reopen your Unreal project
  15. When the “FMOD Settings Problem Detected” popup appears in the right, select the “Settings…” option
  16. In the red area, select “Fix
  17. In the top menu, click “Help>Validate FMOD
  18. Click through the series of popups with either “Yes” or “Okay”. Validation is finished when you see this window:
    image
  19. In the Content window, click through to FMOD>Events>Music
  20. Drag the Level_03 event from the Content window into the main viewport
  21. Hit Alt+P on your keyboard to play the level. You should hear cinematic music
  22. Launch on your Oculus Quest 2

Hopefully that is a little more clear, please let me know how you go with that. I have passed on your suggestion to write an Oculus setup guide, thank you for the suggestion!

1 Like

Thanks Jeff this is certainly much clearer. Unfortunately I’m not getting FMOD Event audio through the Quest in the editor after many attempts.

I do have audio direct into the Quest from FMOD
I do have FMOD Events playing in the game on my PC speakers
I do have Unreal sounds playing on the Quest in the game

What I do not have is FMOD Events playing on the Quest in the game. So when I hit Play the Oculus is missing FMOD sounds, while playing Unreal sounds, but if I turn my speakers up there are the FMOD sounds as expected.

It seems like this would have to be something in Project Settings>FMOD Studio…? At least it seems like the logical source of trouble and I played around with it to no avail. I notice you didn’t say anything here about Build>Platforms but I messed around with that quite a bit also and couldn’t achieve anything.

Additionally I checked for any discrepancies about mono and stereo but nothing helped.

I notice other instructions have made a big deal about the Oculus spatial/reverb plugins inside of FMOD yet this is totally missing from your instructions. This is definitely a source of confusion with the other documentation I came across.

Thanks for giving that a shot, sorry to hear you are still running into issues. Next thing to do would be to tick Enable API Error Logging in the Project Settings>FMOD Studio plugin settings, and set your Logging Level to “LEVEL LOG”, and share the console output when running the project on your headset.

I did miss that, apologies for the oversight. You will need to create a new platform called “Mobile” and rebuild banks for the mobile platform. Steps to do that are as follows:

  1. In the FMOD Studio menu go to Edit>Preferences>Build
  2. Right click in the dark grey space underneath “Project platforms” and select Add Platform>Mobile
  3. Hit Ctrl+F7 to build for all platforms
  4. Go back to Unreal and wait for banks to reload, then try launching on your VR Headset again.

The oculus spatial/reverb stuff is not essential and will complicate your setup- I suggest you disregard anything about the Oculus spatializer until you get sound playing out of your VR headset first, and introduce it later when you want to use those features.

Thanks see below (attachments not allowed!).

I notice it’s logging the /Desktop bank here.

Here’s my preferences:

Here’s the id from the device if that’s helpful at all

C:\Windows\system32>adb devices -l
* daemon not running; starting now at tcp:5037
* daemon started successfully
List of devices attached
1WMHHA6E0J2173         device product:hollywood model:Quest_2 device:hollywood transport_id:1
LogHMD: Allocating Oculus 3648 x 1840 depth rendertarget swapchain
LogFMOD: c:\jk\workspace\Build__2.2__Unreal_Win\core_api\src\fmod_systemi.cpp(3919) - filename = ../../../../../../Users/danmy/Documents/Unreal Projects/fmodBaseTest/Content/FMOD/Desktop/TESTING.bank : mode 02010082
LogFMOD: c:\jk\workspace\Build__2.2__Unreal_Win\core_api\src\fmod_systemi.cpp(3923) - FMOD_NONBLOCKING specified.  Putting into queue to be opened asynchronously!
LogFMOD: c:\jk\workspace\Build__2.2__Unreal_Win\core_api\src\fmod_async.h(74) - add sound to async queue : soundi = 0000013668D23C88, queue head = 000001366D40FFD8, queue count = 0
LogFMOD: c:\jk\workspace\Build__2.2__Unreal_Win\core_api\src\fmod_async.cpp(189) - Starting Asynchronous operation on sound 0000013668D23C88
LogFMOD: c:\jk\workspace\Build__2.2__Unreal_Win\core_api\src\fmod_systemi_sound.cpp(619) -     Create name='../../../../../../Users/danmy/Documents/Unreal Projects/fmodBaseTest/Content/FMOD/Desktop/TESTING.bank', mode=0x02010082
LogFMOD: c:\jk\workspace\Build__2.2__Unreal_Win\core_api\src\fmod_systemi_sound.cpp(625) -     exinfo->cbsize             = 224
LogFMOD: c:\jk\workspace\Build__2.2__Unreal_Win\core_api\src\fmod_systemi_sound.cpp(629) -     exinfo->length             = 20637952
LogFMOD: c:\jk\workspace\Build__2.2__Unreal_Win\core_api\src\fmod_systemi_sound.cpp(633) -     exinfo->fileoffset         = 3680
LogFMOD: c:\jk\workspace\Build__2.2__Unreal_Win\core_api\src\fmod_systemi_sound.cpp(657) -     exinfo->numsubsounds       = 1
LogFMOD: c:\jk\workspace\Build__2.2__Unreal_Win\core_api\src\fmod_systemi_sound.cpp(661) -     exinfo->inclusionlist      = 0000013668D27FF0
LogFMOD: c:\jk\workspace\Build__2.2__Unreal_Win\core_api\src\fmod_systemi_sound.cpp(665) -     exinfo->inclusionlistnum   = 1
LogFMOD: c:\jk\workspace\Build__2.2__Unreal_Win\core_api\src\fmod_systemi_sound.cpp(697) -     exinfo->suggestedsoundtype = 5
LogFMOD: c:\jk\workspace\Build__2.2__Unreal_Win\core_api\src\fmod_systemi_sound.cpp(741) -     exinfo->initialseekpostype = 1
LogFMOD: c:\jk\workspace\Build__2.2__Unreal_Win\core_api\src\fmod_systemi_sound.cpp(1375) -     Stream 0/1: name='blimp strings3', format=2, channels=1, frequency=48000, lengthbytes=5376032, lengthpcm=2688000, pcmblocksize=0, loopstart=0, loopend=0, mode=0x00000000, channelmask=0x00000000, channelorder=0, peakvolume=0.999969.
LogFMOD: c:\jk\workspace\Build__2.2__Unreal_Win\core_api\src\fmod_async.cpp(334) - Finished Asynchronous operation on sound 0000013668D23C88
LogFMOD: c:\jk\workspace\Build__2.2__Unreal_Win\core_api\src\fmod_systemi.cpp(3919) - filename = ../../../../../../Users/danmy/Documents/Unreal Projects/fmodBaseTest/Content/FMOD/Desktop/TESTING.bank : mode 02010082
LogFMOD: c:\jk\workspace\Build__2.2__Unreal_Win\core_api\src\fmod_systemi.cpp(3923) - FMOD_NONBLOCKING specified.  Putting into queue to be opened asynchronously!
LogFMOD: c:\jk\workspace\Build__2.2__Unreal_Win\core_api\src\fmod_async.h(74) - add sound to async queue : soundi = 0000013668D23908, queue head = 000001366D40FFD8, queue count = 0
LogFMOD: c:\jk\workspace\Build__2.2__Unreal_Win\core_api\src\fmod_async.cpp(189) - Starting Asynchronous operation on sound 0000013668D23908
LogFMOD: c:\jk\workspace\Build__2.2__Unreal_Win\core_api\src\fmod_systemi_sound.cpp(619) -     Create name='../../../../../../Users/danmy/Documents/Unreal Projects/fmodBaseTest/Content/FMOD/Desktop/TESTING.bank', mode=0x02010082
LogFMOD: c:\jk\workspace\Build__2.2__Unreal_Win\core_api\src\fmod_systemi_sound.cpp(625) -     exinfo->cbsize             = 224
LogFMOD: c:\jk\workspace\Build__2.2__Unreal_Win\core_api\src\fmod_systemi_sound.cpp(629) -     exinfo->length             = 20637952
LogFMOD: c:\jk\workspace\Build__2.2__Unreal_Win\core_api\src\fmod_systemi_sound.cpp(633) -     exinfo->fileoffset         = 3680
LogFMOD: c:\jk\workspace\Build__2.2__Unreal_Win\core_api\src\fmod_systemi_sound.cpp(657) -     exinfo->numsubsounds       = 1
LogFMOD: c:\jk\workspace\Build__2.2__Unreal_Win\core_api\src\fmod_systemi_sound.cpp(661) -     exinfo->inclusionlist      = 0000013668D27EB0
LogFMOD: c:\jk\workspace\Build__2.2__Unreal_Win\core_api\src\fmod_systemi_sound.cpp(665) -     exinfo->inclusionlistnum   = 1
LogFMOD: c:\jk\workspace\Build__2.2__Unreal_Win\core_api\src\fmod_systemi_sound.cpp(697) -     exinfo->suggestedsoundtype = 5
LogFMOD: c:\jk\workspace\Build__2.2__Unreal_Win\core_api\src\fmod_systemi_sound.cpp(741) -     exinfo->initialseekpostype = 1
LogFMOD: c:\jk\workspace\Build__2.2__Unreal_Win\core_api\src\fmod_systemi_sound.cpp(1375) -     Stream 0/1: name='blimp w voice', format=2, channels=1, frequency=48000, lengthbytes=4509632, lengthpcm=2254787, pcmblocksize=0, loopstart=0, loopend=0, mode=0x00000000, channelmask=0x00000000, channelorder=0, peakvolume=0.407898.
LogFMOD: c:\jk\workspace\Build__2.2__Unreal_Win\core_api\src\fmod_async.cpp(334) - Finished Asynchronous operation on sound 0000013668D23908
LogFMOD: c:\jk\workspace\Build__2.2__Unreal_Win\core_api\src\fmod_systemi.cpp(3919) - filename = ../../../../../../Users/danmy/Documents/Unreal Projects/fmodBaseTest/Content/FMOD/Desktop/TESTING.bank : mode 02010082
LogFMOD: c:\jk\workspace\Build__2.2__Unreal_Win\core_api\src\fmod_systemi.cpp(3923) - FMOD_NONBLOCKING specified.  Putting into queue to be opened asynchronously!
LogFMOD: c:\jk\workspace\Build__2.2__Unreal_Win\core_api\src\fmod_async.h(74) - add sound to async queue : soundi = 0000013668D23588, queue head = 000001366D40FFD8, queue count = 0
LogFMOD: c:\jk\workspace\Build__2.2__Unreal_Win\core_api\src\fmod_async.cpp(189) - Starting Asynchronous operation on sound 0000013668D23588
LogFMOD: c:\jk\workspace\Build__2.2__Unreal_Win\core_api\src\fmod_systemi_sound.cpp(619) -     Create name='../../../../../../Users/danmy/Documents/Unreal Projects/fmodBaseTest/Content/FMOD/Desktop/TESTING.bank', mode=0x02010082
LogFMOD: c:\jk\workspace\Build__2.2__Unreal_Win\core_api\src\fmod_systemi_sound.cpp(625) -     exinfo->cbsize             = 224
LogFMOD: c:\jk\workspace\Build__2.2__Unreal_Win\core_api\src\fmod_systemi_sound.cpp(629) -     exinfo->length             = 20637952
LogFMOD: c:\jk\workspace\Build__2.2__Unreal_Win\core_api\src\fmod_systemi_sound.cpp(633) -     exinfo->fileoffset         = 3680
LogFMOD: c:\jk\workspace\Build__2.2__Unreal_Win\core_api\src\fmod_systemi_sound.cpp(657) -     exinfo->numsubsounds       = 1
LogFMOD: c:\jk\workspace\Build__2.2__Unreal_Win\core_api\src\fmod_systemi_sound.cpp(661) -     exinfo->inclusionlist      = 0000013668D27D70
LogFMOD: c:\jk\workspace\Build__2.2__Unreal_Win\core_api\src\fmod_systemi_sound.cpp(665) -     exinfo->inclusionlistnum   = 1
LogFMOD: c:\jk\workspace\Build__2.2__Unreal_Win\core_api\src\fmod_systemi_sound.cpp(697) -     exinfo->suggestedsoundtype = 5
LogFMOD: c:\jk\workspace\Build__2.2__Unreal_Win\core_api\src\fmod_systemi_sound.cpp(741) -     exinfo->initialseekpostype = 1
LogFMOD: c:\jk\workspace\Build__2.2__Unreal_Win\core_api\src\fmod_systemi_sound.cpp(1375) -     Stream 0/1: name='blimp strings2', format=2, channels=1, frequency=48000, lengthbytes=5376032, lengthpcm=2688000, pcmblocksize=0, loopstart=0, loopend=0, mode=0x00000000, channelmask=0x00000000, channelorder=0, peakvolume=0.999969.
LogFMOD: c:\jk\workspace\Build__2.2__Unreal_Win\core_api\src\fmod_async.cpp(334) - Finished Asynchronous operation on sound 0000013668D23588
LogFMOD: c:\jk\workspace\Build__2.2__Unreal_Win\core_api\src\fmod_soundi.cpp(475) - blimp strings2 (0000013668D23588)
LogFMOD: c:\jk\workspace\Build__2.2__Unreal_Win\core_api\src\fmod_soundi.cpp(475) -     blimp strings2 (000001366D888108)
LogFMOD: c:\jk\workspace\Build__2.2__Unreal_Win\core_api\src\fmod_soundi.cpp(475) -     blimp strings2 (000001366D88A788)
LogFMOD: c:\jk\workspace\Build__2.2__Unreal_Win\core_api\src\fmod_soundi.cpp(475) - blimp w voice (0000013668D23908)
LogFMOD: c:\jk\workspace\Build__2.2__Unreal_Win\core_api\src\fmod_soundi.cpp(475) -     blimp w voice (000001366D888808)
LogFMOD: c:\jk\workspace\Build__2.2__Unreal_Win\core_api\src\fmod_soundi.cpp(475) -     blimp w voice (000001366D888648)
LogFMOD: c:\jk\workspace\Build__2.2__Unreal_Win\core_api\src\fmod_soundi.cpp(475) - blimp strings3 (0000013668D23C88)
LogFMOD: c:\jk\workspace\Build__2.2__Unreal_Win\core_api\src\fmod_soundi.cpp(475) -     blimp strings3 (000001366D888F08)
LogFMOD: c:\jk\workspace\Build__2.2__Unreal_Win\core_api\src\fmod_soundi.cpp(475) -     blimp strings3 (000001366D888D48)
LogFMOD: c:\jk\workspace\Build__2.2__Unreal_Win\core_api\src\fmod_thread.cpp(165) - FMOD Studio update thread finished.
LogFMOD: c:\jk\workspace\Build__2.2__Unreal_Win\core_api\src\fmod_thread.cpp(165) - FMOD Studio bank load thread finished.
LogFMOD: c:\jk\workspace\Build__2.2__Unreal_Win\core_api\src\fmod_profile.cpp(138) - Profiler disconnecting all clients
LogFMOD: c:\jk\workspace\Build__2.2__Unreal_Win\core_api\src\fmod_thread.cpp(165) - FMOD Studio sample load thread finished.
LogFMOD: c:\jk\workspace\Build__2.2__Unreal_Win\studio_api\src\fmod_liveupdate.cpp(414) - 
LogFMOD: c:\jk\workspace\Build__2.2__Unreal_Win\studio_api\src\fmod_liveupdate.cpp(291) - Reset connection (reason Disconnected)
LogFMOD: c:\jk\workspace\Build__2.2__Unreal_Win\core_api\src\fmod_thread.cpp(165) - FMOD stream thread finished.
LogFMOD: c:\jk\workspace\Build__2.2__Unreal_Win\core_api\src\fmod_thread.cpp(165) - FMOD mixer thread finished.
LogFMOD: c:\jk\workspace\Build__2.2__Unreal_Win\core_api\src\fmod_profile.cpp(138) - Profiler disconnecting all clients
LogFMOD: c:\jk\workspace\Build__2.2__Unreal_Win\core_api\src\fmod_systemi.cpp(924) - Closed.
LogSlate: Updating window title bar state: overlay mode, drag disabled, window buttons hidden, title bar hidden
LogWorld: BeginTearingDown for /Game/ThirdPersonBP/Maps/UEDPIE_0_ThirdPersonExampleMap
LogSlate: Window 'fmodBaseTest Preview [NetMode: Standalone]  (64-bit/Windows) OculusHMD' being destroyed
LogWorld: UWorld::CleanupWorld for ThirdPersonExampleMap, bSessionEnded=true, bCleanupResources=true
LogSlate: InvalidateAllWidgets triggered.  All widgets were invalidated
LogPlayLevel: Display: Shutting down PIE online subsystems
LogSlate: InvalidateAllWidgets triggered.  All widgets were invalidated
LogAudioMixer: FMixerPlatformXAudio2::StopAudioStream() called
LogAudioMixer: FMixerPlatformXAudio2::StopAudioStream() called
LogUObjectHash: Compacting FUObjectHashTables data took   0.70ms
LogPlayLevel: Display: Destroying online subsystem :Context_4
LogEngine: Changing dynamic resolution state.

Thanks for sharing the log, and apologies for the delayed response.

This looks like the Output Log for the Play-In-Editor session, which is why it is logging Desktop banks.

To see the log of an application running on an Oculus device you need to use logcat. Please run the following command and run your application:

adb logcat > oculus.log

This will create a file called “oculus.log” which will have all of the output from your headset, and should hopefully tell us why there is no sound. Please either post the contents of this file here or upload it to your FMOD Profile and I will take a look through and help you figure out what is going wrong.

Thanks for sticking with me Jeff. Appreciate your help with this. Unfortunately my project is still pending so no upload. And the log is too long inline. So here’s a file share for you of the oculus log. Thanks again.

hopeful bump that you could find something to work on in those logs, jeff. Thanks!

Thanks for the bump- your response did get lost in my queue somehow.
I am not seeing anything FMOD related in that log- I suppose this would make sense if you aren’t getting FMOD events at all, though I would at least expect to seem some failures logged about trying to load the fmod lib or something similar. I am also not seeing any of the usual Unreal Engine logs that I would expect to see. Can you please confirm a few things for me:

  • Enable API Error Logging is ticked and your Logging Level is set to “LEVEL LOG”
  • You ran the adb logcat first and then launched your application second
  • If you build the application and open up the apk (you can do this by renaming the “.apk” to “.zip” and extracting it as a zip file) does the lib directory contain any of the fmod.so files?

Thanks again Jeff I’ve been down several rabbit holes again with this. In case anyone else finds their way here they should have a look at this excellent guide for Quest setup in UE4.27 that resolves a lot of confusion I had and is vastly superior to Unreal’s own documentation regarding what to install for Java and Android Studio.

Even after clearing up some other problems with that help, I still have the same original issue. So I moved out of the vanilla UE4.27 engine I’ve been testing in, and into our actual development environment with the 4.27 Oculus branch, hoping that would clear up further conflicts but I had the same problem there.

Furthermore I cleared up a problem with a Native Instruments service masquerading as an Android emulator. It’s called NTKDaemon and you can probably get rid of it safely, NI users.

I went through your added checks for the adb logs but they still showed nothing for FMOD after ensuring I had the steps right.

Long story short it looks like the .so files do in fact appear in the build:

image

Do my build preferences look right? I’ve always had a funny feeling about these:

Guess I’ll go ahead and post the plugin settings here as well since I’ve butchered these endlessly at this point and may have done more harm than good:

Big update here Jeff and in the end it turns out I really am an idiot. My developers sorted me out and the answer is insultingly simple, as we all probably knew it was going to be. The thing that brought it to light was moving my testing into 5.1

When I tried doing previews in 5.1 I could get all the sounds working in Selected Viewport preview on windows. When I did that, all the audio also played off the headset for some reason. Both native and FMOD. Nothing at all would play from the headset when I ran VR Preview.

Then they said “do you have Oculus chosen as the audio output in Windows.” Well no, I didn’t. It never occurred to me that this was necessary because I always had some audio playing out of the headset in spite of this, and assumed the editor handled all that routing. When I changed this I had the expected result of all audio working on the headset.

So I went back to 4.27 and this made all the audio work as well.

So a true idiot’s guide here would probably have sorted it out. But there is not one place I’ve found that explains the nuances here of why I was getting some audio from the headset despite leaving windows sending audio through my USB interface.

I don’t pretend to understand that but maybe you do. There’s probably some documentation ramifications here for future idiots. Anyway, thanks for the help.

1 Like