diff --git a/KREngine/kraken/KRAudioManager.cpp b/KREngine/kraken/KRAudioManager.cpp index 6d57eb9..6dfd7de 100644 --- a/KREngine/kraken/KRAudioManager.cpp +++ b/KREngine/kraken/KRAudioManager.cpp @@ -44,6 +44,10 @@ ALvoid alcMacOSXRenderingQualityProc(const ALint value); KRAudioManager::KRAudioManager(KRContext &context) : KRContextObject(context) { + m_enable_audio = true; + m_enable_hrtf = true; + m_enable_reverb = true; + m_anticlick_block = true; mach_timebase_info(&m_timebase_info); @@ -100,6 +104,34 @@ void KRAudioManager::initAudio() } } +bool KRAudioManager::getEnableAudio() +{ + return m_enable_audio; +} +void KRAudioManager::setEnableAudio(bool enable) +{ + m_enable_audio = enable; +} + +bool KRAudioManager::getEnableHRTF() +{ + return m_enable_hrtf; +} +void KRAudioManager::setEnableHRTF(bool enable) +{ + m_enable_hrtf = enable; +} + +bool KRAudioManager::getEnableReverb() +{ + return m_enable_reverb; +} + +void KRAudioManager::setEnableReverb(bool enable) +{ + m_enable_reverb = enable; +} + KRScene *KRAudioManager::getListenerScene() { return m_listener_scene; @@ -327,8 +359,6 @@ void KRAudioManager::renderBlock() { m_mutex.lock(); - bool headphone_mode = true; - // ----====---- Advance to next block in accumulation buffer ----====---- // Zero out block that was last used, so it will be ready for the next pass through the circular buffer @@ -338,19 +368,23 @@ void KRAudioManager::renderBlock() // Advance to the next block, and wrap around m_output_accumulation_block_start = (m_output_accumulation_block_start + KRENGINE_AUDIO_BLOCK_LENGTH * KRENGINE_MAX_OUTPUT_CHANNELS) % (KRENGINE_REVERB_MAX_SAMPLES * KRENGINE_MAX_OUTPUT_CHANNELS); - // ----====---- Render Direct / HRTF audio ----====---- - if(headphone_mode) { - renderHRTF(); - } else { - renderITD(); + if(m_enable_audio) { + // ----====---- Render Direct / HRTF audio ----====---- + if(m_enable_hrtf) { + renderHRTF(); + } else { + renderITD(); + } + + // ----====---- Render Indirect / Reverb channel ----====---- + if(m_enable_reverb) { + renderReverb(); + } + + // ----====---- Render Ambient Sound ----====---- + renderAmbient(); } - // ----====---- Render Indirect / Reverb channel ----====---- - renderReverb(); - - // ----====---- Render Ambient Sound ----====---- - renderAmbient(); - // ----====---- Advance audio sources ----====---- m_audio_frame += KRENGINE_AUDIO_BLOCK_LENGTH; @@ -1719,6 +1753,8 @@ void KRAudioManager::renderHRTF() void KRAudioManager::renderITD() { + // FINDME, TODO - Need Inter-Temperal based phase shifting to support 3-d spatialized audio without headphones + /* diff --git a/KREngine/kraken/KRAudioManager.h b/KREngine/kraken/KRAudioManager.h index fc1e6ab..1e7aebc 100644 --- a/KREngine/kraken/KRAudioManager.h +++ b/KREngine/kraken/KRAudioManager.h @@ -127,7 +127,20 @@ public: void startFrame(float deltaTime); + + bool getEnableAudio(); + void setEnableAudio(bool enable); + + bool getEnableHRTF(); + void setEnableHRTF(bool enable); + + bool getEnableReverb(); + void setEnableReverb(bool enable); + private: + bool m_enable_audio; + bool m_enable_hrtf; + bool m_enable_reverb; KRScene *m_listener_scene; // For now, only one scene is allowed to have active audio at once diff --git a/KREngine/kraken/KRCamera.cpp b/KREngine/kraken/KRCamera.cpp index bdbe196..da9b7b8 100644 --- a/KREngine/kraken/KRCamera.cpp +++ b/KREngine/kraken/KRCamera.cpp @@ -66,7 +66,7 @@ KRCamera::~KRCamera() { } void KRCamera::renderFrame(float deltaTime, GLint renderBufferWidth, GLint renderBufferHeight) -{ +{ // ----====---- Record timing information for measuring FPS ----====---- uint64_t current_time = m_pContext->getAbsoluteTimeMilliseconds(); if(m_last_frame_start != 0) { diff --git a/KREngine/kraken/KREngine.mm b/KREngine/kraken/KREngine.mm index 669e65e..623cbbb 100644 --- a/KREngine/kraken/KREngine.mm +++ b/KREngine/kraken/KREngine.mm @@ -193,7 +193,10 @@ void kraken::set_parameter(const std::string ¶meter_name, float parameter_va @"dust_intensity" : @46, @"lod_bias" : @47, @"enable_realtime_occlusion" : @48, - @"debug_display" : @49 + @"debug_display" : @49, + @"siren_enable" : @50, + @"siren_enable_reverb" : @51, + @"siren_enable_hrtf" : @52 } copy]; [self loadShaders]; @@ -266,7 +269,7 @@ void kraken::set_parameter(const std::string ¶meter_name, float parameter_va -(int)getParameterCount { - return 50; + return 53; } @@ -282,7 +285,7 @@ void kraken::set_parameter(const std::string ¶meter_name, float parameter_va -(NSString *)getParameterLabelWithIndex: (int)i { - NSString *parameter_labels[50] = { + NSString *parameter_labels[53] = { @"Camera FOV", @"Shadow Quality (0 - 2)", @"Enable per-pixel lighting", @@ -332,13 +335,16 @@ void kraken::set_parameter(const std::string ¶meter_name, float parameter_va @"Dust - Intensity", @"LOD Bias", @"Realtime Occlusion Tests", - @"Debug - Display" + @"Debug - Display", + @"Siren - Enable Audio", + @"Siren - Enable Reverb", + @"Siren - Enable HRTF" }; return parameter_labels[i]; } -(KREngineParameterType)getParameterTypeWithIndex: (int)i { - KREngineParameterType types[50] = { + KREngineParameterType types[53] = { KRENGINE_PARAMETER_FLOAT, KRENGINE_PARAMETER_INT, @@ -389,13 +395,16 @@ void kraken::set_parameter(const std::string ¶meter_name, float parameter_va KRENGINE_PARAMETER_FLOAT, KRENGINE_PARAMETER_FLOAT, KRENGINE_PARAMETER_BOOL, - KRENGINE_PARAMETER_INT + KRENGINE_PARAMETER_INT, + KRENGINE_PARAMETER_BOOL, + KRENGINE_PARAMETER_BOOL, + KRENGINE_PARAMETER_BOOL }; return types[i]; } -(float)getParameterValueWithIndex: (int)i { - float values[50] = { + float values[53] = { _settings.perspective_fov, (float)_settings.m_cShadowBuffers, _settings.bEnablePerPixel ? 1.0f : 0.0f, @@ -445,7 +454,10 @@ void kraken::set_parameter(const std::string ¶meter_name, float parameter_va _settings.dust_particle_intensity, _settings.getLODBias(), _settings.getEnableRealtimeOcclusion(), - _settings.debug_display + _settings.debug_display, + _settings.siren_enable, + _settings.siren_enable_reverb, + _settings.siren_enable_hrtf }; return values[i]; } @@ -642,17 +654,27 @@ void kraken::set_parameter(const std::string ¶meter_name, float parameter_va case 49: _settings.debug_display = (KRRenderSettings::debug_display_type)v; break; + case 50: + _settings.siren_enable = bNewBoolVal; + break; + case 51: + _settings.siren_enable_reverb = bNewBoolVal; + break; + case 52: + _settings.siren_enable_hrtf = bNewBoolVal; + break; } } -(float)getParameterMinWithIndex: (int)i { - float minValues[50] = { + float minValues[53] = { 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.01f, 50.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, -10.0f, 0.0f, 0.0f + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, -10.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f }; return minValues[i]; @@ -660,12 +682,13 @@ void kraken::set_parameter(const std::string ¶meter_name, float parameter_va -(float)getParameterMaxWithIndex: (int)i { - float maxValues[50] = { + float maxValues[53] = { PI, 3.0f, 1.0f, 1.0, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 10.0f, 1.0f, 10.0f, 2.0f, 1.0f, 1.0f, 1.0f, 5.0f, 1.0f, 0.5f, 1.0f, 2.0f, 2.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 10.0f, 1000.0f, 1.0f, 5.0f, 1000.0f, 1.0f, 5.0f, 3.0f, - 1000.0f, 1000.0f, 0.01f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 10.0f, 1.0f, (float)(KRRenderSettings::KRENGINE_DEBUG_DISPLAY_NUMBER - 1) + 1000.0f, 1000.0f, 0.01f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 10.0f, 1.0f, (float)(KRRenderSettings::KRENGINE_DEBUG_DISPLAY_NUMBER - 1), + 1.0f, 1.0f, 1.0f }; return maxValues[i]; diff --git a/KREngine/kraken/KRRenderSettings.cpp b/KREngine/kraken/KRRenderSettings.cpp index 8af8885..5aaa806 100644 --- a/KREngine/kraken/KRRenderSettings.cpp +++ b/KREngine/kraken/KRRenderSettings.cpp @@ -10,6 +10,9 @@ KRRenderSettings::KRRenderSettings() { + siren_enable = true; + siren_enable_reverb = true; + siren_enable_hrtf = true; m_enable_realtime_occlusion = true; bShowShadowBuffer = false; @@ -85,6 +88,10 @@ KRRenderSettings::~KRRenderSettings() KRRenderSettings& KRRenderSettings::operator=(const KRRenderSettings &s) { + siren_enable = s.siren_enable; + siren_enable_reverb = s.siren_enable_reverb; + siren_enable_hrtf = s.siren_enable_hrtf; + bEnablePerPixel = s.bEnablePerPixel; bEnableDiffuseMap = s.bEnableDiffuseMap; bEnableNormalMap = s.bEnableNormalMap; diff --git a/KREngine/kraken/KRRenderSettings.h b/KREngine/kraken/KRRenderSettings.h index c132e06..9e609bf 100644 --- a/KREngine/kraken/KRRenderSettings.h +++ b/KREngine/kraken/KRRenderSettings.h @@ -98,6 +98,10 @@ public: bool getEnableRealtimeOcclusion(); void setEnableRealtimeOcclusion(bool enable); + + bool siren_enable; + bool siren_enable_reverb; + bool siren_enable_hrtf; private: float m_lodBias; diff --git a/KREngine/kraken/KRScene.cpp b/KREngine/kraken/KRScene.cpp index 9573551..3baa751 100644 --- a/KREngine/kraken/KRScene.cpp +++ b/KREngine/kraken/KRScene.cpp @@ -68,6 +68,12 @@ void KRScene::renderFrame(float deltaTime, int width, int height) { camera = new KRCamera(*this, "default_camera"); m_pRootNode->addChild(camera); } + + // FINDME - This should be moved to de-couple Siren from the Rendering pipeline + getContext().getAudioManager()->setEnableAudio(camera->settings.siren_enable); + getContext().getAudioManager()->setEnableHRTF(camera->settings.siren_enable_hrtf); + getContext().getAudioManager()->setEnableReverb(camera->settings.siren_enable_reverb); + camera->renderFrame(deltaTime, width, height); getContext().endFrame(deltaTime); physicsUpdate(deltaTime);