From 87d9158f75b16e1ae216ea9b0c6e503bc2fb69e9 Mon Sep 17 00:00:00 2001 From: SHAM-DP Date: Tue, 7 Mar 2023 10:35:45 +0800 Subject: [PATCH 1/2] Added 3d right handed flag for core init. Added profile flags for debug configuration. Added handling of software format and output type (TO BE TESTED) --- .../src/AudioSystem/SHAudioSystem.cpp | 39 ++++++++++++++++--- 1 file changed, 34 insertions(+), 5 deletions(-) diff --git a/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp b/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp index 60b709c2..a1194d74 100644 --- a/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp +++ b/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp @@ -54,12 +54,41 @@ namespace SHADE denseListener = &SHComponentManager::GetDense(); fmodStudioSystem->getCoreSystem(&fmodSystem); - fmodSystem->setSoftwareFormat(0, FMOD_SPEAKERMODE_5POINT1, 0); - result = fmodStudioSystem->initialize(AUDIO_SYS_MAX_CHANNELS, AUDIO_SYS_MAX_CHANNELS, FMOD_STUDIO_INIT_NORMAL | FMOD_INIT_NORMAL, extraDriverData); - - ErrorCheck(); - fmodSystem->setSoftwareFormat(0, speakerMode, 0); + result = fmodSystem->setSoftwareFormat(0, FMOD_SPEAKERMODE_5POINT1, 0); + ErrorCheck(); + result = fmodSystem->setOutput(FMOD_OUTPUTTYPE_AUDIO3D); + if(result != FMOD_OK) + { + result = fmodSystem->setOutput(FMOD_OUTPUTTYPE_WINSONIC); + if (result == FMOD_OK) + { + result = fmodSystem->setSoftwareFormat(0, FMOD_SPEAKERMODE_7POINT1POINT4, 0); + ErrorCheck(); + } + } + + int numDrivers{}; + result = fmodSystem->getNumDrivers(&numDrivers); + if(numDrivers == 0) + { + fmodSystem->setDSPBufferSize(512, 4); + fmodSystem->setOutput(FMOD_OUTPUTTYPE_AUTODETECT); + } + FMOD_OUTPUTTYPE outputType = FMOD_OUTPUTTYPE_WINSONIC; + fmodSystem->getSoftwareFormat(0, &speakerMode, 0); + fmodSystem->getOutput(&outputType); + + FMOD_STUDIO_INITFLAGS studioInitFlags = FMOD_STUDIO_INIT_NORMAL; + FMOD_INITFLAGS coreInitFlags = FMOD_INIT_NORMAL | FMOD_INIT_3D_RIGHTHANDED | FMOD_INIT_PREFER_DOLBY_DOWNMIX; +#ifdef _DEBUG + studioInitFlags |= FMOD_STUDIO_INIT_LIVEUPDATE; + coreInitFlags |= FMOD_INIT_PROFILE_ENABLE; +#endif + + result = fmodStudioSystem->initialize(AUDIO_SYS_MAX_CHANNELS, studioInitFlags, coreInitFlags, extraDriverData); + + ErrorCheck(); result = fmodSystem->createChannelGroup("SFX", &sfxChannelGroup); ErrorCheck(); -- 2.40.1 From 5ba50cfbcca8190a37458d4dee1d8e132142b7c8 Mon Sep 17 00:00:00 2001 From: SHAM-DP Date: Tue, 7 Mar 2023 17:57:48 +0800 Subject: [PATCH 2/2] Fix for 3d audio (listener up vec was wrong) --- .../src/AudioSystem/SHAudioSystem.cpp | 30 +++++++++++++++---- SHADE_Engine/src/AudioSystem/SHAudioSystem.h | 1 + 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp b/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp index a1194d74..eac465ff 100644 --- a/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp +++ b/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp @@ -75,12 +75,12 @@ namespace SHADE fmodSystem->setDSPBufferSize(512, 4); fmodSystem->setOutput(FMOD_OUTPUTTYPE_AUTODETECT); } - FMOD_OUTPUTTYPE outputType = FMOD_OUTPUTTYPE_WINSONIC; + FMOD_OUTPUTTYPE outputType{}; fmodSystem->getSoftwareFormat(0, &speakerMode, 0); fmodSystem->getOutput(&outputType); FMOD_STUDIO_INITFLAGS studioInitFlags = FMOD_STUDIO_INIT_NORMAL; - FMOD_INITFLAGS coreInitFlags = FMOD_INIT_NORMAL | FMOD_INIT_3D_RIGHTHANDED | FMOD_INIT_PREFER_DOLBY_DOWNMIX; + FMOD_INITFLAGS coreInitFlags = FMOD_INIT_NORMAL | FMOD_INIT_3D_RIGHTHANDED; #ifdef _DEBUG studioInitFlags |= FMOD_STUDIO_INIT_LIVEUPDATE; coreInitFlags |= FMOD_INIT_PROFILE_ENABLE; @@ -133,6 +133,10 @@ namespace SHADE const ReceiverPtr ON_PAUSE_RECEIVER_PTR = std::dynamic_pointer_cast(ON_PAUSE_RECEIVER); SHEventManager::SubscribeTo(SH_EDITOR_ON_PAUSE_EVENT, ON_PAUSE_RECEIVER_PTR); + const std::shared_ptr ON_SCENE_EXIT_RECEIVER{ std::make_shared>(this, &SHAudioSystem::onSceneExit) }; + const ReceiverPtr ON_SCENE_EXIT_RECEIVER_PTR = std::dynamic_pointer_cast(ON_SCENE_EXIT_RECEIVER); + SHEventManager::SubscribeTo(SH_SCENE_EXIT_POST, ON_SCENE_EXIT_RECEIVER_PTR); + #endif } @@ -174,7 +178,9 @@ namespace SHADE FMOD_3D_ATTRIBUTES attribs{ { 0 } }; SHVec3 pos = camComponent->GetPosition(); SHVec3 forward, up, right; + camSystem->GetCameraAxis(*camComponent, forward, right, up); + up *= -1.0f; attribs.position = { pos.x, pos.y, pos.z }; attribs.forward = { forward.x, forward.y, forward.z }; attribs.up = { up.x, up.y, up.z }; @@ -185,7 +191,7 @@ namespace SHADE auto [begin, end] = audioClipLibrary.GetDenseAccess(); for (auto& it = begin; it != end; ++it) { - if(it->instance && (it->transformRef != MAX_EID)) + if(it->instance && it->instance->isValid() && (it->transformRef != MAX_EID)) { if(SHTransformComponent* transformComponent = SHComponentManager::GetComponent_s(it->transformRef)) { @@ -194,11 +200,13 @@ namespace SHADE SHQuaternion worldOrientation = transformComponent->GetWorldOrientation(); SHVec3 orientatedFoward = (worldOrientation * SHQuaternion::FromEuler(SHVec3::Forward) * SHQuaternion::Conjugate(worldOrientation)).ToEuler(); SHVec3 orientatedUp = (worldOrientation * SHQuaternion::FromEuler(SHVec3::Up) * SHQuaternion::Conjugate(worldOrientation)).ToEuler(); - + orientatedFoward = SHVec3::Normalise(orientatedFoward); + orientatedUp = SHVec3::Normalise(orientatedUp); attribs.position = {pos.x, pos.y, pos.z}; attribs.forward = {orientatedFoward.x, orientatedFoward.y, orientatedFoward.z}; attribs.up = {orientatedUp.x, orientatedUp.y, orientatedUp.z}; - it->instance->set3DAttributes(&attribs); + result = it->instance->set3DAttributes(&attribs); + ErrorCheck(); } } } @@ -825,6 +833,18 @@ namespace SHADE return onStopEvent->handle; } + + SHEventHandle SHAudioSystem::onSceneExit(SHEventPtr onSceneExitEvent) + { + auto [begin, end] = audioClipLibrary.GetDenseAccess(); + for (auto& it = begin; it != end; ++it) + { + it->instance->release(); + } + + return onSceneExitEvent->handle; + } + SHEventHandle SHAudioSystem::onPlay(SHEventPtr onStopEvent) { if(GetPaused()) diff --git a/SHADE_Engine/src/AudioSystem/SHAudioSystem.h b/SHADE_Engine/src/AudioSystem/SHAudioSystem.h index 99ff7953..7e2fac11 100644 --- a/SHADE_Engine/src/AudioSystem/SHAudioSystem.h +++ b/SHADE_Engine/src/AudioSystem/SHAudioSystem.h @@ -123,6 +123,7 @@ namespace SHADE SHEventHandle onPlay(SHEventPtr onStopEvent); SHEventHandle onStop(SHEventPtr onStopEvent); SHEventHandle onPause(SHEventPtr onStopEvent); + SHEventHandle onSceneExit(SHEventPtr onSceneExitEvent); }; } -- 2.40.1