diff --git a/binaries/data/config/default.cfg b/binaries/data/config/default.cfg index 6aa0fd6c14..529666ad08 100644 --- a/binaries/data/config/default.cfg +++ b/binaries/data/config/default.cfg @@ -102,7 +102,7 @@ sound.musicgain = 0.2 sound.ambientgain = 0.6 sound.actiongain = 0.7 sound.bufferCount = 50 -sound.bufferSize = 65536 +sound.bufferSize = 98304 ; Camera control settings view.scroll.speed = 120.0 diff --git a/source/ps/Game.cpp b/source/ps/Game.cpp index 1b8bbf4642..48ffe2587a 100644 --- a/source/ps/Game.cpp +++ b/source/ps/Game.cpp @@ -24,6 +24,7 @@ #include "graphics/ParticleManager.h" #include "graphics/UnitManager.h" #include "gui/GUIManager.h" +#include "lib/config2.h" #include "lib/timer.h" #include "network/NetClient.h" #include "network/NetServer.h" @@ -294,7 +295,10 @@ bool CGame::Update(const double deltaRealTime, bool doInterpolate) if (doInterpolate) { m_TurnManager->Interpolate(deltaSimTime, deltaRealTime); - g_SoundManager->IdleTask(); +#if CONFIG2_AUDIO + if ( g_SoundManager ) + g_SoundManager->IdleTask(); +#endif } // TODO: maybe we should add a CCmpParticleInterface that passes the interpolation commands diff --git a/source/ps/GameSetup/Config.cpp b/source/ps/GameSetup/Config.cpp index d24aa7552b..a2856cc633 100644 --- a/source/ps/GameSetup/Config.cpp +++ b/source/ps/GameSetup/Config.cpp @@ -84,6 +84,7 @@ static void LoadGlobals() CFG_GET_USER_VAL("silhouettes", Bool, g_Silhouettes); CFG_GET_USER_VAL("showsky", Bool, g_ShowSky); +#if CONFIG2_AUDIO float gain = 0.5f; float musicGain = 0.5f; float ambientGain = 0.5f; @@ -99,12 +100,15 @@ static void LoadGlobals() CFG_GET_USER_VAL("sound.bufferCount", Int, bufferCount); CFG_GET_USER_VAL("sound.bufferSize", UnsignedLong, bufferSize); - g_SoundManager->SetMasterGain(gain); - g_SoundManager->SetMusicGain(musicGain); - g_SoundManager->SetAmbientGain(ambientGain); - g_SoundManager->SetActionGain(actionGain); + if ( g_SoundManager ) { + g_SoundManager->SetMasterGain(gain); + g_SoundManager->SetMusicGain(musicGain); + g_SoundManager->SetAmbientGain(ambientGain); + g_SoundManager->SetActionGain(actionGain); - g_SoundManager->SetMemoryUsage(bufferSize, bufferCount); + g_SoundManager->SetMemoryUsage(bufferSize, bufferCount); + } +#endif // CONFIG2_AUDIO } diff --git a/source/ps/GameSetup/GameSetup.cpp b/source/ps/GameSetup/GameSetup.cpp index 1b1cd9b471..6468752a30 100644 --- a/source/ps/GameSetup/GameSetup.cpp +++ b/source/ps/GameSetup/GameSetup.cpp @@ -18,6 +18,7 @@ #include "precompiled.h" #include "lib/app_hooks.h" +#include "lib/config2.h" #include "lib/input.h" #include "lib/ogl.h" #include "lib/timer.h" @@ -190,8 +191,10 @@ void Render() { PROFILE3("render"); - g_SoundManager->IdleTask(); - +#if CONFIG2_AUDIO + if (g_SoundManager) + g_SoundManager->IdleTask(); +#endif ogl_WarnIfError(); g_Profiler2.RecordGPUFrameStart(); @@ -685,7 +688,10 @@ void Shutdown(int UNUSED(flags)) // resource // first shut down all resource owners, and then the handle manager. TIMER_BEGIN(L"resource modules"); - delete g_SoundManager; +#if CONFIG2_AUDIO + if (g_SoundManager) + delete g_SoundManager; +#endif g_VFS.reset(); @@ -862,7 +868,10 @@ void Init(const CmdLineArgs& args, int UNUSED(flags)) g_ScriptStatsTable = new CScriptStatsTable; g_ProfileViewer.AddRootTable(g_ScriptStatsTable); - g_SoundManager = new CSoundManager(); + +#if CONFIG2_AUDIO + CSoundManager::CreateSoundManager(); +#endif InitScripting(); // before GUI @@ -926,7 +935,9 @@ void InitGraphics(const CmdLineArgs& args, int flags) // speed up startup by disabling all sound // (OpenAL init will be skipped). // must be called before first snd_open. - g_SoundManager->SetEnabled(false); +#if CONFIG2_AUDIO + CSoundManager::SetEnabled(false); +#endif } g_GUI = new CGUIManager(g_ScriptingHost.GetScriptInterface()); diff --git a/source/simulation2/components/CCmpSoundManager.cpp b/source/simulation2/components/CCmpSoundManager.cpp index 2a83a1064d..d1160fa2c1 100644 --- a/source/simulation2/components/CCmpSoundManager.cpp +++ b/source/simulation2/components/CCmpSoundManager.cpp @@ -20,6 +20,7 @@ #include "simulation2/system/Component.h" #include "ICmpSoundManager.h" +#include "lib/config2.h" #include "ps/CLogger.h" #include "simulation2/MessageTypes.h" #include "simulation2/components/ICmpPosition.h" @@ -36,7 +37,9 @@ public: DEFAULT_COMPONENT_ALLOCATOR(SoundManager) +#if CONFIG2_AUDIO std::map m_SoundGroups; +#endif static std::string GetSchema() { @@ -49,9 +52,11 @@ public: virtual void Deinit() { +#if CONFIG2_AUDIO for (std::map::iterator it = m_SoundGroups.begin(); it != m_SoundGroups.end(); ++it) delete it->second; m_SoundGroups.clear(); +#endif // CONFIG2_AUDIO } virtual void Serialize(ISerializer& UNUSED(serialize)) @@ -71,6 +76,7 @@ public: { case MT_Update: { +#if CONFIG2_AUDIO // Update all the sound groups // TODO: is it sensible to do this once per simulation turn, not once per renderer frame // or on some other timer? @@ -79,6 +85,9 @@ public: for (std::map::iterator it = m_SoundGroups.begin(); it != m_SoundGroups.end(); ++it) if (it->second) it->second->Update(t); +#else // !CONFIG2_AUDIO + UNUSED2(msg); +#endif // !CONFIG2_AUDIO break; } } @@ -86,6 +95,7 @@ public: virtual void PlaySoundGroup(std::wstring name, entity_id_t source) { +#if CONFIG2_AUDIO // Make sure the sound group is loaded CSoundGroup* group; if (m_SoundGroups.find(name) == m_SoundGroups.end()) @@ -127,7 +137,13 @@ public: group->PlayNext(sourcePos); } +#else // !CONFIG2_AUDIO + UNUSED2(name); + UNUSED2(source); +#endif // !CONFIG2_AUDIO } }; REGISTER_COMPONENT_TYPE(SoundManager) + + diff --git a/source/soundmanager/SoundManager.cpp b/source/soundmanager/SoundManager.cpp index ac75ad2ba5..d020f43fcb 100644 --- a/source/soundmanager/SoundManager.cpp +++ b/source/soundmanager/SoundManager.cpp @@ -27,8 +27,10 @@ #include "soundmanager/js/AmbientSound.h" #include "soundmanager/js/MusicSound.h" #include "soundmanager/js/Sound.h" +#include "ps/CLogger.h" + +CSoundManager* g_SoundManager = NULL; -CSoundManager* g_SoundManager; void CSoundManager::ScriptingInit() { @@ -38,6 +40,40 @@ void CSoundManager::ScriptingInit() JSoundPlayer::ScriptingInit(); } + +#if CONFIG2_AUDIO + +void CSoundManager::CreateSoundManager() +{ + g_SoundManager = new CSoundManager(); +} + +void CSoundManager::SetEnabled(bool doEnable) +{ + if ( g_SoundManager && !doEnable ) + { + delete g_SoundManager; + + g_SoundManager = NULL; + } + else if ( ! g_SoundManager && doEnable ) + { + CSoundManager::CreateSoundManager(); + } +} + +void CSoundManager::al_ReportError(ALenum err, const char* caller, int line) +{ + LOGERROR(L"OpenAL error: %hs; called from %hs (line %d)\n", alGetString(err), caller, line); +} + +void CSoundManager::al_check(const char* caller, int line) +{ + ALenum err = alGetError(); + if (err != AL_NO_ERROR) + al_ReportError(err, caller, line); +} + CSoundManager::CSoundManager() { m_Items = new ItemsList; @@ -47,11 +83,10 @@ CSoundManager::CSoundManager() m_MusicGain = 1; m_AmbientGain = 1; m_ActionGain = 1; - m_Enabled = true; m_BufferCount = 50; m_BufferSize = 65536; m_MusicEnabled = true; - AlcInit(); + m_Enabled = AlcInit() == INFO::OK; } CSoundManager::~CSoundManager() @@ -96,13 +131,13 @@ Status CSoundManager::AlcInit() debug_printf(L"Sound: AlcInit success, using %hs\n", dev_name); else { - debug_printf(L"Sound: AlcInit failed, m_Device=%p m_Context=%p dev_name=%hs err=%d\n", m_Device, m_Context, dev_name, err); + LOGERROR(L"Sound: AlcInit failed, m_Device=%p m_Context=%p dev_name=%hs err=%d\n", m_Device, m_Context, dev_name, err); // FIXME Hack to get around exclusive access to the sound device #if OS_UNIX ret = INFO::OK; #else ret = ERR::FAIL; -#endif +#endif // !OS_UNIX } return ret; @@ -142,8 +177,12 @@ void CSoundManager::SetActionGain(float gain) ISoundItem* CSoundManager::LoadItem(const VfsPath& itemPath) { + AL_CHECK + CSoundData* itemData = CSoundData::SoundDataFromFile(itemPath); ISoundItem* answer = NULL; + + AL_CHECK if (itemData != NULL) { @@ -198,10 +237,12 @@ void CSoundManager::IdleTask() deadItems++; } } + AL_CHECK if (m_CurrentTune) m_CurrentTune->EnsurePlay(); if (m_CurrentEnvirons) m_CurrentEnvirons->EnsurePlay(); + AL_CHECK } void CSoundManager::DeleteItem(long itemNum) @@ -232,11 +273,6 @@ void CSoundManager::InitListener() alDistanceModel(AL_EXPONENT_DISTANCE); } -void CSoundManager::SetEnabled(bool doEnable) -{ - m_Enabled = doEnable; -} - void CSoundManager::PlayActionItem(ISoundItem* anItem) { if (anItem) @@ -245,6 +281,7 @@ void CSoundManager::PlayActionItem(ISoundItem* anItem) { anItem->SetGain(m_Gain * m_ActionGain); anItem->Play(); + AL_CHECK } } } @@ -255,6 +292,7 @@ void CSoundManager::PlayGroupItem(ISoundItem* anItem, ALfloat groupGain) if (m_Enabled && (m_ActionGain > 0)) { anItem->SetGain(m_Gain * groupGain); anItem->Play(); + AL_CHECK } } } @@ -271,6 +309,7 @@ void CSoundManager::SetMusicEnabled (bool isEnabled) void CSoundManager::SetMusicItem(ISoundItem* anItem) { + AL_CHECK if (m_CurrentTune) { m_CurrentTune->FadeAndDelete(3.00); @@ -291,6 +330,7 @@ void CSoundManager::SetMusicItem(ISoundItem* anItem) anItem->StopAndDelete(); } } + AL_CHECK } void CSoundManager::SetAmbientItem(ISoundItem* anItem) @@ -312,5 +352,8 @@ void CSoundManager::SetAmbientItem(ISoundItem* anItem) m_CurrentEnvirons->FadeToIn(m_Gain * m_AmbientGain, 2.00); } } + AL_CHECK } +#endif // CONFIG2_AUDIO + diff --git a/source/soundmanager/SoundManager.h b/source/soundmanager/SoundManager.h index b799f4a0a0..521a69c5d7 100644 --- a/source/soundmanager/SoundManager.h +++ b/source/soundmanager/SoundManager.h @@ -18,12 +18,18 @@ #ifndef INCLUDED_SOUNDMANAGER_H #define INCLUDED_SOUNDMANAGER_H -#include "soundmanager/items/ISoundItem.h" +#include "lib/config2.h" + +#if CONFIG2_AUDIO + #include "lib/file/vfs/vfs_path.h" +#include "soundmanager/items/ISoundItem.h" #include #include +#define AL_CHECK CSoundManager::al_check(__func__, __LINE__); + typedef std::vector ItemsList; @@ -45,6 +51,7 @@ protected: long m_BufferSize; int m_BufferCount; bool m_MusicEnabled; + bool m_SoundEnabled; public: CSoundManager(); @@ -53,8 +60,14 @@ public: ISoundItem* LoadItem(const VfsPath& itemPath); static void ScriptingInit(); + static void CreateSoundManager(); + static void SetEnabled(bool doEnable); + + static void al_ReportError(ALenum err, const char* caller, int line); + static void al_check(const char* caller, int line); void SetMusicEnabled (bool isEnabled); + void setSoundEnabled( bool enabled ); ISoundItem* ItemFromWAV(VfsPath& fname); ISoundItem* ItemFromOgg(VfsPath& fname); @@ -78,14 +91,25 @@ public: void SetAmbientGain(float gain); void SetActionGain(float gain); - void SetEnabled(bool doEnable); protected: void InitListener(); virtual Status AlcInit(); }; +#else // !CONFIG2_AUDIO + +#define AL_CHECK + +class CSoundManager +{ +public: + static void ScriptingInit(); +}; +#endif // !CONFIG2_AUDIO + + extern CSoundManager* g_SoundManager; - #endif // INCLUDED_SOUNDMANAGER_H + diff --git a/source/soundmanager/data/OggData.cpp b/source/soundmanager/data/OggData.cpp index 1ba8935ffd..f2e19594e2 100644 --- a/source/soundmanager/data/OggData.cpp +++ b/source/soundmanager/data/OggData.cpp @@ -19,10 +19,11 @@ #include "OggData.h" -#include "soundmanager/SoundManager.h" -#include -#include +#if CONFIG2_AUDIO + +#include "soundmanager/SoundManager.h" +#include "ps/Filesystem.h" COggData::COggData() { @@ -32,7 +33,6 @@ COggData::COggData() COggData::~COggData() { alDeleteBuffers(m_BuffersUsed, m_Buffer); - ov_clear(&m_vf); } void COggData::SetFormatAndFreq(int form, ALsizei freq) @@ -41,25 +41,14 @@ void COggData::SetFormatAndFreq(int form, ALsizei freq) m_Frequency = freq; } -bool COggData::InitOggFile(const wchar_t* fileLoc) +bool COggData::InitOggFile(const VfsPath& itemPath) { - int buffersToStart = g_SoundManager->GetBufferCount(); - char nameH[300]; - sprintf(nameH, "%ls", fileLoc); - - FILE* f = fopen(nameH, "rb"); - m_current_section = 0; - int err = ov_open_callbacks(f, &m_vf, NULL, 0, OV_CALLBACKS_DEFAULT); - if (err < 0) - { - fprintf(stderr,"Input does not appear to be an Ogg bitstream :%d :%d.\n", err, ferror(f)); - return false; - } - - m_FileName = CStrW(fileLoc); + int buffersToStart = g_SoundManager->GetBufferCount(); + OpenOggNonstream( g_VFS, itemPath, ogg); m_FileFinished = false; - SetFormatAndFreq((m_vf.vi->channels == 1)? AL_FORMAT_MONO16 : AL_FORMAT_STEREO16 , (ALsizei)m_vf.vi->rate); + + SetFormatAndFreq(ogg->Format(), ogg->SamplingRate() ); alGetError(); /* clear error */ alGenBuffers(buffersToStart, m_Buffer); @@ -96,8 +85,7 @@ bool COggData::IsFileFinished() void COggData::ResetFile() { - ov_time_seek(&m_vf, 0); - m_current_section = 0; + ogg->ResetFile(); m_FileFinished = false; } @@ -110,32 +98,13 @@ int COggData::FetchDataIntoBuffer(int count, ALuint* buffers) { long bufferSize = g_SoundManager->GetBufferSize(); - char* pcmout = new char[bufferSize + 5000]; + u8* pcmout = new u8[bufferSize + 5000]; int buffersWritten = 0; for (int i = 0; (i < count) && !m_FileFinished; i++) { - char* readDest = pcmout; - long totalRet = 0; - while (totalRet < bufferSize) - { - long ret=ov_read(&m_vf,readDest, 4096,0,2,1, &m_current_section); - if (ret == 0) - { - m_FileFinished=true; - break; - } - else if (ret < 0) - { - /* error in the stream. Not a problem, just reporting it in - case we (the app) cares. In this case, we don't. */ - } - else - { - totalRet += ret; - readDest += ret; - } - } + Status totalRet = ogg->GetNextChunk( pcmout, bufferSize); + m_FileFinished = ogg->atFileEOF(); if (totalRet > 0) { buffersWritten++; @@ -157,7 +126,5 @@ ALuint* COggData::GetBufferPtr() return m_Buffer; } - - - +#endif // CONFIG2_AUDIO diff --git a/source/soundmanager/data/OggData.h b/source/soundmanager/data/OggData.h index 6dacc3fed2..0002060688 100644 --- a/source/soundmanager/data/OggData.h +++ b/source/soundmanager/data/OggData.h @@ -18,9 +18,13 @@ #ifndef INCLUDED_OGGDATA_H #define INCLUDED_OGGDATA_H +#include "lib/config2.h" + +#if CONFIG2_AUDIO + #include "SoundData.h" #include "lib/external_libraries/openal.h" -#include "vorbis/vorbisfile.h" +#include "ogg.h" class COggData : public CSoundData { @@ -31,7 +35,7 @@ public: COggData(); virtual ~COggData(); - virtual bool InitOggFile(const wchar_t* fileLoc); + virtual bool InitOggFile(const VfsPath& itemPath); virtual bool IsFileFinished(); virtual bool IsOneShot(); @@ -39,8 +43,8 @@ public: virtual void ResetFile(); protected: - OggVorbis_File m_vf; - int m_current_section; + OggStreamPtr ogg; +// int m_current_section; bool m_FileFinished; bool m_OneShot; ALuint m_Buffer[100]; @@ -53,5 +57,5 @@ protected: ALuint* GetBufferPtr(); }; - +#endif // CONFIG2_AUDIO #endif // INCLUDED_OGGDATA_H diff --git a/source/soundmanager/data/SoundData.cpp b/source/soundmanager/data/SoundData.cpp index ff44960745..1d184dc9fc 100644 --- a/source/soundmanager/data/SoundData.cpp +++ b/source/soundmanager/data/SoundData.cpp @@ -19,9 +19,9 @@ #include "SoundData.h" +#if CONFIG2_AUDIO + #include "OggData.h" -#include "lib/file/vfs/vfs_util.h" -#include "ps/Filesystem.h" #include @@ -96,15 +96,9 @@ CSoundData* CSoundData::SoundDataFromOgg(const VfsPath& itemPath) CSoundData* answer = NULL; COggData* oggAnswer = new COggData(); - OsPath realPath; - Status ret = g_VFS->GetRealPath(itemPath, realPath); - if (ret == INFO::OK) - { - if (oggAnswer->InitOggFile(realPath.string().c_str())) - { - answer = oggAnswer; - } - } + if (oggAnswer->InitOggFile(itemPath)) + answer = oggAnswer; + return answer; } @@ -140,3 +134,5 @@ ALuint* CSoundData::GetBufferPtr() return &m_ALBuffer; } +#endif // CONFIG2_AUDIO + diff --git a/source/soundmanager/data/SoundData.h b/source/soundmanager/data/SoundData.h index dbf70598ad..6ab86ac8b8 100644 --- a/source/soundmanager/data/SoundData.h +++ b/source/soundmanager/data/SoundData.h @@ -18,10 +18,12 @@ #ifndef INCLUDED_SOUNDDATA_H #define INCLUDED_SOUNDDATA_H +#include "lib/config2.h" + +#if CONFIG2_AUDIO + #include "lib/external_libraries/openal.h" #include "lib/file/vfs/vfs_path.h" -#include "lib/os_path.h" - #include #include @@ -61,4 +63,7 @@ protected: }; +#endif // CONFIG2_AUDIO + #endif // INCLUDED_SOUNDDATA_H + diff --git a/source/soundmanager/items/CBufferItem.cpp b/source/soundmanager/items/CBufferItem.cpp index 9f3809289f..bc69370b0a 100644 --- a/source/soundmanager/items/CBufferItem.cpp +++ b/source/soundmanager/items/CBufferItem.cpp @@ -19,7 +19,10 @@ #include "CBufferItem.h" +#if CONFIG2_AUDIO + #include "soundmanager/data/SoundData.h" +#include "soundmanager/SoundManager.h" #include @@ -33,6 +36,8 @@ CBufferItem::CBufferItem(CSoundData* sndData) CBufferItem::~CBufferItem() { + AL_CHECK + Stop(); int num_processed; alGetSourcei(m_ALSource, AL_BUFFERS_PROCESSED, &num_processed); @@ -41,7 +46,8 @@ CBufferItem::~CBufferItem() { ALuint* al_buf = new ALuint[num_processed]; alSourceUnqueueBuffers(m_ALSource, num_processed, al_buf); - + + AL_CHECK delete[] al_buf; } } @@ -67,7 +73,9 @@ bool CBufferItem::IdleTask() { ALuint al_buf; alSourceUnqueueBuffers(m_ALSource, 1, &al_buf); + AL_CHECK alSourceQueueBuffers(m_ALSource, 1, &al_buf); + AL_CHECK } } @@ -76,10 +84,12 @@ bool CBufferItem::IdleTask() void CBufferItem::Attach(CSoundData* itemData) { +AL_CHECK if (itemData != NULL) { m_SoundData = itemData->IncrementCount(); alSourceQueueBuffers(m_ALSource, m_SoundData->GetBufferCount(),(const ALuint *) m_SoundData->GetBufferPtr()); + AL_CHECK } } @@ -88,3 +98,5 @@ void CBufferItem::SetLooping(bool loops) m_Looping = loops; } +#endif // CONFIG2_AUDIO + diff --git a/source/soundmanager/items/CBufferItem.h b/source/soundmanager/items/CBufferItem.h index 9fd4a28842..9794130089 100644 --- a/source/soundmanager/items/CBufferItem.h +++ b/source/soundmanager/items/CBufferItem.h @@ -18,6 +18,10 @@ #ifndef INCLUDED_CBUFFERITEM_H #define INCLUDED_CBUFFERITEM_H +#include "lib/config2.h" + +#if CONFIG2_AUDIO + #include "CSoundBase.h" class CBufferItem : public CSoundBase @@ -35,5 +39,7 @@ protected: }; +#endif // CONFIG2_AUDIO #endif // INCLUDED_CBUFFERITEM_H + diff --git a/source/soundmanager/items/CSoundBase.cpp b/source/soundmanager/items/CSoundBase.cpp index 70f598505c..bea6806336 100644 --- a/source/soundmanager/items/CSoundBase.cpp +++ b/source/soundmanager/items/CSoundBase.cpp @@ -19,9 +19,12 @@ #include "CSoundBase.h" +#if CONFIG2_AUDIO + #include "lib/timer.h" #include "soundmanager/SoundManager.h" #include "soundmanager/data/SoundData.h" +#include "ps/CLogger.h" #include @@ -73,12 +76,17 @@ void CSoundBase::ResetFade() void CSoundBase::SetGain(ALfloat gain) { + AL_CHECK + alSourcef(m_ALSource, AL_GAIN, gain); + + AL_CHECK } void CSoundBase::SetRollOff(ALfloat rolls) { alSourcef(m_ALSource, AL_ROLLOFF_FACTOR, rolls); + AL_CHECK } void CSoundBase::EnsurePlay() @@ -89,19 +97,25 @@ void CSoundBase::EnsurePlay() void CSoundBase::SetCone(ALfloat innerCone, ALfloat outerCone, ALfloat coneGain) { - alSourcef(m_ALSource, innerCone, AL_CONE_INNER_ANGLE); - alSourcef(m_ALSource, outerCone, AL_CONE_OUTER_ANGLE); - alSourcef(m_ALSource, coneGain, AL_CONE_OUTER_GAIN); + AL_CHECK + alSourcef(m_ALSource, AL_CONE_INNER_ANGLE, innerCone); + AL_CHECK + alSourcef(m_ALSource, AL_CONE_OUTER_ANGLE, outerCone); + AL_CHECK + alSourcef(m_ALSource, AL_CONE_OUTER_GAIN, coneGain); + AL_CHECK } void CSoundBase::SetPitch(ALfloat pitch) { alSourcef(m_ALSource, AL_PITCH, pitch); + AL_CHECK } void CSoundBase::SetDirection(const CVector3D& direction) { alSourcefv(m_ALSource, AL_DIRECTION, direction.GetFloatArray()); + AL_CHECK } bool CSoundBase::InitOpenAL() @@ -109,11 +123,10 @@ bool CSoundBase::InitOpenAL() alGetError(); /* clear error */ alGenSources(1, &m_ALSource); long anErr = alGetError(); - if (anErr != AL_NO_ERROR) - { - printf("- Error creating sources %ld !!\n", anErr); - } - else + + AL_CHECK + + if (anErr == AL_NO_ERROR) { ALfloat source0Pos[]={ -2.0, 0.0, 0.0}; ALfloat source0Vel[]={ 0.0, 0.0, 0.0}; @@ -123,6 +136,8 @@ bool CSoundBase::InitOpenAL() alSourcefv(m_ALSource,AL_POSITION,source0Pos); alSourcefv(m_ALSource,AL_VELOCITY,source0Vel); alSourcei(m_ALSource,AL_LOOPING,AL_FALSE); + AL_CHECK + return true; } return false; @@ -132,6 +147,7 @@ bool CSoundBase::IsPlaying() { int proc_state; alGetSourceiv(m_ALSource, AL_SOURCE_STATE, &proc_state); + AL_CHECK return (proc_state == AL_PLAYING); } @@ -149,10 +165,12 @@ bool CSoundBase::IdleTask() void CSoundBase::SetLocation (const CVector3D& position) { alSourcefv(m_ALSource,AL_POSITION, position.GetFloatArray()); + AL_CHECK } bool CSoundBase::HandleFade() { + AL_CHECK if (m_StartFadeTime != 0) { double currTime = timer_Time(); @@ -169,6 +187,8 @@ bool CSoundBase::HandleFade() } else alSourcef(m_ALSource, AL_GAIN, curGain); + + AL_CHECK } return true; } @@ -182,6 +202,7 @@ void CSoundBase::SetLooping(bool loops) { m_Looping = loops; alSourcei(m_ALSource, AL_LOOPING, loops ? AL_TRUE : AL_FALSE); + AL_CHECK } void CSoundBase::Play() @@ -189,6 +210,7 @@ void CSoundBase::Play() m_ShouldBePlaying = true; if (m_ALSource != 0) alSourcePlay(m_ALSource); + AL_CHECK } void CSoundBase::PlayAndDelete() @@ -215,6 +237,7 @@ void CSoundBase::PlayLoop() { SetLooping(true); Play(); + AL_CHECK } } @@ -229,6 +252,7 @@ void CSoundBase::FadeToIn(ALfloat newVolume, double fadeDuration) alGetSourcef(m_ALSource, AL_GAIN, &m_StartVolume); m_EndVolume = newVolume; } + AL_CHECK } void CSoundBase::PlayAsMusic() @@ -251,6 +275,8 @@ void CSoundBase::Stop() alGetSourceiv(m_ALSource, AL_SOURCE_STATE, &proc_state); if (proc_state == AL_PLAYING) alSourceStop(m_ALSource); + + AL_CHECK } } @@ -274,3 +300,5 @@ void CSoundBase::SetNameFromPath(char* fileLoc) m_Name->assign(anst.begin(), anst.end()); } +#endif // CONFIG2_AUDIO + diff --git a/source/soundmanager/items/CSoundBase.h b/source/soundmanager/items/CSoundBase.h index 21bbc018a5..43ec3c25be 100644 --- a/source/soundmanager/items/CSoundBase.h +++ b/source/soundmanager/items/CSoundBase.h @@ -18,12 +18,17 @@ #ifndef INCLUDED_CSOUNDBASE_H #define INCLUDED_CSOUNDBASE_H +#include "lib/config2.h" + +#if CONFIG2_AUDIO + #include "lib/external_libraries/openal.h" #include "soundmanager/items/ISoundItem.h" #include "soundmanager/data/SoundData.h" #include + class CSoundBase : public ISoundItem { protected: @@ -86,4 +91,7 @@ protected: }; +#endif // CONFIG2_AUDIO + #endif // INCLUDED_CSOUNDBASE_H + diff --git a/source/soundmanager/items/CSoundItem.cpp b/source/soundmanager/items/CSoundItem.cpp index 27b27208cf..afbdcc730b 100644 --- a/source/soundmanager/items/CSoundItem.cpp +++ b/source/soundmanager/items/CSoundItem.cpp @@ -19,11 +19,13 @@ #include "CSoundItem.h" +#if CONFIG2_AUDIO + #include "soundmanager/data/SoundData.h" +#include "soundmanager/SoundManager.h" #include - CSoundItem::CSoundItem() { ResetVars(); @@ -38,10 +40,12 @@ CSoundItem::CSoundItem(CSoundData* sndData) CSoundItem::~CSoundItem() { + AL_CHECK ALuint al_buf; Stop(); alSourceUnqueueBuffers(m_ALSource, 1, &al_buf); + AL_CHECK } bool CSoundItem::IdleTask() @@ -52,6 +56,7 @@ bool CSoundItem::IdleTask() { int proc_state; alGetSourceiv(m_ALSource, AL_SOURCE_STATE, &proc_state); + AL_CHECK return (proc_state != AL_STOPPED); } return true; @@ -63,5 +68,10 @@ void CSoundItem::Attach(CSoundData* itemData) { m_SoundData = itemData->IncrementCount(); alSourcei(m_ALSource, AL_BUFFER, m_SoundData->GetBuffer()); + + AL_CHECK } } + +#endif // CONFIG2_AUDIO + diff --git a/source/soundmanager/items/CSoundItem.h b/source/soundmanager/items/CSoundItem.h index c302aa4555..2127edaf73 100644 --- a/source/soundmanager/items/CSoundItem.h +++ b/source/soundmanager/items/CSoundItem.h @@ -18,10 +18,13 @@ #ifndef INCLUDED_CSOUNDITEM_H #define INCLUDED_CSOUNDITEM_H +#include "lib/config2.h" + +#if CONFIG2_AUDIO + #include "CSoundBase.h" #include "soundmanager/data/SoundData.h" - class CSoundItem : public CSoundBase { public: @@ -34,4 +37,7 @@ public: }; +#endif // CONFIG2_AUDIO + #endif // INCLUDED_CSOUNDITEM_H + diff --git a/source/soundmanager/items/CStreamItem.cpp b/source/soundmanager/items/CStreamItem.cpp index a0638b3bc1..100c541731 100644 --- a/source/soundmanager/items/CStreamItem.cpp +++ b/source/soundmanager/items/CStreamItem.cpp @@ -19,7 +19,10 @@ #include "CStreamItem.h" +#if CONFIG2_AUDIO + #include "soundmanager/data/OggData.h" +#include "soundmanager/SoundManager.h" #include @@ -41,16 +44,20 @@ CStreamItem::~CStreamItem() { ALuint* al_buf = new ALuint[num_processed]; alSourceUnqueueBuffers(m_ALSource, num_processed, al_buf); + AL_CHECK delete[] al_buf; } } bool CStreamItem::IdleTask() { + AL_CHECK HandleFade(); + AL_CHECK int proc_state; alGetSourceiv(m_ALSource, AL_SOURCE_STATE, &proc_state); + AL_CHECK if (proc_state == AL_STOPPED) { @@ -65,13 +72,16 @@ bool CStreamItem::IdleTask() { int num_processed; alGetSourcei(m_ALSource, AL_BUFFERS_PROCESSED, &num_processed); + AL_CHECK if (num_processed > 0) { ALuint* al_buf = new ALuint[num_processed]; alSourceUnqueueBuffers(m_ALSource, num_processed, al_buf); + AL_CHECK int didWrite = tmp->FetchDataIntoBuffer(num_processed, al_buf); alSourceQueueBuffers(m_ALSource, didWrite, al_buf); + AL_CHECK delete[] al_buf; } } @@ -89,6 +99,7 @@ void CStreamItem::Attach(CSoundData* itemData) { m_SoundData = itemData->IncrementCount(); alSourceQueueBuffers(m_ALSource, m_SoundData->GetBufferCount(), (const ALuint *)m_SoundData->GetBufferPtr()); + AL_CHECK } } @@ -97,3 +108,5 @@ void CStreamItem::SetLooping(bool loops) m_Looping = loops; } +#endif // CONFIG2_AUDIO + diff --git a/source/soundmanager/items/CStreamItem.h b/source/soundmanager/items/CStreamItem.h index 3f79066dc3..e5267ebe1e 100644 --- a/source/soundmanager/items/CStreamItem.h +++ b/source/soundmanager/items/CStreamItem.h @@ -18,6 +18,10 @@ #ifndef INCLUDED_CSTREAMITEM_H #define INCLUDED_CSTREAMITEM_H +#include "lib/config2.h" + +#if CONFIG2_AUDIO + #include "soundmanager/data/SoundData.h" #include "CSoundBase.h" @@ -35,4 +39,7 @@ protected: }; +#endif // CONFIG2_AUDIO + #endif // INCLUDED_CSTREAMITEM_H + diff --git a/source/soundmanager/items/ISoundItem.h b/source/soundmanager/items/ISoundItem.h index 2ac3f8f9fe..f19d00c33b 100644 --- a/source/soundmanager/items/ISoundItem.h +++ b/source/soundmanager/items/ISoundItem.h @@ -18,6 +18,10 @@ #ifndef INCLUDED_ISOUNDITEM_H #define INCLUDED_ISOUNDITEM_H +#include "lib/config2.h" + +#if CONFIG2_AUDIO + #include "lib/external_libraries/openal.h" #include "maths/Vector3D.h" @@ -56,5 +60,7 @@ public: virtual void SetRollOff(ALfloat gain) = 0; }; +#endif // CONFIG2_AUDIO + +#endif // INCLUDED_ISOUNDITEM_H -#endif // INCLUDED_ISOUNDITEM_H \ No newline at end of file diff --git a/source/soundmanager/js/AmbientSound.cpp b/source/soundmanager/js/AmbientSound.cpp index c77c8d067c..8c98a994e6 100644 --- a/source/soundmanager/js/AmbientSound.cpp +++ b/source/soundmanager/js/AmbientSound.cpp @@ -19,8 +19,10 @@ #include "AmbientSound.h" +#include "lib/config2.h" #include "lib/utf8.h" #include "maths/Vector3D.h" +#include "ps/CLogger.h" #include "ps/Filesystem.h" #include "soundmanager/SoundManager.h" @@ -32,31 +34,40 @@ JAmbientSound::JAmbientSound(const VfsPath& pathname) : m_FileName(pathname) // start playing the sound, all ambient sounds loop bool JAmbientSound::Play(JSContext* UNUSED(cx), uintN UNUSED(argc), jsval* UNUSED(argv)) { - ISoundItem* aSnd = g_SoundManager->LoadItem(m_FileName); - - if (aSnd) - aSnd->PlayAsAmbient(); - else - debug_printf(L"sound item could not be loaded to play: %ls\n", m_FileName.string().c_str()); +#if CONFIG2_AUDIO + if ( g_SoundManager ) { + ISoundItem* aSnd = g_SoundManager->LoadItem(m_FileName); + if (aSnd) + aSnd->PlayAsAmbient(); + else + LOGERROR(L"sound item could not be loaded to play: %ls\n", m_FileName.string().c_str()); + } +#endif // CONFIG2_AUDIO return true; } // start playing the sound, all ambient sounds loop bool JAmbientSound::Loop(JSContext* UNUSED(cx), uintN UNUSED(argc), jsval* UNUSED(argv)) { - ISoundItem* aSnd = g_SoundManager->LoadItem(m_FileName); - - if (aSnd) - aSnd->PlayAsAmbient(); - else - debug_printf(L"sound item could not be loaded to loop: %ls\n", m_FileName.string().c_str()); +#if CONFIG2_AUDIO + if ( g_SoundManager ) { + ISoundItem* aSnd = g_SoundManager->LoadItem(m_FileName); + if (aSnd) + aSnd->PlayAsAmbient(); + else + LOGERROR(L"sound item could not be loaded to loop: %ls\n", m_FileName.string().c_str()); + } +#endif // CONFIG2_AUDIO return true; } bool JAmbientSound::Free(JSContext* UNUSED(cx), uintN UNUSED(argc), jsval* UNUSED(argv)) { - g_SoundManager->SetAmbientItem(0L); +#if CONFIG2_AUDIO + if ( g_SoundManager ) + g_SoundManager->SetAmbientItem(0L); +#endif // CONFIG2_AUDIO return true; } @@ -90,11 +101,12 @@ JSBool JAmbientSound::Construct(JSContext* cx, uintN UNUSED(argc), jsval* vp) CStrW filename; if (! ToPrimitive(cx, JS_ARGV(cx, vp)[0], filename)) return JS_FALSE; - + JAmbientSound* newObject = new JAmbientSound(filename); newObject->m_EngineOwned = false; JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(newObject->GetScript())); - + return JS_TRUE; } + diff --git a/source/soundmanager/js/AmbientSound.h b/source/soundmanager/js/AmbientSound.h index cbc134ca41..e20a2b12bc 100644 --- a/source/soundmanager/js/AmbientSound.h +++ b/source/soundmanager/js/AmbientSound.h @@ -47,3 +47,4 @@ protected: }; #endif // #ifndef INCLUDED_JAMBIENTSOUND + diff --git a/source/soundmanager/js/MusicSound.cpp b/source/soundmanager/js/MusicSound.cpp index fa2b4dd41e..fe4ce0720c 100644 --- a/source/soundmanager/js/MusicSound.cpp +++ b/source/soundmanager/js/MusicSound.cpp @@ -19,6 +19,7 @@ #include "MusicSound.h" +#include "lib/config2.h" #include "lib/utf8.h" #include "maths/Vector3D.h" #include "ps/Filesystem.h" @@ -31,20 +32,26 @@ JMusicSound::JMusicSound(const VfsPath& pathname) : m_FileName(pathname) bool JMusicSound::Play(JSContext* UNUSED(cx), uintN UNUSED(argc), jsval* UNUSED(argv)) { - ISoundItem* aSnd = g_SoundManager->LoadItem(m_FileName); - if (aSnd != NULL) - aSnd->PlayAsMusic(); - +#if CONFIG2_AUDIO + if ( g_SoundManager ) { + ISoundItem* aSnd = g_SoundManager->LoadItem(m_FileName); + if (aSnd != NULL) + aSnd->PlayAsMusic(); + } +#endif // CONFIG2_AUDIO return true; } // request the sound be played until free() is called. returns immediately. bool JMusicSound::Loop(JSContext* UNUSED(cx), uintN UNUSED(argc), jsval* UNUSED(argv)) { - ISoundItem* aSnd = g_SoundManager->LoadItem(m_FileName); - if (aSnd != NULL) - aSnd->PlayAsMusic(); - +#if CONFIG2_AUDIO + if ( g_SoundManager ) { + ISoundItem* aSnd = g_SoundManager->LoadItem(m_FileName); + if (aSnd != NULL) + aSnd->PlayAsMusic(); + } +#endif // CONFIG2_AUDIO return true; } @@ -75,6 +82,7 @@ JSBool JMusicSound::Construct(JSContext* cx, uintN UNUSED(argc), jsval* vp) JMusicSound* newObject = new JMusicSound(filename); newObject->m_EngineOwned = false; JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(newObject->GetScript())); - + return JS_TRUE; } + diff --git a/source/soundmanager/js/Sound.cpp b/source/soundmanager/js/Sound.cpp index ccf02a3739..e78e17bde6 100644 --- a/source/soundmanager/js/Sound.cpp +++ b/source/soundmanager/js/Sound.cpp @@ -19,6 +19,7 @@ #include "Sound.h" +#include "lib/config2.h" #include "lib/utf8.h" #include "maths/Vector3D.h" #include "ps/Filesystem.h" @@ -27,26 +28,36 @@ JSound::JSound(const VfsPath& pathname) { - m_SndItem = g_SoundManager->LoadItem(pathname); +#if CONFIG2_AUDIO + if ( g_SoundManager ) + m_SndItem = g_SoundManager->LoadItem(pathname); +#else // !CONFIG2_AUDIO + UNUSED2(pathname); +#endif // !CONFIG2_AUDIO } JSound::~JSound() { +#if CONFIG2_AUDIO if (m_SndItem) { m_SndItem->FadeAndDelete(0.2); m_SndItem = 0; } +#endif // CONFIG2_AUDIO } bool JSound::ClearSoundItem() { +#if CONFIG2_AUDIO m_SndItem = 0L; +#endif return true; } bool JSound::SetGain(JSContext* cx, uintN UNUSED(argc), jsval* argv) { +#if CONFIG2_AUDIO if (! m_SndItem) return false; @@ -54,12 +65,17 @@ bool JSound::SetGain(JSContext* cx, uintN UNUSED(argc), jsval* argv) if (! ToPrimitive(cx, argv[0], gain)) return false; - m_SndItem->SetGain(gain); + m_SndItem->SetGain(gain); +#else // !CONFIG2_AUDIO + UNUSED2(cx); + UNUSED2(argv); +#endif // !CONFIG2_AUDIO return true; } bool JSound::SetPitch(JSContext* cx, uintN UNUSED(argc), jsval* argv) { +#if CONFIG2_AUDIO if (! m_SndItem) return false; @@ -68,11 +84,16 @@ bool JSound::SetPitch(JSContext* cx, uintN UNUSED(argc), jsval* argv) return false; m_SndItem->SetPitch(pitch); +#else // !CONFIG2_AUDIO + UNUSED2(cx); + UNUSED2(argv); +#endif // CONFIG2_AUDIO return true; } bool JSound::SetPosition(JSContext* cx, uintN argc, jsval* argv) { +#if CONFIG2_AUDIO if (! m_SndItem) return false; @@ -84,13 +105,18 @@ bool JSound::SetPosition(JSContext* cx, uintN argc, jsval* argv) return false; m_SndItem->SetLocation(pos); - +#else // !CONFIG2_AUDIO + UNUSED2(cx); + UNUSED2(argc); + UNUSED2(argv); +#endif // !CONFIG2_AUDIO return true; } bool JSound::Fade(JSContext* cx, uintN UNUSED(argc), jsval* argv) { +#if CONFIG2_AUDIO if (! m_SndItem) return false; @@ -104,38 +130,44 @@ bool JSound::Fade(JSContext* cx, uintN UNUSED(argc), jsval* argv) m_SndItem->SetGain(initial_gain); m_SndItem->FadeToIn(final_gain, length); - +#else // !CONFIG2_AUDIO + UNUSED2(cx); + UNUSED2(argv); +#endif // !CONFIG2_AUDIO return true; } bool JSound::Play(JSContext* UNUSED(cx), uintN UNUSED(argc), jsval* UNUSED(argv)) { +#if CONFIG2_AUDIO if (! m_SndItem) return false; m_SndItem->Play(); - +#endif // CONFIG2_AUDIO return true; } bool JSound::Loop(JSContext* UNUSED(cx), uintN UNUSED(argc), jsval* UNUSED(argv)) { +#if CONFIG2_AUDIO if (! m_SndItem) return false; m_SndItem->PlayLoop(); - +#endif // CONFIG2_AUDIO return true; } bool JSound::Free(JSContext* UNUSED(cx), uintN UNUSED(argc), jsval* UNUSED(argv)) { +#if CONFIG2_AUDIO if (m_SndItem) { m_SndItem->FadeAndDelete(0.2); m_SndItem = 0; } - +#endif // CONFIG2_AUDIO return true; } @@ -155,7 +187,11 @@ void JSound::ScriptingInit() CStr JSound::ToString(JSContext* UNUSED(cx), uintN UNUSED(argc), jsval* UNUSED(argv)) { +#if CONFIG2_AUDIO return "[object Sound: " + (m_SndItem ? m_SndItem->GetName() : "(null)") + "]"; +#else // !CONFIG2_AUDIO + return "[object Sound: audio disabled]"; +#endif // !CONFIG2_AUDIO } JSBool JSound::Construct(JSContext* cx, uintN UNUSED(argc), jsval* vp) @@ -169,6 +205,7 @@ JSBool JSound::Construct(JSContext* cx, uintN UNUSED(argc), jsval* vp) JSound* newObject = new JSound(filename); newObject->m_EngineOwned = false; JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(newObject->GetScript())); - + return JS_TRUE; } + diff --git a/source/soundmanager/js/Sound.h b/source/soundmanager/js/Sound.h index fe386143ed..984a200bed 100644 --- a/source/soundmanager/js/Sound.h +++ b/source/soundmanager/js/Sound.h @@ -32,6 +32,7 @@ #ifndef INCLUDED_JSOUND #define INCLUDED_JSOUND +#include "lib/config2.h" #include "scripting/ScriptableObject.h" #include "soundmanager/items/ISoundItem.h" @@ -61,7 +62,10 @@ public: static void ScriptingInit(); protected: +#if CONFIG2_AUDIO ISoundItem* m_SndItem; +#endif }; #endif // #ifndef INCLUDED_JSOUND + diff --git a/source/soundmanager/js/SoundGroup.cpp b/source/soundmanager/js/SoundGroup.cpp index 97ac6fe5cb..40eba51cc9 100644 --- a/source/soundmanager/js/SoundGroup.cpp +++ b/source/soundmanager/js/SoundGroup.cpp @@ -41,6 +41,7 @@ #include + extern CGame *g_Game; #define PI 3.14126f @@ -94,10 +95,12 @@ CSoundGroup::~CSoundGroup() ReleaseGroup(); } +#if CONFIG2_AUDIO static float RandFloat(float min, float max) { return float(rand(min*100.0f, max*100.0f) / 100.0f); } +#endif // CONFIG2_AUDIO float CSoundGroup::RadiansOffCenter(const CVector3D& position, bool& onScreen, float& itemRollOff) { @@ -155,43 +158,50 @@ float CSoundGroup::RadiansOffCenter(const CVector3D& position, bool& onScreen, f void CSoundGroup::UploadPropertiesAndPlay(int theIndex, const CVector3D& position) { - bool isOnscreen; - ALfloat initialRolllOff = 0.02f; - ALfloat itemRollOff = initialRolllOff; +#if CONFIG2_AUDIO + if ( g_SoundManager ) { + bool isOnscreen; + ALfloat initialRolllOff = 0.02f; + ALfloat itemRollOff = initialRolllOff; - float offSet = RadiansOffCenter(position, isOnscreen, itemRollOff); + float offSet = RadiansOffCenter(position, isOnscreen, itemRollOff); - if (isOnscreen || TestFlag(eDistanceless) || TestFlag(eOmnipresent)) - { - if (snd_group.size() == 0) - Reload(); - - ISoundItem* hSound = snd_group[theIndex]; - CVector3D origin = g_Game->GetView()->GetCamera()->GetOrientation().GetTranslation(); - float sndDist = origin.Y; - - if (!TestFlag(eOmnipresent)) + if (isOnscreen || TestFlag(eDistanceless) || TestFlag(eOmnipresent)) { - hSound->SetLocation(CVector3D((sndDist * sin(offSet)), 0, sndDist * cos(offSet))); - if (TestFlag(eDistanceless)) - hSound->SetRollOff(initialRolllOff); + if (snd_group.size() == 0) + Reload(); + + ISoundItem* hSound = snd_group[theIndex]; + CVector3D origin = g_Game->GetView()->GetCamera()->GetOrientation().GetTranslation(); + float sndDist = origin.Y; + + if (!TestFlag(eOmnipresent)) + { + hSound->SetLocation(CVector3D((sndDist * sin(offSet)), 0, sndDist * cos(offSet))); + if (TestFlag(eDistanceless)) + hSound->SetRollOff(initialRolllOff); + else + hSound->SetRollOff(itemRollOff); + } + + if (TestFlag(eRandPitch)) + hSound->SetPitch(RandFloat(m_PitchLower, m_PitchUpper)); else - hSound->SetRollOff(itemRollOff); + hSound->SetPitch(m_Pitch); + + ALfloat theGain = m_Gain; + if (TestFlag(eRandGain)) + theGain = RandFloat(m_GainLower, m_GainUpper); + + hSound->SetCone(m_ConeInnerAngle, m_ConeOuterAngle, m_ConeOuterGain); + + g_SoundManager->PlayGroupItem(hSound, theGain); } - - if (TestFlag(eRandPitch)) - hSound->SetPitch(RandFloat(m_PitchLower, m_PitchUpper)); - else - hSound->SetPitch(m_Pitch); - - ALfloat theGain = m_Gain; - if (TestFlag(eRandGain)) - theGain = RandFloat(m_GainLower, m_GainUpper); - - hSound->SetCone(m_ConeInnerAngle, m_ConeOuterAngle, m_ConeOuterGain); - - g_SoundManager->PlayGroupItem(hSound, theGain); } +#else // !CONFIG2_AUDIO + UNUSED2(theIndex); + UNUSED2(position); +#endif // !CONFIG2_AUDIO } @@ -216,30 +226,36 @@ void CSoundGroup::Reload() { m_index = 0; // reset our index +#if CONFIG2_AUDIO snd_group.clear(); - for (size_t i = 0; i < filenames.size(); i++) - { - VfsPath thePath = m_filepath/filenames[i]; - ISoundItem* temp = g_SoundManager->LoadItem(thePath); + if ( g_SoundManager ) { + for (size_t i = 0; i < filenames.size(); i++) + { + VfsPath thePath = m_filepath/filenames[i]; + ISoundItem* temp = g_SoundManager->LoadItem(thePath); - if (temp == NULL) - HandleError(L"error loading sound", thePath, ERR::FAIL); - else - snd_group.push_back(temp); + if (temp == NULL) + HandleError(L"error loading sound", thePath, ERR::FAIL); + else + snd_group.push_back(temp); + } + + if (TestFlag(eRandOrder)) + random_shuffle(snd_group.begin(), snd_group.end()); } - - if (TestFlag(eRandOrder)) - random_shuffle(snd_group.begin(), snd_group.end()); +#endif // CONFIG2_AUDIO } void CSoundGroup::ReleaseGroup() { +#if CONFIG2_AUDIO for (size_t i = 0; i < snd_group.size(); i++) { snd_group[i]->FadeAndDelete(0.2); } snd_group.clear(); +#endif // CONFIG2_AUDIO } void CSoundGroup::Update(float UNUSED(TimeSinceLastFrame)) @@ -386,3 +402,4 @@ bool CSoundGroup::LoadSoundGroup(const VfsPath& pathnameXML) return true; } + diff --git a/source/soundmanager/js/SoundGroup.h b/source/soundmanager/js/SoundGroup.h index a347411342..9c3fbae9ff 100644 --- a/source/soundmanager/js/SoundGroup.h +++ b/source/soundmanager/js/SoundGroup.h @@ -52,6 +52,7 @@ Example SoundGroup.xml #ifndef INCLUDED_SOUNDGROUP_H #define INCLUDED_SOUNDGROUP_H +#include "lib/config2.h" #include "lib/file/vfs/vfs_path.h" #include @@ -109,7 +110,9 @@ private: size_t m_index; // index of the next sound to play +#if CONFIG2_AUDIO std::vector snd_group; // we store the handles so we can load now and play later +#endif std::vector filenames; // we need the filenames so we can reload when necessary. VfsPath m_filepath; // the file path for the list of sound file resources @@ -134,3 +137,4 @@ private: }; #endif //#ifndef INCLUDED_SOUNDGROUP_H + diff --git a/source/soundmanager/js/SoundPlayer.cpp b/source/soundmanager/js/SoundPlayer.cpp index a13616f3b4..8f34b7a461 100644 --- a/source/soundmanager/js/SoundPlayer.cpp +++ b/source/soundmanager/js/SoundPlayer.cpp @@ -18,6 +18,7 @@ #include "SoundPlayer.h" +#include "lib/config2.h" #include "lib/utf8.h" #include "maths/Vector3D.h" #include "ps/Filesystem.h" @@ -34,15 +35,20 @@ JSoundPlayer::~JSoundPlayer() bool JSoundPlayer::StartMusic(JSContext* UNUSED(cx), uintN UNUSED(argc), jsval* UNUSED(argv)) { - g_SoundManager->SetMusicEnabled(true); - +#if CONFIG2_AUDIO + if ( g_SoundManager ) + g_SoundManager->SetMusicEnabled(true); +#endif return true; } // request the sound be played until free() is called. returns immediately. bool JSoundPlayer::StopMusic(JSContext* UNUSED(cx), uintN UNUSED(argc), jsval* UNUSED(argv)) { - g_SoundManager->SetMusicEnabled(false); +#if CONFIG2_AUDIO + if ( g_SoundManager ) + g_SoundManager->SetMusicEnabled(false); +#endif return true; } @@ -61,7 +67,7 @@ JSBool JSoundPlayer::Construct(JSContext* UNUSED(cx), uintN UNUSED(argc), jsval* JSoundPlayer* newObject = new JSoundPlayer(); newObject->m_EngineOwned = false; JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(newObject->GetScript())); - + return JS_TRUE; } diff --git a/source/soundmanager/js/SoundPlayer.h b/source/soundmanager/js/SoundPlayer.h index 2f118b35be..399f1ee991 100644 --- a/source/soundmanager/js/SoundPlayer.h +++ b/source/soundmanager/js/SoundPlayer.h @@ -56,3 +56,4 @@ protected: }; #endif // #ifndef INCLUDED_JSOUNDPLAYER +