From c19cf8f8e68ac3cb7250f3486466a704a2f8b9d9 Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Sat, 30 Nov 2019 02:49:19 +1100 Subject: [PATCH] fixed issue in waveinput where the format would be detected incorrectly Floating point detection was backwards causing float-based audio to be detected as integer and vice versa (for >32-bit formats) --- app/decoder/waveinput.cpp | 28 +++++++++++++++++++++------- app/decoder/waveinput.h | 9 ++++++--- 2 files changed, 27 insertions(+), 10 deletions(-) diff --git a/app/decoder/waveinput.cpp b/app/decoder/waveinput.cpp index 3aa292120..fab020ee4 100644 --- a/app/decoder/waveinput.cpp +++ b/app/decoder/waveinput.cpp @@ -96,16 +96,16 @@ bool WaveInput::open() break; case 32: if (data_is_float) { - format = SAMPLE_FMT_S32; - } else { format = SAMPLE_FMT_FLT; + } else { + format = SAMPLE_FMT_S32; } break; case 64: if (data_is_float) { - format = SAMPLE_FMT_S64; - } else { format = SAMPLE_FMT_DBL; + } else { + format = SAMPLE_FMT_S64; } break; default: @@ -130,11 +130,20 @@ bool WaveInput::open() return true; } -bool WaveInput::is_open() +bool WaveInput::is_open() const { return file_.isOpen(); } +QByteArray WaveInput::read(int length) +{ + if (!is_open()) { + return QByteArray(); + } + + return file_.read(length); +} + QByteArray WaveInput::read(int offset, int length) { if (!is_open()) { @@ -155,7 +164,12 @@ void WaveInput::read(int offset, char *buffer, int length) file_.read(buffer, length); } -AudioRenderingParams WaveInput::params() +bool WaveInput::at_end() const +{ + return file_.atEnd(); +} + +const AudioRenderingParams &WaveInput::params() const { return params_; } @@ -167,7 +181,7 @@ void WaveInput::close() } } -int WaveInput::sample_count() +int WaveInput::sample_count() const { return params_.bytes_to_samples(static_cast(data_size_)); } diff --git a/app/decoder/waveinput.h b/app/decoder/waveinput.h index b71bf9fbf..d25271c1c 100644 --- a/app/decoder/waveinput.h +++ b/app/decoder/waveinput.h @@ -17,16 +17,19 @@ public: bool open(); - bool is_open(); + bool is_open() const; + QByteArray read(int length); QByteArray read(int offset, int length); void read(int offset, char *buffer, int length); - AudioRenderingParams params(); + bool at_end() const; + + const AudioRenderingParams& params() const; void close(); - int sample_count(); + int sample_count() const; private: bool find_str(QFile* f, const char* str);