1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 15:37:47 +00:00

LibAudio: Use Encoder interface for WavWriter

The only real change here is the fallibility of the finalization
function, which makes WavWriter's code quite a bit nicer.
This commit is contained in:
kleines Filmröllchen 2023-06-30 20:02:49 +02:00 committed by Andrew Kaster
parent 513e000e86
commit ae039977d1
4 changed files with 12 additions and 15 deletions

View file

@ -28,7 +28,7 @@ WavWriter::WavWriter(int sample_rate, u16 num_channels, PcmSampleFormat sample_f
WavWriter::~WavWriter()
{
if (!m_finalized)
finalize();
(void)finalize();
}
ErrorOr<void> WavWriter::set_file(StringView path)
@ -39,7 +39,7 @@ ErrorOr<void> WavWriter::set_file(StringView path)
return {};
}
ErrorOr<void> WavWriter::write_samples(Span<Sample> samples)
ErrorOr<void> WavWriter::write_samples(ReadonlySpan<Sample> 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<void> WavWriter::write_samples(Span<Sample> samples)
return {};
}
void WavWriter::finalize()
ErrorOr<void> WavWriter::finalize()
{
VERIFY(!m_finalized);
m_finalized = true;
if (m_file && m_file->is_open()) {
auto result = [&]() -> ErrorOr<void> {
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<void> WavWriter::write_header()