Merge pull request #7253 from dhalbert/samd51-stereo-fix

fix playing mono files on stereo output
This commit is contained in:
Scott Shawcroft 2022-11-28 10:54:28 -08:00 committed by GitHub
commit 6457827514
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -405,7 +405,13 @@ void common_hal_audioio_audioout_play(audioio_audioout_obj_t *self,
if (self->right_channel == &pin_PA02) {
right_channel_reg = (uint32_t)&DAC->DATABUF[0].reg;
}
if (right_channel_reg == left_channel_reg + 2 && audiosample_bits_per_sample(sample) == 16) {
size_t num_channels = audiosample_channel_count(sample);
if (num_channels == 2 &&
// Are DAC channels sequential?
left_channel_reg + 2 == right_channel_reg &&
audiosample_bits_per_sample(sample) == 16) {
result = audio_dma_setup_playback(&self->left_dma, sample, loop, false, 0,
false /* output unsigned */,
left_channel_reg,
@ -415,7 +421,11 @@ void common_hal_audioio_audioout_play(audioio_audioout_obj_t *self,
false /* output unsigned */,
left_channel_reg,
left_channel_trigger);
if (right_channel_reg != 0 && result == AUDIO_DMA_OK) {
// Don't play back on right channel unless stereo.
// TODO possibility: Set up non-incrementing DMA on one channel so they use the same samples?
// Right now, playing back mono on both channels causes sample to play twice as fast.
if (num_channels == 2 &&
right_channel_reg != 0 && result == AUDIO_DMA_OK) {
result = audio_dma_setup_playback(&self->right_dma, sample, loop, true, 1,
false /* output unsigned */,
right_channel_reg,