8000 Merge pull request #10017 from relic-se/audiodelays_buffer_fix · jepler/circuitpython@0a53eb8 · GitHub
[go: up one dir, main page]

Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 0a53eb8

Browse files
authored
Merge pull request adafruit#10017 from relic-se/audiodelays_buffer_fix
Fix sample decimation bug on `audiodelays.Echo` when `freq_shift=True`
2 parents 3236a0f + 3eeb90b commit 0a53eb8

File tree

1 file changed

+9
-9
lines changed
  • shared-module/audiodelays

1 file changed

+9
-9
lines changed

shared-module/audiodelays/Echo.c

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -351,8 +351,8 @@ audioio_get_buffer_result_t audiodelays_echo_get_buffer(audiodelays_echo_obj_t *
351351
echo = echo_buffer[echo_buffer_pos >> 8];
352352
next_buffer_pos = echo_buffer_pos + self->echo_buffer_rate;
353353

354-
word = (int16_t)(echo * decay);
355354
for (uint32_t j = echo_buffer_pos >> 8; j < next_buffer_pos >> 8; j++) {
355+
word = (int16_t)(echo_buffer[j % echo_buf_len] * decay);
356356
echo_buffer[j % echo_buf_len] = word;
357357
}
358358
} else {
@@ -421,33 +421,33 @@ audioio_get_buffer_result_t audiodelays_echo_get_buffer(audiodelays_echo_obj_t *
421421
if (self->freq_shift) {
422422
echo = echo_buffer[echo_buffer_pos >> 8];
423423
next_buffer_pos = echo_buffer_pos + self->echo_buffer_rate;
424-
word = (int32_t)(echo * decay + sample_word);
425424
} else {
426425
echo = echo_buffer[self->echo_buffer_read_pos++];
427426
word = (int32_t)(echo * decay + sample_word);
428427
}
429428

430429
if (MP_LIKELY(self->bits_per_sample == 16)) {
431-
word = synthio_mix_down_sample(word, SYNTHIO_MIX_DOWN_SCALE(2));
432430
if (self->freq_shift) {
433431
for (uint32_t j = echo_buffer_pos >> 8; j < next_buffer_pos >> 8; j++) {
432+
word = (int32_t)(echo_buffer[j % echo_buf_len] * decay + sample_word);
433+
word = synthio_mix_down_sample(word, SYNTHIO_MIX_DOWN_SCALE(2));
434434
echo_buffer[j % echo_buf_len] = (int16_t)word;
435435
}
436436
} else {
437+
word = synthio_mix_down_sample(word, SYNTHIO_MIX_DOWN_SCALE(2));
437438
echo_buffer[self->echo_buffer_write_pos++] = (int16_t)word;
438439
}
439440
} else {
440-
// Do not have mix_down for 8 bit so just hard cap samples into 1 byte
441-
if (word > 127) {
442-
word = 127;
443-
} else if (word < -128) {
444-
word = -128;
445-
}
446441
if (self->freq_shift) {
447442
for (uint32_t j = echo_buffer_pos >> 8; j < next_buffer_pos >> 8; j++) {
443+
word = (int32_t)(echo_buffer[j % echo_buf_len] * decay + sample_word);
444+
// Do not have mix_down for 8 bit so just hard cap samples into 1 byte
445+
word = MIN(MAX(word, -128), 127);
448446
echo_buffer[j % echo_buf_len] = (int8_t)word;
449447
}
450448
} else {
449+
// Do not have mix_down for 8 bit so just hard cap samples into 1 byte
450+
word = MIN(MAX(word, -128), 127);
451451
echo_buffer[self->echo_buffer_write_pos++] = (int8_t)word;
452452
}
453453
}

0 commit comments

Comments
 (0)
0