瀏覽代碼

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.
kleines Filmröllchen 4 年之前
父節點
當前提交
c974be91ab
共有 1 個文件被更改,包括 1 次插入2 次删除
  1. 1 2
      Userland/Libraries/LibAudio/FlacLoader.cpp

+ 1 - 2
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<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();