diff --git a/source/glest_game/types/faction_type.cpp b/source/glest_game/types/faction_type.cpp index 32f8fd9d..2215c54d 100644 --- a/source/glest_game/types/faction_type.cpp +++ b/source/glest_game/types/faction_type.cpp @@ -167,9 +167,37 @@ FactionType::~FactionType(){ std::vector FactionType::validateFactionType() { std::vector results; + const uint32 MAX_BITRATE_WARNING = 200000; + StrSound *factionMusic = getMusic(); + if(factionMusic != NULL && factionMusic->getInfo()->getBitRate() > MAX_BITRATE_WARNING) { + char szBuf[4096]=""; + sprintf(szBuf,"The Faction [%s] has the music [%s]\nwhich has a bitrate of [%u] which may cause some sound drivers to crash, please use a bitrate of %d or less!",this->getName().c_str(),factionMusic->getFileName().c_str(),factionMusic->getInfo()->getBitRate(),MAX_BITRATE_WARNING); + results.push_back(szBuf); + } + for(int i=0; igetInfo()->getBitRate() > MAX_BITRATE_WARNING) { + char szBuf[4096]=""; + sprintf(szBuf,"The Unit [%s] in Faction [%s] has the sound [%s]\nwhich has a bitrate of [%u] which may cause some sound drivers to crash, please use a bitrate of %d or less!",unitType.getName().c_str(),this->getName().c_str(),sound->getFileName().c_str(),sound->getInfo()->getBitRate(),MAX_BITRATE_WARNING); + results.push_back(szBuf); + } + } + for(int i = 0; i < unitType.getCommandSounds().getSounds().size(); ++i) { + StaticSound *sound = unitType.getCommandSounds().getSounds()[i]; + if(sound != NULL && sound->getInfo()->getBitRate() > MAX_BITRATE_WARNING) { + char szBuf[4096]=""; + sprintf(szBuf,"The Unit [%s] in Faction [%s] has the sound [%s]\nwhich has a bitrate of [%u] which may cause some sound drivers to crash, please use a bitrate of %d or less!",unitType.getName().c_str(),this->getName().c_str(),sound->getFileName().c_str(),sound->getInfo()->getBitRate(),MAX_BITRATE_WARNING); + results.push_back(szBuf); + } + } + + //const SoundContainer & getCommandSounds() const { return commandSounds; } + + for(int j = 0; j < unitType.getCommandTypeCount(); ++j) { const CommandType *cmdType = unitType.getCommandType(j); if(cmdType != NULL) { diff --git a/source/glest_game/types/unit_type.h b/source/glest_game/types/unit_type.h index 5e0f5667..c3e55879 100644 --- a/source/glest_game/types/unit_type.h +++ b/source/glest_game/types/unit_type.h @@ -174,6 +174,9 @@ public: StaticSound *getSelectionSound() const {return selectionSounds.getRandSound();} StaticSound *getCommandSound() const {return commandSounds.getRandSound();} + const SoundContainer & getSelectionSounds() const { return selectionSounds; } + const SoundContainer & getCommandSounds() const { return commandSounds; } + int getStore(const ResourceType *rt) const; const SkillType *getSkillType(const string &skillName, SkillClass skillClass) const; const SkillType *getFirstStOfClass(SkillClass skillClass) const; diff --git a/source/shared_lib/include/sound/sound.h b/source/shared_lib/include/sound/sound.h index 9d26f533..205b829b 100644 --- a/source/shared_lib/include/sound/sound.h +++ b/source/shared_lib/include/sound/sound.h @@ -31,6 +31,7 @@ private: uint32 samplesPerSecond; uint32 bitsPerSample; uint32 size; + uint32 bitRate; public: SoundInfo(); @@ -40,11 +41,13 @@ public: uint32 getSamplesPerSecond() const {return samplesPerSecond;} uint32 getBitsPerSample() const {return bitsPerSample;} uint32 getSize() const {return size;} + uint32 getBitRate() const {return bitRate;} void setChannels(uint32 channels) {this->channels= channels;} void setsamplesPerSecond(uint32 samplesPerSecond) {this->samplesPerSecond= samplesPerSecond;} void setBitsPerSample(uint32 bitsPerSample) {this->bitsPerSample= bitsPerSample;} void setSize(uint32 size) {this->size= size;} + void setBitRate(uint32 value) {this->bitRate = value;} }; // ===================================================== diff --git a/source/shared_lib/sources/sound/sound.cpp b/source/shared_lib/sources/sound/sound.cpp index 56bb0c98..66172c4e 100644 --- a/source/shared_lib/sources/sound/sound.cpp +++ b/source/shared_lib/sources/sound/sound.cpp @@ -26,6 +26,7 @@ SoundInfo::SoundInfo(){ samplesPerSecond= 0; bitsPerSample= 0; size= 0; + bitRate=0; } // ===================================================== diff --git a/source/shared_lib/sources/sound/sound_file_loader.cpp b/source/shared_lib/sources/sound/sound_file_loader.cpp index d96b8194..0ff6a56c 100644 --- a/source/shared_lib/sources/sound/sound_file_loader.cpp +++ b/source/shared_lib/sources/sound/sound_file_loader.cpp @@ -91,6 +91,8 @@ void WavSoundFileLoader::open(const string &path, SoundInfo *soundInfo){ f.read((char*) &size16, 2); soundInfo->setBitsPerSample(size16); + soundInfo->setBitRate(soundInfo->getSamplesPerSecond() * soundInfo->getChannels() * soundInfo->getBitsPerSample() / 8); + if (soundInfo->getBitsPerSample() != 8 && soundInfo->getBitsPerSample()!=16){ throw runtime_error("Bits per sample must be 8 or 16: " + path); } @@ -167,6 +169,7 @@ void OggSoundFileLoader::open(const string &path, SoundInfo *soundInfo){ soundInfo->setsamplesPerSecond(vi->rate); soundInfo->setBitsPerSample(16); soundInfo->setSize(samples * 2 * vi->channels); + soundInfo->setBitRate(vi->bitrate_nominal); } uint32 OggSoundFileLoader::read(int8 *samples, uint32 size){