summaryrefslogtreecommitdiff
path: root/ports
diff options
context:
space:
mode:
authorJeff Epler <jepler@gmail.com>2021-01-07 16:29:08 -0600
committerJeff Epler <jepler@gmail.com>2021-01-07 16:29:08 -0600
commitd3afda61d8172ad6ec8706782c397d9cd52c3edc (patch)
treeb9daba68c9a497bbc0918ca1dc72d3d932e1d0ad /ports
parent352226402c6b897ec9dc776a61cff3330b8a40df (diff)
esp32s2: i2s: must reset buffer, otherwise wave samples don't start
.. and other housekeeping when starting to play a sample
Diffstat (limited to 'ports')
-rw-r--r--ports/esp32s2/i2s_common.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/ports/esp32s2/i2s_common.c b/ports/esp32s2/i2s_common.c
index 24ded295f..d5c0facaa 100644
--- a/ports/esp32s2/i2s_common.c
+++ b/ports/esp32s2/i2s_common.c
@@ -186,6 +186,7 @@ void port_i2s_play(i2s_t *self, mp_obj_t sample, bool loop) {
}
self->sample = sample;
+ self->loop = loop;
self->bytes_per_sample = audiosample_bits_per_sample(sample) / 8;
self->channel_count = audiosample_channel_count(sample);
bool single_buffer;
@@ -195,12 +196,15 @@ void port_i2s_play(i2s_t *self, mp_obj_t sample, bool loop) {
audiosample_get_buffer_structure(sample, false, &single_buffer, &samples_signed,
&max_buffer_length, &spacing);
self->samples_signed = samples_signed;
- self->loop = loop;
self->playing = true;
self->paused = false;
self->stopping = false;
+ self->sample_data = self->sample_end = NULL;
// We always output stereo so output twice as many bits.
// uint16_t bits_per_sample_output = bits_per_sample * 2;
+
+ audiosample_reset_buffer(self->sample, false, 0);
+
ESP_CALL_RAISE(i2s_set_sample_rates(self->instance, audiosample_sample_rate(sample)));
i2s_fill_buffer(self);
}