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