diff options
| author | Scott Shawcroft <scott.shawcroft@gmail.com> | 2017-06-20 11:18:46 -0700 |
|---|---|---|
| committer | Scott Shawcroft <scott.shawcroft@gmail.com> | 2017-06-20 11:18:46 -0700 |
| commit | 9eadda68b878e6c40bd5b20c623885150b63b3b0 (patch) | |
| tree | a22cc336ca180f1e6298f4bc908ba11dedb27194 /atmel-samd | |
| parent | 97fcdfbd08c922efd7470d6482d7c7c703ffc0ae (diff) | |
atmel-samd: Fix AudioOut buffer playback by supporting bytes_per_sample.1.0.0-rc.2
Thanks to @ntoll for finding this bug!
Diffstat (limited to 'atmel-samd')
| -rw-r--r-- | atmel-samd/common-hal/audioio/AudioOut.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/atmel-samd/common-hal/audioio/AudioOut.c b/atmel-samd/common-hal/audioio/AudioOut.c index 9fb1a6ebe..c0ccd547e 100644 --- a/atmel-samd/common-hal/audioio/AudioOut.c +++ b/atmel-samd/common-hal/audioio/AudioOut.c @@ -103,6 +103,7 @@ void audioout_reset(void) { void audioout_background(void) { if (MP_STATE_VM(audioout_block_counter) != NULL && active_audioout != NULL && + active_audioout->second_buffer != NULL && active_audioout->last_loaded_block < tc_get_count_value(MP_STATE_VM(audioout_block_counter))) { uint8_t* buffer; if (tc_get_count_value(MP_STATE_VM(audioout_block_counter)) % 2 == 1) { @@ -132,6 +133,7 @@ void audioout_background(void) { descriptor = active_audioout->second_descriptor; } descriptor->BTCNT.reg = length_read / active_audioout->bytes_per_sample; + descriptor->SRCADDR.reg = ((uint32_t) buffer) + length_read; descriptor->DESCADDR.reg = 0; } } @@ -348,7 +350,8 @@ static void shared_construct(audioio_audioout_obj_t* self, const mcu_pin_obj_t* void common_hal_audioio_audioout_construct_from_buffer(audioio_audioout_obj_t* self, const mcu_pin_obj_t* pin, uint16_t* buffer, - uint32_t len) { + uint32_t len, + uint8_t bytes_per_sample) { self->pin = pin; if (pin != &pin_PA02) { mp_raise_ValueError("Invalid pin"); @@ -360,8 +363,8 @@ void common_hal_audioio_audioout_construct_from_buffer(audioio_audioout_obj_t* s self->buffer = (uint8_t*) buffer; self->second_buffer = NULL; - // Input len is a count. Internal len is in bytes. - self->len = 2 * len; + self->bytes_per_sample = bytes_per_sample; + self->len = len; self->frequency = 8000; } |
