summaryrefslogtreecommitdiff
path: root/src/codecs/mad.cpp
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2023-07-25 17:42:36 +1000
committerjacqueline <me@jacqueline.id.au>2023-07-25 17:43:12 +1000
commit80d7df910987db5201402fe987124f29f09344f3 (patch)
tree7e8c1e04ab40026087343efee95a771c7839b32f /src/codecs/mad.cpp
parent7b72e5479ee6d11f76c49f7463ba0e7f4e5165c5 (diff)
downloadtangara-fw-80d7df910987db5201402fe987124f29f09344f3.tar.gz
fuck off
Diffstat (limited to 'src/codecs/mad.cpp')
-rw-r--r--src/codecs/mad.cpp8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/codecs/mad.cpp b/src/codecs/mad.cpp
index 8b4e2561..29e34a0f 100644
--- a/src/codecs/mad.cpp
+++ b/src/codecs/mad.cpp
@@ -145,11 +145,13 @@ auto MadMp3Decoder::ContinueStream(cpp::span<const std::byte> input,
for (int channel = 0; channel < synth_.pcm.channels; channel++) {
uint32_t sample_24 =
mad_fixed_to_pcm(synth_.pcm.samples[channel][current_sample_], 24);
- output[output_byte++] = static_cast<std::byte>((sample_24 >> 16) & 0xFF);
- output[output_byte++] = static_cast<std::byte>((sample_24 >> 8) & 0xFF);
- output[output_byte++] = static_cast<std::byte>((sample_24)&0xFF);
+
// 24 bit samples must still be aligned to 32 bits. The LSB is ignored.
output[output_byte++] = static_cast<std::byte>(0);
+
+ output[output_byte++] = static_cast<std::byte>((sample_24)&0xFF);
+ output[output_byte++] = static_cast<std::byte>((sample_24 >> 8) & 0xFF);
+ output[output_byte++] = static_cast<std::byte>((sample_24 >> 16) & 0xFF);
}
current_sample_++;
}