Conflict between FMOD and NX multimedia.nso lib

Hi Guys,
We implemented multimedia.nso lib to play movie and FMOD to play other sounds for our games on NX( NXSDK: 5.4, FMOD Studio SDK: 10.04), they will be working correctly if we make our games to Executable Application. As we have 2 game titles, so we need to change our games to Dynamic library and run them with a launcher, in this case we can play movie correctly, but we can not hear any other FMOD sounds and there is any fmod error/worning message in the output window.

There are some steps below to check if there is a conflict between FMOD and NX multimedia.nso lib:

1: we implemented FMOD to the NX Dynamic Library Loading Sample( Nintendo5.4\NintendoSDK\Samples\Sources\Applications\RoSimple\RoStaticApplication), at this moment the FMOD is working correctly and can hear the sound.
2: Only linked multimedia.nso, and did not add any codes to play a movie, now we can not hear any sound from FMOD.

I have been working on this issue several days, do you have any suggestion about it?

There are my codes below, you can take my changes to the RoStaticApplication sample to reproduce it.

RoStaticApplication.cpp

Change this line from
static const size_t MaxFileSize = 0x400000;
to
static const size_t MaxFileSize = 0x40000000;

RoDynamicModule.cpp:

#include <nn/nn_Log.h>
#include “fmod_studio.hpp”
#include “fmod.hpp”
#include “common.h”

void PrintHelloWorld()
{
NN_LOG(“Hello world.\n”);

void *extraDriverData = NULL;

FMOD::Studio::System* systemFmod = NULL;

FMOD::Debug_Initialize(FMOD_DEBUG_LEVEL_ERROR | FMOD_DEBUG_LEVEL_WARNING | FMOD_DEBUG_LEVEL_LOG, FMOD_DEBUG_MODE_TTY);

FMOD_RESULT res;
res = (FMOD::Studio::System::create(&systemFmod));

// The example Studio project is authored for 5.1 sound, so set up the system output mode to match
FMOD::System* lowLevelSystem = NULL;
res = (systemFmod->getLowLevelSystem(&lowLevelSystem));
res = (lowLevelSystem->setSoftwareFormat(0, FMOD_SPEAKERMODE_5POINT1, 0));

res = (systemFmod->initialize(1024, FMOD_STUDIO_INIT_NORMAL, FMOD_INIT_NORMAL, extraDriverData));

FMOD::Studio::Bank* masterBank = NULL;
res = (systemFmod->loadBankFile(("rom:/MasterBank.bank"), FMOD_STUDIO_LOAD_BANK_NORMAL, &masterBank));

FMOD::Studio::Bank* stringsBank = NULL;
res = (systemFmod->loadBankFile(("rom:/MasterBank.strings.bank"), FMOD_STUDIO_LOAD_BANK_NORMAL, &stringsBank));

FMOD::Studio::Bank* ambienceBank = NULL;
res = (systemFmod->loadBankFile(("rom:/Weapons.bank"), FMOD_STUDIO_LOAD_BANK_NORMAL, &ambienceBank));

FMOD::Studio::EventDescription* loopingAmbienceDescription = NULL;
res = (systemFmod->getEvent("event:/Weapons/Full Auto Loop", &loopingAmbienceDescription));

loopingAmbienceDescription->loadSampleData();
FMOD::Studio::EventInstance* loopingAmbienceInstance = NULL;
res = (loopingAmbienceDescription->createInstance(&loopingAmbienceInstance));
res = loopingAmbienceInstance->start();

do
{
	(systemFmod->update());
	nn::os::SleepThread(nn::TimeSpan::FromMilliSeconds(50));
} while (true);

(masterBank->unload());
(stringsBank->unload());
(ambienceBank->unload());
(systemFmod->release());

}

The changes for RoDynamicModule-spec.NX.autogen project:

Additional Include Directories:
C:\Program Files (x86)\FMOD SoundSystem\FMOD Studio API Switch_10_4\api\studio\inc;
C:\Program Files (x86)\FMOD SoundSystem\FMOD Studio API Switch_10_4\api\studio\examples;
C:\Program Files (x86)\FMOD SoundSystem\FMOD Studio API Switch_10_4\api\lowlevel\inc

Additional Library Directories:
C:\Program Files (x86)\FMOD SoundSystem\FMOD Studio API Switch_10_4\api\studio\lib\nx64;
C:\Program Files (x86)\FMOD SoundSystem\FMOD Studio API Switch_10_4\api\lowlevel\lib\nx64

Additional Dependencies(with object culling):
libfmodstudio.a;libfmod.a;

The changes for RoStaticApplication-spec.NX.autogen project:
Additional NSO Files:
multimedia.nso;

This is due to conflicting vorbis lookup tables. We originally thought it was caused by UE4 but now seems like this is the offending library.

This fix will be available in the next release (1.10.05).

Ok, thank you for your help.

Hi Cameron,

At this moment, we found a workaround: if we create FMOD system in the launcher and pass it to the dynamic lib, it will be working correctly.

Best,