From c974be91abe7c276376414166bb37680c6e2b232 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?kleines=20Filmr=C3=B6llchen?= Date: Mon, 16 Aug 2021 22:01:26 +0200 Subject: LibAudio: Rescale integer samples correctly in FLAC loader The FLAC samples are signed, so we need to rescale them not by their bit depth, but by half of the bit depth. For example, a 24-bit sample extends from -2^23 to 2^23-1, and therefore needs to be rescaled by 2^23 to conform to the [-1, 1] double sample range. --- Userland/Libraries/LibAudio/FlacLoader.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Userland/Libraries/LibAudio/FlacLoader.cpp b/Userland/Libraries/LibAudio/FlacLoader.cpp index 1276c95a91..0e21ad035a 100644 --- a/Userland/Libraries/LibAudio/FlacLoader.cpp +++ b/Userland/Libraries/LibAudio/FlacLoader.cpp @@ -414,8 +414,7 @@ void FlacLoaderPlugin::next_frame() VERIFY(left.size() == right.size()); - // TODO: find the correct rescale offset - double sample_rescale = static_cast(1 << pcm_bits_per_sample(m_current_frame->bit_depth)); + double sample_rescale = static_cast(1 << (pcm_bits_per_sample(m_current_frame->bit_depth) - 1)); dbgln_if(AFLACLOADER_DEBUG, "Sample rescaled from {} bits: factor {:.1f}", pcm_bits_per_sample(m_current_frame->bit_depth), sample_rescale); m_current_frame_data.clear_with_capacity(); -- cgit v1.2.3