From b9efc67d02e8ff436650ea14ef41a3c31f0d8c2d Mon Sep 17 00:00:00 2001 From: Glenn Maynard Date: Wed, 10 Sep 2003 21:34:01 +0000 Subject: [PATCH] add SoundReader::OpenFile --- stepmania/src/RageSoundReader.cpp | 41 +++++++++++++++++++++++++++++++ stepmania/src/RageSoundReader.h | 1 + 2 files changed, 42 insertions(+) create mode 100644 stepmania/src/RageSoundReader.cpp diff --git a/stepmania/src/RageSoundReader.cpp b/stepmania/src/RageSoundReader.cpp new file mode 100644 index 0000000000..5b41d9b549 --- /dev/null +++ b/stepmania/src/RageSoundReader.cpp @@ -0,0 +1,41 @@ +#include "global.h" +#include "RageSoundReader.h" +#include "RageUtil.h" + +#ifndef NO_WAV_SUPPORT +#include "RageSoundReader_WAV.h" +#endif + +#if defined(OGG_ONLY) +#include "RageSoundReader_Vorbisfile.h" +#define RageSoundReader_LowLevel RageSoundReader_Vorbisfile +#else +#include "RageSoundReader_SDL_Sound.h" +#define RageSoundReader_LowLevel SoundReader_SDL_Sound +#endif + + +SoundReader *SoundReader::OpenFile( CString filename, CString error ) +{ + SoundReader_FileReader *NewSample = NULL; + + /* First try based on extension. If that fails, try all other decoders. + * Optimally, we should have separate error returns indicating "this isn't + * an XXX file" vs. "this is an XXX file, but we don't support something in + * it", for better error string returns. + */ +#ifndef NO_WAV_SUPPORT + if( !GetExtension(filename).CompareNoCase("wav") ) + NewSample = new RageSoundReader_WAV; +#endif + + if( NewSample == NULL ) + NewSample = new RageSoundReader_LowLevel; + if( !NewSample->Open(filename) ) + { + error = NewSample->GetError(); + return NULL; + } + + return NewSample; +} diff --git a/stepmania/src/RageSoundReader.h b/stepmania/src/RageSoundReader.h index ad71ae1066..8a4156aaf2 100644 --- a/stepmania/src/RageSoundReader.h +++ b/stepmania/src/RageSoundReader.h @@ -21,6 +21,7 @@ public: bool Error() const { return !error.empty(); } string GetError() const { return error; } + static SoundReader *OpenFile( CString filename, CString error ); }; #endif