From 9ef48d4a4816f94f1a41c4d44792b24b9fcbfb3e Mon Sep 17 00:00:00 2001 From: Glenn Maynard Date: Mon, 18 Jul 2005 19:09:31 +0000 Subject: [PATCH] reuse preloaded sounds --- stepmania/src/RageSound.cpp | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/stepmania/src/RageSound.cpp b/stepmania/src/RageSound.cpp index dc3cef0a64..0272c0a45b 100644 --- a/stepmania/src/RageSound.cpp +++ b/stepmania/src/RageSound.cpp @@ -173,14 +173,26 @@ bool RageSound::Load( CString sSoundFilePath, bool bPrecache ) { LOG->Trace( "RageSound::LoadSound( '%s', %d )", sSoundFilePath.c_str(), bPrecache ); - CString error; - SoundReader *pSound = SoundReader_FileReader::OpenFile( sSoundFilePath, error ); + /* If this sound is already preloaded and held by SOUNDMAN, just make a + * copy of that. Since RageSoundReader_Preload is reference counted, this + * is cheap. */ + SoundReader *pSound = SOUNDMAN->GetLoadedSound( sSoundFilePath ); if( pSound == NULL ) { - LOG->Warn( "RageSound::Load: error opening sound \"%s\": %s", - sSoundFilePath.c_str(), error.c_str() ); + CString error; + pSound = SoundReader_FileReader::OpenFile( sSoundFilePath, error ); + if( pSound == NULL ) + { + LOG->Warn( "RageSound::Load: error opening sound \"%s\": %s", + sSoundFilePath.c_str(), error.c_str() ); - pSound = new RageSoundReader_Silence; + pSound = new RageSoundReader_Silence; + } + } + else + { + /* The sound we were given from SOUNDMAN is already preloaded. */ + bPrecache = false; } LoadSoundReader( pSound ); @@ -188,7 +200,13 @@ bool RageSound::Load( CString sSoundFilePath, bool bPrecache ) /* Try to precache. Do this after calling LoadSoundReader() to put the * sound in this->m_pSource, so we preload after resampling. */ if( bPrecache ) - RageSoundReader_Preload::PreloadSound( m_pSource ); + { + if( RageSoundReader_Preload::PreloadSound(m_pSource) ) + { + /* We've preloaded the sound. Pass it to SOUNDMAN, for reuse. */ + SOUNDMAN->AddLoadedSound( sSoundFilePath, (RageSoundReader_Preload *) m_pSource ); + } + } m_sFilePath = sSoundFilePath;