1
0
Fork 0
mirror of https://github.com/OpenMW/openmw.git synced 2025-01-22 07:53:52 +00:00

Replace the sound file extension when opening fails

This should make it more efficient to lookup a sound instead of checking each
time it's played. A better method would perhaps be to check if the resource
exists when the ESM is loaded and replace it then as needed.
This commit is contained in:
Chris Robinson 2012-03-21 18:35:20 -07:00
parent 8056a7f20b
commit aecc77a73c
3 changed files with 23 additions and 16 deletions

View file

@ -238,7 +238,17 @@ size_t FFmpeg_Decoder::MyStream::readAVAudioData(void *data, size_t length)
void FFmpeg_Decoder::open(const std::string &fname)
{
close();
mDataStream = mResourceMgr.openResource(fname);
try
{
mDataStream = mResourceMgr.openResource(fname);
}
catch(Ogre::Exception &e)
{
std::string::size_type pos = fname.rfind('.');
if(pos == std::string::npos)
throw;
mDataStream = mResourceMgr.openResource(fname.substr(0, pos)+".mp3");
}
if((mFormatCtx=avformat_alloc_context()) == NULL)
fail("Failed to allocate context");

View file

@ -81,7 +81,17 @@ off_t MpgSnd_Decoder::ogrempg_lseek(void *user_data, off_t offset, int whence)
void MpgSnd_Decoder::open(const std::string &fname)
{
close();
mDataStream = mResourceMgr.openResource(fname);
try
{
mDataStream = mResourceMgr.openResource(fname);
}
catch(Ogre::Exception &e)
{
std::string::size_type pos = fname.rfind('.');
if(pos == std::string::npos)
throw;
mDataStream = mResourceMgr.openResource(fname.substr(0, pos)+".mp3");
}
SF_VIRTUAL_IO streamIO = {
ogresf_get_filelen, ogresf_seek,

View file

@ -107,14 +107,7 @@ namespace MWSound
max = std::max(min, max);
}
std::string fname = std::string("Sound\\")+snd->sound;
if(!mResourceMgr->resourceExistsInAnyGroup(fname))
{
std::string::size_type pos = fname.rfind('.');
if(pos != std::string::npos)
fname = fname.substr(0, pos)+".mp3";
}
return fname;
return std::string("Sound/")+snd->sound;
}
// Add a sound to the list and play it
@ -207,12 +200,6 @@ namespace MWSound
{
// The range values are not tested
std::string filePath = std::string("Sound\\")+filename;
if(!mResourceMgr->resourceExistsInAnyGroup(filePath))
{
std::string::size_type pos = filePath.rfind('.');
if(pos != std::string::npos)
filePath = filePath.substr(0, pos)+".mp3";
}
play3d(filePath, ptr, "_say_sound", 1, 1, 100, 20000, false);
}