From d21c6aef4d6ce5216c057534d2606d9f162a5a2a Mon Sep 17 00:00:00 2001 From: Jbleezy Date: Sun, 15 Sep 2024 21:20:55 -0700 Subject: [PATCH] Find a file for the sound path including extension --- .../SoundBank/SoundBankWriter.cpp | 70 +++++++++---------- 1 file changed, 34 insertions(+), 36 deletions(-) diff --git a/src/ObjLoading/ObjContainer/SoundBank/SoundBankWriter.cpp b/src/ObjLoading/ObjContainer/SoundBank/SoundBankWriter.cpp index 7294ff81..2263f6ef 100644 --- a/src/ObjLoading/ObjContainer/SoundBank/SoundBankWriter.cpp +++ b/src/ObjLoading/ObjContainer/SoundBank/SoundBankWriter.cpp @@ -130,14 +130,22 @@ public: size_t soundSize; std::unique_ptr soundData; - // try to find a wav file for the sound path - const auto wavFile = m_asset_search_path->Open(soundFilePath + ".wav"); - if (wavFile.IsOpen()) + // try to find a file for the sound path + const auto file = m_asset_search_path->Open(soundFilePath); + if (!file.IsOpen()) + { + std::cerr << "Unable to find a compatible file for sound " << soundFilePath << "\n"; + return false; + } + + // check if sound path ends in .wav + const std::string extension = ".wav"; + if (soundFilePath.size() >= extension.size() && soundFilePath.compare(soundFilePath.size() - extension.size(), extension.size(), extension) == 0) { WavHeader header{}; - wavFile.m_stream->read(reinterpret_cast(&header), sizeof(WavHeader)); + file.m_stream->read(reinterpret_cast(&header), sizeof(WavHeader)); - soundSize = static_cast(wavFile.m_length - sizeof(WavHeader)); + soundSize = static_cast(file.m_length - sizeof(WavHeader)); const auto frameCount = soundSize / (header.formatChunk.nChannels * (header.formatChunk.wBitsPerSample / 8)); const auto frameRateIndex = INDEX_FOR_FRAMERATE[header.formatChunk.nSamplesPerSec]; @@ -155,45 +163,35 @@ public: m_entries.push_back(entry); soundData = std::make_unique(soundSize); - wavFile.m_stream->read(soundData.get(), soundSize); + file.m_stream->read(soundData.get(), soundSize); } else { - // if there is no wav file, try flac file - const auto flacFile = m_asset_search_path->Open(soundFilePath + ".flac"); - if (flacFile.IsOpen()) + soundSize = static_cast(file.m_length); + + soundData = std::make_unique(soundSize); + file.m_stream->read(soundData.get(), soundSize); + + flac::FlacMetaData metaData; + if (flac::GetFlacMetaData(soundData.get(), soundSize, metaData)) { - soundSize = static_cast(flacFile.m_length); + const auto frameRateIndex = INDEX_FOR_FRAMERATE[metaData.m_sample_rate]; + SoundAssetBankEntry entry{ + soundId, + soundSize, + static_cast(m_current_offset), + static_cast(metaData.m_total_samples), + frameRateIndex, + metaData.m_number_of_channels, + sound.m_looping, + 8, + }; - soundData = std::make_unique(soundSize); - flacFile.m_stream->read(soundData.get(), soundSize); - - flac::FlacMetaData metaData; - if (flac::GetFlacMetaData(soundData.get(), soundSize, metaData)) - { - const auto frameRateIndex = INDEX_FOR_FRAMERATE[metaData.m_sample_rate]; - SoundAssetBankEntry entry{ - soundId, - soundSize, - static_cast(m_current_offset), - static_cast(metaData.m_total_samples), - frameRateIndex, - metaData.m_number_of_channels, - sound.m_looping, - 8, - }; - - m_entries.push_back(entry); - } - else - { - std::cerr << "Unable to decode .flac file for sound " << soundFilePath << "\n"; - return false; - } + m_entries.push_back(entry); } else { - std::cerr << "Unable to find a compatible file for sound " << soundFilePath << "\n"; + std::cerr << "Unable to decode .flac file for sound " << soundFilePath << "\n"; return false; } }