From 76116f4cc304bc5863c98de2010e74a0044059cc Mon Sep 17 00:00:00 2001 From: Kearwood Gilbert Date: Sat, 2 Feb 2013 23:58:08 -0800 Subject: [PATCH] Audio initialization is now delayed until rendering begins. Disabled reverb and headphone spatialization, as they are currently broken in IOS 6.0-6.1 --- KREngine/Kraken.xcodeproj/project.pbxproj | 10 ++- KREngine/kraken/KRAudioManager.cpp | 79 ++++++++++++++--------- KREngine/kraken/KRAudioManager.h | 2 + KREngine/kraken/KRAudioSource.cpp | 2 +- 4 files changed, 60 insertions(+), 33 deletions(-) diff --git a/KREngine/Kraken.xcodeproj/project.pbxproj b/KREngine/Kraken.xcodeproj/project.pbxproj index c1be712..a309f6f 100644 --- a/KREngine/Kraken.xcodeproj/project.pbxproj +++ b/KREngine/Kraken.xcodeproj/project.pbxproj @@ -34,6 +34,8 @@ E416AA9C1671375C000F6786 /* KRAnimationCurveManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E416AA9B1671375C000F6786 /* KRAnimationCurveManager.cpp */; }; E416AA9D1671375C000F6786 /* KRAnimationCurveManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E416AA9B1671375C000F6786 /* KRAnimationCurveManager.cpp */; }; E41843921678704000DBD6CF /* KRCollider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 104A335C1672D31B001C8BA6 /* KRCollider.cpp */; }; + E41B6BA816BE436100B510EB /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E41B6BA716BE436100B510EB /* CoreAudio.framework */; }; + E41B6BAA16BE437800B510EB /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E41B6BA916BE437800B510EB /* CoreAudio.framework */; }; E428C2F21669610500A16EDF /* KRAnimationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = E428C2F11669610500A16EDF /* KRAnimationManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; E428C2F31669610500A16EDF /* KRAnimationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = E428C2F11669610500A16EDF /* KRAnimationManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; E428C2F51669611600A16EDF /* KRAnimationManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E428C2F41669611600A16EDF /* KRAnimationManager.cpp */; }; @@ -372,6 +374,8 @@ E416AA9816713749000F6786 /* KRAnimationCurveManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KRAnimationCurveManager.h; sourceTree = ""; }; E416AA9B1671375C000F6786 /* KRAnimationCurveManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = KRAnimationCurveManager.cpp; sourceTree = ""; }; E41AE1DD16B124CA00980428 /* font.tga */ = {isa = PBXFileReference; lastKnownFileType = file; path = font.tga; sourceTree = ""; }; + E41B6BA716BE436100B510EB /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = System/Library/Frameworks/CoreAudio.framework; sourceTree = SDKROOT; }; + E41B6BA916BE437800B510EB /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk/System/Library/Frameworks/CoreAudio.framework; sourceTree = DEVELOPER_DIR; }; E428C2F11669610500A16EDF /* KRAnimationManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KRAnimationManager.h; sourceTree = ""; }; E428C2F41669611600A16EDF /* KRAnimationManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = KRAnimationManager.cpp; sourceTree = ""; }; E428C2F71669612500A16EDF /* KRAnimation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KRAnimation.h; sourceTree = ""; }; @@ -580,6 +584,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + E41B6BA816BE436100B510EB /* CoreAudio.framework in Frameworks */, E4F027FA1698116000D4427D /* AudioToolbox.framework in Frameworks */, E4F027D31697A01300D4427D /* OpenAL.framework in Frameworks */, E4CA10F61638BCAF005D9400 /* Accelerate.framework in Frameworks */, @@ -592,6 +597,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + E41B6BAA16BE437800B510EB /* CoreAudio.framework in Frameworks */, E4F027F71698115600D4427D /* AudioToolbox.framework in Frameworks */, E4F027D51697A02D00D4427D /* OpenAL.framework in Frameworks */, E4CA10F81638BCBB005D9400 /* Accelerate.framework in Frameworks */, @@ -993,6 +999,7 @@ E4BBBB931512A41500F43B5B /* Frameworks */ = { isa = PBXGroup; children = ( + E41B6BA916BE437800B510EB /* CoreAudio.framework */, 10CC33A3168530A300BB9846 /* libPVRTexLib.a */, E460292916682BD900261BB9 /* libfbxsdk-2013.3-static.a */, E4BBBB9A1512A48200F43B5B /* Foundation.framework */, @@ -1079,9 +1086,10 @@ E4C8E50D16B9B5F80031DDCB /* Frameworks */ = { isa = PBXGroup; children = ( + E4F027F91698116000D4427D /* AudioToolbox.framework */, + E41B6BA716BE436100B510EB /* CoreAudio.framework */, E491016413C99B9E0098455B /* Foundation.framework */, E4F027D21697A01300D4427D /* OpenAL.framework */, - E4F027F91698116000D4427D /* AudioToolbox.framework */, E491019F13C99BF50098455B /* OpenGLES.framework */, E4CA10F51638BCAE005D9400 /* Accelerate.framework */, ); diff --git a/KREngine/kraken/KRAudioManager.cpp b/KREngine/kraken/KRAudioManager.cpp index 443e515..78999f2 100644 --- a/KREngine/kraken/KRAudioManager.cpp +++ b/KREngine/kraken/KRAudioManager.cpp @@ -38,37 +38,52 @@ ALvoid alcMacOSXRenderingQualityProc(const ALint value); KRAudioManager::KRAudioManager(KRContext &context) : KRContextObject(context) { - // ----- Initialize OpenAL ----- - ALDEBUG(m_alDevice = alcOpenDevice(NULL)); - ALDEBUG(m_alContext=alcCreateContext(m_alDevice,NULL)); - ALDEBUG(alcMakeContextCurrent(m_alContext)); - - // ----- Configure listener ----- - ALDEBUG(alSpeedOfSound(1116.43701f)); // 1116.43701 feet per second - ALDEBUG(alDistanceModel(AL_EXPONENT_DISTANCE)); + m_alDevice = 0; + m_alContext = 0; -#if TARGET_OS_IPHONE - ALDEBUG(alcMacOSXRenderingQualityProc(ALC_IPHONE_SPATIAL_RENDERING_QUALITY_HEADPHONES)); -#else - ALDEBUG(alcMacOSXRenderingQualityProc(ALC_MAC_OSX_SPATIAL_RENDERING_QUALITY_HIGH)); -#endif - UInt32 setting = 1; - ALDEBUG(alcASASetListenerProc(ALC_ASA_REVERB_ON, &setting, sizeof(setting))); - ALfloat global_reverb_level = -5.0f; - ALDEBUG(alcASASetListenerProc(ALC_ASA_REVERB_GLOBAL_LEVEL, &global_reverb_level, sizeof(global_reverb_level))); - - setting = ALC_ASA_REVERB_ROOM_TYPE_SmallRoom; // ALC_ASA_REVERB_ROOM_TYPE_MediumHall2; - ALDEBUG(alcASASetListenerProc(ALC_ASA_REVERB_ROOM_TYPE, &setting, sizeof(setting))); - - - ALfloat global_reverb_eq_gain = 0.0f; - ALDEBUG(alcASASetListenerProc(ALC_ASA_REVERB_EQ_GAIN, &global_reverb_eq_gain, sizeof(global_reverb_eq_gain))); - - ALfloat global_reverb_eq_bandwidth = 0.0f; - ALDEBUG(alcASASetListenerProc(ALC_ASA_REVERB_EQ_BANDWITH, &global_reverb_eq_bandwidth, sizeof(global_reverb_eq_bandwidth))); - - ALfloat global_reverb_eq_freq = 0.0f; - ALDEBUG(alcASASetListenerProc(ALC_ASA_REVERB_EQ_FREQ, &global_reverb_eq_freq, sizeof(global_reverb_eq_freq))); +} + +void KRAudioManager::initAudio() +{ + if(m_alDevice == 0) { + // ----- Initialize OpenAL ----- + ALDEBUG(m_alDevice = alcOpenDevice(NULL)); + ALDEBUG(m_alContext=alcCreateContext(m_alDevice,NULL)); + ALDEBUG(alcMakeContextCurrent(m_alContext)); + + // ----- Configure listener ----- + ALDEBUG(alDistanceModel(AL_EXPONENT_DISTANCE)); + ALDEBUG(alSpeedOfSound(1116.43701f)); // 1116.43701 feet per second + + /* + // BROKEN IN IOS 6!! + #if TARGET_OS_IPHONE + ALDEBUG(alcMacOSXRenderingQualityProc(ALC_IPHONE_SPATIAL_RENDERING_QUALITY_HEADPHONES)); + #else + ALDEBUG(alcMacOSXRenderingQualityProc(ALC_MAC_OSX_SPATIAL_RENDERING_QUALITY_HIGH)); + #endif + */ + bool enable_reverb = false; + if(enable_reverb) { + UInt32 setting = 1; + ALDEBUG(alcASASetListenerProc(ALC_ASA_REVERB_ON, &setting, sizeof(setting))); + ALfloat global_reverb_level = -5.0f; + ALDEBUG(alcASASetListenerProc(ALC_ASA_REVERB_GLOBAL_LEVEL, &global_reverb_level, sizeof(global_reverb_level))); + + setting = ALC_ASA_REVERB_ROOM_TYPE_SmallRoom; // ALC_ASA_REVERB_ROOM_TYPE_MediumHall2; + ALDEBUG(alcASASetListenerProc(ALC_ASA_REVERB_ROOM_TYPE, &setting, sizeof(setting))); + + + ALfloat global_reverb_eq_gain = 0.0f; + ALDEBUG(alcASASetListenerProc(ALC_ASA_REVERB_EQ_GAIN, &global_reverb_eq_gain, sizeof(global_reverb_eq_gain))); + + ALfloat global_reverb_eq_bandwidth = 0.0f; + ALDEBUG(alcASASetListenerProc(ALC_ASA_REVERB_EQ_BANDWITH, &global_reverb_eq_bandwidth, sizeof(global_reverb_eq_bandwidth))); + + ALfloat global_reverb_eq_freq = 0.0f; + ALDEBUG(alcASASetListenerProc(ALC_ASA_REVERB_EQ_FREQ, &global_reverb_eq_freq, sizeof(global_reverb_eq_freq))); + } + } } KRAudioManager::~KRAudioManager() @@ -93,6 +108,7 @@ KRAudioManager::~KRAudioManager() void KRAudioManager::makeCurrentContext() { + initAudio(); ALDEBUG(alcMakeContextCurrent(m_alContext)); } @@ -109,9 +125,10 @@ void KRAudioManager::setViewMatrix(const KRMat4 &viewMatrix) vectorForward.normalize(); makeCurrentContext(); - player_position = KRVector3(1.0, 0.0, 0.0); // FINDME - HACK - TEST CODE +// player_position = KRVector3(1.0, 0.0, 0.0); // FINDME - HACK - TEST CODE ALDEBUG(alListener3f(AL_POSITION, player_position.x, player_position.y, player_position.z)); ALfloat orientation[] = {vectorForward.x, vectorForward.y, vectorForward.z, vectorUp.x, vectorUp.y, vectorUp.z}; +// ALfloat orientation[] = {0.0, 1.0, 0.0, 0.0, 1.0, 0.0}; // FINDME - HACK - TEST CODE ALDEBUG(alListenerfv(AL_ORIENTATION, orientation)); } diff --git a/KREngine/kraken/KRAudioManager.h b/KREngine/kraken/KRAudioManager.h index 84737ef..8cadd8e 100644 --- a/KREngine/kraken/KRAudioManager.h +++ b/KREngine/kraken/KRAudioManager.h @@ -68,6 +68,8 @@ private: ALCcontext* m_alContext; ALCdevice* m_alDevice; + + void initAudio(); }; diff --git a/KREngine/kraken/KRAudioSource.cpp b/KREngine/kraken/KRAudioSource.cpp index 554d6ae..7468065 100644 --- a/KREngine/kraken/KRAudioSource.cpp +++ b/KREngine/kraken/KRAudioSource.cpp @@ -410,7 +410,7 @@ void KRAudioSource::updatePosition() ALfloat obstruction = 0.0f; // type ALfloat -100.0 db (most obstruction) - 0.0 db (no obstruction, 0.0 default) KRVector3 worldPosition = getWorldTranslation(); - worldPosition = KRVector3(0.0, 0.0, 0.0); // FINDME - HACK - TEST CODE +// worldPosition = KRVector3(0.0, 0.5, 0.0); // FINDME - HACK - TEST CODE ALDEBUG(alSource3f(m_sourceID, AL_POSITION, worldPosition.x, worldPosition.y, worldPosition.z)); ALDEBUG(alSourcef(m_sourceID, AL_GAIN, m_gain)); ALDEBUG(alSourcef(m_sourceID, AL_MIN_GAIN, 0.0));