mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 17:07:35 +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:
parent
513e000e86
commit
ae039977d1
4 changed files with 12 additions and 15 deletions
|
@ -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()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue