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.
This commit is contained in:
kleines Filmröllchen 2021-08-16 22:01:26 +02:00 committed by Andreas Kling
parent 442aa48a61
commit c974be91ab
Notes: sideshowbarker 2024-07-18 05:37:29 +09:00

View File

@ -414,8 +414,7 @@ void FlacLoaderPlugin::next_frame()
VERIFY(left.size() == right.size());
// TODO: find the correct rescale offset
double sample_rescale = static_cast<double>(1 << pcm_bits_per_sample(m_current_frame->bit_depth));
double sample_rescale = static_cast<double>(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();