diff --git a/rhubarb/src/audio/WaveFileReader.cpp b/rhubarb/src/audio/WaveFileReader.cpp index df24ccb..72d4b16 100644 --- a/rhubarb/src/audio/WaveFileReader.cpp +++ b/rhubarb/src/audio/WaveFileReader.cpp @@ -33,10 +33,9 @@ namespace Codec { string codecToString(int codec); -WaveFileReader::WaveFileReader(const path& filePath) : - filePath(filePath), - formatInfo {} -{ +WaveFormatInfo getWaveFormatInfo(const path& filePath) { + WaveFormatInfo formatInfo {}; + auto file = openFile(filePath); file.seekg(0, std::ios_base::end); @@ -139,8 +138,14 @@ WaveFileReader::WaveFileReader(const path& filePath) : } } } + + return formatInfo; } +WaveFileReader::WaveFileReader(const path& filePath) : + filePath(filePath), + formatInfo(getWaveFormatInfo(filePath)) {} + unique_ptr WaveFileReader::clone() const { return make_unique(*this); } diff --git a/rhubarb/src/audio/WaveFileReader.h b/rhubarb/src/audio/WaveFileReader.h index c200f35..c128b0f 100644 --- a/rhubarb/src/audio/WaveFileReader.h +++ b/rhubarb/src/audio/WaveFileReader.h @@ -10,6 +10,17 @@ enum class SampleFormat { Float32 }; +struct WaveFormatInfo { + int bytesPerFrame; + SampleFormat sampleFormat; + int frameRate; + int64_t frameCount; + int channelCount; + std::streampos dataOffset; +}; + +WaveFormatInfo getWaveFormatInfo(const std::filesystem::path& filePath); + class WaveFileReader : public AudioClip { public: WaveFileReader(const std::filesystem::path& filePath); @@ -20,15 +31,6 @@ public: private: SampleReader createUnsafeSampleReader() const override; - struct WaveFormatInfo { - int bytesPerFrame; - SampleFormat sampleFormat; - int frameRate; - int64_t frameCount; - int channelCount; - std::streampos dataOffset; - }; - std::filesystem::path filePath; WaveFormatInfo formatInfo; };