@@ -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