@@ -21,12 +21,19 @@ void common_hal_audiodelays_echo_construct(audiodelays_echo_obj_t *self, uint32_
21
21
self -> sample_rate = sample_rate ;
22
22
23
23
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 ) {
26
26
common_hal_audiodelays_echo_deinit (self );
27
27
m_malloc_fail (self -> buffer_len );
28
28
}
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 ;
30
37
31
38
if (decay == MP_OBJ_NULL ) {
32
39
decay = mp_obj_new_float (0.7 );
@@ -81,7 +88,8 @@ void common_hal_audiodelays_echo_deinit(audiodelays_echo_obj_t *self) {
81
88
return ;
82
89
}
83
90
self -> echo_buffer = NULL ;
84
- self -> buffer = NULL ;
91
+ self -> buffer [0 ] = NULL ;
92
+ self -> buffer [1 ] = NULL ;
85
93
}
86
94
87
95
@@ -99,9 +107,9 @@ void common_hal_audiodelays_echo_set_delay_ms(audiodelays_echo_obj_t *self, mp_o
99
107
100
108
if (self -> echo_buffer_read_pos > max_ebuf_length ) {
101
109
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 ));
103
111
} 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 );
105
113
self -> echo_buffer_write_pos = 0 ;
106
114
}
107
115
}
@@ -211,7 +219,8 @@ audioio_get_buffer_result_t audiodelays_echo_get_buffer(audiodelays_echo_obj_t *
211
219
mp_float_t mix = MIN (1.0 , MAX (synthio_block_slot_get (& self -> mix ), 0.0 ));
212
220
mp_float_t decay = MIN (1.0 , MAX (synthio_block_slot_get (& self -> decay ), 0.0 ));
213
221
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 ];
215
224
uint32_t length = self -> buffer_len / sizeof (uint16_t );
216
225
int16_t * echo_buffer = (int16_t * )self -> echo_buffer ;
217
226
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 *
338
347
}
339
348
}
340
349
341
- * buffer = (uint8_t * )self -> buffer ;
350
+ * buffer = (uint8_t * )self -> buffer [ self -> last_buf_idx ] ;
342
351
* buffer_length = self -> buffer_len ;
343
352
return GET_BUFFER_MORE_DATA ;
344
353
}
345
354
346
355
void audiodelays_echo_get_buffer_structure (audiodelays_echo_obj_t * self , bool single_channel_output ,
347
356
bool * single_buffer , bool * samples_signed , uint32_t * max_buffer_length , uint8_t * spacing ) {
348
357
349
- * single_buffer = true ;
358
+ * single_buffer = false ;
350
359
* samples_signed = true;
351
360
* max_buffer_length = self -> buffer_len ;
352
361
if (single_channel_output ) {
0 commit comments