Skip to content

Commit a4f0542

Browse files
committed
Use saturating arithmetic to simulate microphone clipping. See #83
1 parent 6e31df2 commit a4f0542

1 file changed

Lines changed: 9 additions & 2 deletions

File tree

src/ee_audiomark.c

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,7 @@ ee_audiomark_release(void)
210210
int
211211
ee_audiomark_run(void)
212212
{
213+
int32_t sum;
213214
ee_reset_audio();
214215
while (!read_all_audio_data)
215216
{
@@ -220,8 +221,14 @@ ee_audiomark_run(void)
220221
// linear feedback of the loudspeaker to the MICs
221222
for (int i = 0; i < BYTES_PER_AUDIO_FRAME / 2; i++)
222223
{
223-
left_capture[i] = left_capture[i] + audio_input[i];
224-
right_capture[i] = right_capture[i] + audio_input[i];
224+
sum = left_capture[i] + audio_input[i];
225+
if (sum > 32767) sum = 32767; /* Saturation if overflow */
226+
if (sum < -32768) sum = -32768; /* Saturation if overflow */
227+
left_capture[i] = sum;
228+
sum = right_capture[i] + audio_input[i];
229+
if (sum > 32767) sum = 32767; /* Saturation if overflow */
230+
if (sum < -32768) sum = -32768; /* Saturation if overflow */
231+
right_capture[i] = sum;
225232
}
226233

227234
CHECK(ee_abf_f32(NODE_RUN, (void **)&p_bmf_inst, xdais_bmf, NULL));

0 commit comments

Comments
 (0)