diff --git a/Userland/Applications/Piano/AudioPlayerLoop.cpp b/Userland/Applications/Piano/AudioPlayerLoop.cpp index 1b7b2339ef..35a76f13c1 100644 --- a/Userland/Applications/Piano/AudioPlayerLoop.cpp +++ b/Userland/Applications/Piano/AudioPlayerLoop.cpp @@ -141,7 +141,7 @@ ErrorOr AudioPlayerLoop::write_wav_if_needed() m_wav_percent_written.store(100); m_track_manager.reset(); m_track_manager.set_should_loop(true); - wav_writer.finalize(); + TRY(wav_writer.finalize()); return {}; })); diff --git a/Userland/Libraries/LibAudio/WavWriter.cpp b/Userland/Libraries/LibAudio/WavWriter.cpp index 466928a228..11e47a7143 100644 --- a/Userland/Libraries/LibAudio/WavWriter.cpp +++ b/Userland/Libraries/LibAudio/WavWriter.cpp @@ -28,7 +28,7 @@ WavWriter::WavWriter(int sample_rate, u16 num_channels, PcmSampleFormat sample_f WavWriter::~WavWriter() { if (!m_finalized) - finalize(); + (void)finalize(); } ErrorOr WavWriter::set_file(StringView path) @@ -39,7 +39,7 @@ ErrorOr WavWriter::set_file(StringView path) return {}; } -ErrorOr WavWriter::write_samples(Span samples) +ErrorOr WavWriter::write_samples(ReadonlySpan samples) { switch (m_sample_format) { // FIXME: For non-float formats, we don't add good quantization noise, leading to possibly unpleasant quantization artifacts. @@ -72,22 +72,18 @@ ErrorOr WavWriter::write_samples(Span samples) return {}; } -void WavWriter::finalize() +ErrorOr WavWriter::finalize() { VERIFY(!m_finalized); m_finalized = true; if (m_file && m_file->is_open()) { - auto result = [&]() -> ErrorOr { - TRY(m_file->seek(0, SeekMode::SetPosition)); - return TRY(write_header()); - }(); - - if (result.is_error()) - dbgln("Failed to finalize WavWriter: {}", result.error()); + TRY(m_file->seek(0, SeekMode::SetPosition)); + TRY(write_header()); m_file->close(); } m_data_sz = 0; + return {}; } ErrorOr WavWriter::write_header() diff --git a/Userland/Libraries/LibAudio/WavWriter.h b/Userland/Libraries/LibAudio/WavWriter.h index a1ce01a9eb..184c79016e 100644 --- a/Userland/Libraries/LibAudio/WavWriter.h +++ b/Userland/Libraries/LibAudio/WavWriter.h @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include @@ -17,7 +18,7 @@ namespace Audio { -class WavWriter { +class WavWriter : public Encoder { AK_MAKE_NONCOPYABLE(WavWriter); AK_MAKE_NONMOVABLE(WavWriter); @@ -26,8 +27,8 @@ public: WavWriter(int sample_rate = 44100, u16 num_channels = 2, PcmSampleFormat sample_format = PcmSampleFormat::Int16); ~WavWriter(); - ErrorOr write_samples(Span samples); - void finalize(); // You can finalize manually or let the destructor do it. + virtual ErrorOr write_samples(ReadonlySpan samples) override; + virtual ErrorOr finalize() override; u32 sample_rate() const { return m_sample_rate; } u16 num_channels() const { return m_num_channels; } diff --git a/Userland/Utilities/aconv.cpp b/Userland/Utilities/aconv.cpp index c479e51616..1d170119a6 100644 --- a/Userland/Utilities/aconv.cpp +++ b/Userland/Utilities/aconv.cpp @@ -137,7 +137,7 @@ ErrorOr serenity_main(Main::Arguments arguments) } if (writer.has_value()) - (*writer)->finalize(); + TRY((*writer)->finalize()); if (output != "-"sv) outln(); } else {