Fixed audio channels getting swapped twice
This commit is contained in:
parent
976bfa1969
commit
b7b7658431
|
@ -23,31 +23,15 @@ void ultramodern::set_audio_frequency(uint32_t freq) {
|
|||
}
|
||||
|
||||
void ultramodern::queue_audio_buffer(RDRAM_ARG PTR(int16_t) audio_data_, uint32_t byte_count) {
|
||||
// Buffer for holding the output of swapping the audio channels. This is reused across
|
||||
// calls to reduce runtime allocations.
|
||||
static std::vector<int16_t> swap_buffer;
|
||||
|
||||
// Ensure that the byte count is an integer multiple of samples.
|
||||
assert((byte_count & 1) == 0);
|
||||
|
||||
// Calculate the number of samples from the number of bytes.
|
||||
uint32_t sample_count = byte_count / sizeof(int16_t);
|
||||
|
||||
// Make sure the swap buffer is large enough to hold all the incoming audio data.
|
||||
if (sample_count > swap_buffer.size()) {
|
||||
swap_buffer.resize(sample_count);
|
||||
}
|
||||
|
||||
// Swap the audio channels into the swap buffer to correct for the address xor caused by endianness handling.
|
||||
int16_t* audio_data = TO_PTR(int16_t, audio_data_);
|
||||
for (size_t i = 0; i < sample_count; i += 2) {
|
||||
swap_buffer[i + 0] = audio_data[i + 1];
|
||||
swap_buffer[i + 1] = audio_data[i + 0];
|
||||
}
|
||||
|
||||
// Queue the swapped audio data.
|
||||
if (audio_callbacks.queue_samples) {
|
||||
audio_callbacks.queue_samples(swap_buffer.data(), sample_count);
|
||||
audio_callbacks.queue_samples(TO_PTR(int16_t, audio_data_), sample_count);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue