From a7c3a29ffd6ce979741e3cd272ef1773011f86a7 Mon Sep 17 00:00:00 2001 From: Jason Hooks Date: Mon, 1 Nov 2010 17:06:13 -0400 Subject: [PATCH] Music Player with directory mp3 lookup --- apps/openmw/engine.cpp | 47 ++++++++++++++++++++++++++++++++---------- apps/openmw/engine.hpp | 4 ++++ 2 files changed, 40 insertions(+), 11 deletions(-) diff --git a/apps/openmw/engine.cpp b/apps/openmw/engine.cpp index da9e9bede..913d1f679 100644 --- a/apps/openmw/engine.cpp +++ b/apps/openmw/engine.cpp @@ -56,19 +56,43 @@ void OMW::Engine::executeLocalScripts() mIgnoreLocalPtr = MWWorld::Ptr(); } +void OMW::Engine::MP3Lookup() +{ + boost::filesystem::directory_iterator dir_iter(mDataDir / "Music/Explore/"), dir_end; + //std::list files; + + nFiles = 0; + std::string mp3extension = ".mp3"; + for(;dir_iter != dir_end; dir_iter++) + { + if(boost::filesystem::extension(*dir_iter) == mp3extension) + { + files.push_front((*dir_iter)); + nFiles++; + } + }//*/ +} void OMW::Engine::startRandomTitle() { - char number[100]; - /* initialize random seed: */ - srand ( time(NULL) ); - /* generate secret number: */ - int r = rand() % 7 + 1; + std::list::iterator fileIter; + if(nFiles > 0) + { + fileIter = files.begin(); + srand ( time(NULL) ); - sprintf(number, "Music/Explore/mx_explore_%d.mp3", r); - //std::string music = (mDataDir / "Music/Explore/mx_explore_5.mp3").file_string(); - std::string music = (mDataDir / number).file_string(); + + int r = rand() % nFiles + 1; //old random code + + //int lowest=1, highest=nFiles; + //int range=(highest-lowest)+1; + //int r = lowest+int(range*rand()/(highest + 1.0)); + for(int i = 1; i < r; i++) + { + fileIter++; + } + std::string music = fileIter->file_string(); try { std::cout << "Playing " << music << "\n"; @@ -78,13 +102,12 @@ void OMW::Engine::startRandomTitle() { std::cout << " Music Error: " << e.what() << "\n"; } + } } bool OMW::Engine::frameStarted(const Ogre::FrameEvent& evt) { - // - MWWorld::Environment test = mEnvironment; - if(! (test.mSoundManager->isMusicPlaying())) + if(! (mEnvironment.mSoundManager->isMusicPlaying())) { // Play some good 'ol tunes startRandomTitle(); @@ -250,6 +273,8 @@ void OMW::Engine::go() assert (!mCellName.empty()); assert (!mMaster.empty()); + MP3Lookup(); + std::cout << "Data directory: " << mDataDir << "\n"; diff --git a/apps/openmw/engine.hpp b/apps/openmw/engine.hpp index d7420889f..f9b1caab4 100644 --- a/apps/openmw/engine.hpp +++ b/apps/openmw/engine.hpp @@ -52,6 +52,8 @@ namespace OMW class Engine : private Ogre::FrameListener { + std::list files; + int nFiles; boost::filesystem::path mDataDir; OEngine::Render::OgreRenderer mOgre; std::string mCellName; @@ -78,6 +80,8 @@ namespace OMW /// add resources directory /// \note This function works recursively. + void OMW::Engine::MP3Lookup(); + void startRandomTitle(); void addResourcesDirectory (const boost::filesystem::path& path); /// Load all BSA files in data directory.