@@ -21,12 +21,19 @@ void common_hal_audiodelays_echo_construct(audiodelays_echo_obj_t *self, uint32_
2121 self -> sample_rate = sample_rate ;
2222
2323 self -> buffer_len = buffer_size ;
24- self -> buffer = m_malloc (self -> buffer_len );
25- if (self -> buffer == NULL ) {
24+ self -> buffer [ 0 ] = m_malloc (self -> buffer_len );
25+ if (self -> buffer [ 0 ] == NULL ) {
2626 common_hal_audiodelays_echo_deinit (self );
2727 m_malloc_fail (self -> buffer_len );
2828 }
29- memset (self -> buffer , 0 , self -> buffer_len );
29+ memset (self -> buffer [0 ], 0 , self -> buffer_len );
30+ self -> buffer [1 ] = m_malloc (self -> buffer_len );
31+ if (self -> buffer [1 ] == NULL ) {
32+ common_hal_audiodelays_echo_deinit (self );
33+ m_malloc_fail (self -> buffer_len );
34+ }
35+ memset (self -> buffer [1 ], 0 , self -> buffer_len );
36+ self -> last_buf_idx = 1 ;
3037
3138 if (decay == MP_OBJ_NULL ) {
3239 decay = mp_obj_new_float (0.7 );
@@ -81,7 +88,8 @@ void common_hal_audiodelays_echo_deinit(audiodelays_echo_obj_t *self) {
8188 return ;
8289 }
8390 self -> echo_buffer = NULL ;
84- self -> buffer = NULL ;
91+ self -> buffer [0 ] = NULL ;
92+ self -> buffer [1 ] = NULL ;
8593}
8694
8795
@@ -99,9 +107,9 @@ void common_hal_audiodelays_echo_set_delay_ms(audiodelays_echo_obj_t *self, mp_o
99107
100108 if (self -> echo_buffer_read_pos > max_ebuf_length ) {
101109 self -> echo_buffer_read_pos = 0 ;
102- self -> echo_buffer_write_pos = max_ebuf_length - (self -> buffer_len / sizeof (uint32_t ));
110+ self -> echo_buffer_write_pos = max_ebuf_length - (self -> buffer_len / sizeof (uint16_t ));
103111 } else if (self -> echo_buffer_write_pos > max_ebuf_length ) {
104- self -> echo_buffer_read_pos = self -> buffer_len / sizeof (uint32_t );
112+ self -> echo_buffer_read_pos = self -> buffer_len / sizeof (uint16_t );
105113 self -> echo_buffer_write_pos = 0 ;
106114 }
107115}
@@ -211,7 +219,8 @@ audioio_get_buffer_result_t audiodelays_echo_get_buffer(audiodelays_echo_obj_t *
211219 mp_float_t mix = MIN (1.0 , MAX (synthio_block_slot_get (& self -> mix ), 0.0 ));
212220 mp_float_t decay = MIN (1.0 , MAX (synthio_block_slot_get (& self -> decay ), 0.0 ));
213221
214- int16_t * word_buffer = (int16_t * )self -> buffer ;
222+ self -> last_buf_idx = !self -> last_buf_idx ;
223+ int16_t * word_buffer = (int16_t * )self -> buffer [self -> last_buf_idx ];
215224 uint32_t length = self -> buffer_len / sizeof (uint16_t );
216225 int16_t * echo_buffer = (int16_t * )self -> echo_buffer ;
217226 uint32_t echo_buf_len = self -> echo_buffer_len / sizeof (uint16_t );
@@ -338,15 +347,15 @@ audioio_get_buffer_result_t audiodelays_echo_get_buffer(audiodelays_echo_obj_t *
338347 }
339348 }
340349
341- * buffer = (uint8_t * )self -> buffer ;
350+ * buffer = (uint8_t * )self -> buffer [ self -> last_buf_idx ] ;
342351 * buffer_length = self -> buffer_len ;
343352 return GET_BUFFER_MORE_DATA ;
344353}
345354
346355void audiodelays_echo_get_buffer_structure (audiodelays_echo_obj_t * self , bool single_channel_output ,
347356 bool * single_buffer , bool * samples_signed , uint32_t * max_buffer_length , uint8_t * spacing ) {
348357
349- * single_buffer = true ;
358+ * single_buffer = false ;
350359 * samples_signed = true;
351360 * max_buffer_length = self -> buffer_len ;
352361 if (single_channel_output ) {
0 commit comments