|
From: Lasse Kärkkäi. <tr...@us...> - 2009-07-13 00:34:17
|
Module: performous
Branch: master
Commit: 808a0f8cd3377223647b9382fb1fe7f26f535741
Author: Lasse Karkkainen <tro...@tr...>
Date: Mon Jul 13 03:32:02 2009 +0300
Only load existing music files.
---
game/screen_sing.cc | 1 -
game/songparser-ini.cc | 14 ++++++++++----
2 files changed, 10 insertions(+), 5 deletions(-)
diff --git a/game/screen_sing.cc b/game/screen_sing.cc
index 919828a..04ea5d2 100644
--- a/game/screen_sing.cc
+++ b/game/screen_sing.cc
@@ -15,7 +15,6 @@ namespace {
void ScreenSing::enter() {
Song& song = m_songs.current();
- std::cout << "DEBUG::::: " << song.music.size() << std::endl;
m_audio.playMusic(song.music);
theme.reset(new ThemeSing());
if (!song.background.empty()) {
diff --git a/game/songparser-ini.cc b/game/songparser-ini.cc
index 87f8aa9..b5c5020 100644
--- a/game/songparser-ini.cc
+++ b/game/songparser-ini.cc
@@ -1,5 +1,6 @@
#include "songparser.hh"
+#include <boost/filesystem.hpp>
#include "midifile.hh"
/// @file Functions used for parsing the UltraStar TXT song format
@@ -13,6 +14,10 @@ namespace {
void eraseLast(std::string& s, char ch = ' ') {
if (!s.empty() && *s.rbegin() == ch) s.erase(s.size() - 1);
}
+ void testAndAdd(Song& s, std::string const& filename) {
+ std::string f = s.path + filename;
+ if (boost::filesystem::exists(f)) s.music.push_back(f);
+ }
}
void SongParser::iniParse() {
@@ -30,13 +35,14 @@ void SongParser::iniParse() {
else if (key == "artist") s.artist = value;
}
if (s.title.empty() || s.artist.empty()) throw std::runtime_error("Required header fields missing");
- s.music.push_back(s.path + "song.ogg");
- s.music.push_back(s.path + "guitar.ogg");
+ testAndAdd(s, "song.ogg");
+ testAndAdd(s, "guitar.ogg");
+ testAndAdd(s, "rhythm.ogg");
+ testAndAdd(s, "drums.ogg");
+ testAndAdd(s, "vocals.ogg");
MidiFileParser midi(s.path + "/notes.mid");
for (MidiFileParser::TempoChanges::const_iterator it = midi.tempochanges.begin(); it != midi.tempochanges.end(); ++it) addBPM(it->miditime * 4, it->value);
for (MidiFileParser::Tracks::const_iterator it = midi.tracks.begin(); it != midi.tracks.end(); ++it) {
- if (it->name == "PART RHYTHM" || it->name == "PART BASS") s.music.push_back(s.path + "rhythm.ogg");
- if (it->name == "PART DRUMS") s.music.push_back(s.path + "drums.ogg");
if (it->name != "PART VOCALS") continue;
for (MidiFileParser::Lyrics::const_iterator it2 = it->lyrics.begin(); it2 != it->lyrics.end(); ++it2) {
Note n;
|