Add AEC support
AEC Model
We need inference code in Rust. There is Speexdsp binding, but not sure it will work well, especially in ASR context.
Mic/Speaker stream synchronization
Unless this issue is resolved:
-
Construct a StreamInstant from
SpeakerStream. Since we already know mach_absolute_time, we can obtain aStreamInstantusing this conversion. -
StreamInstant is already available in
MicStream(from Cpal). -
Use duration_since to calculate the time delta and synchronize accordingly.
Not sure syncing is really needed. TDC is mentioned in NKF-AEC, but delay might be small enough for our case.
Removing sounds from typing the keyboard would be suuuuuuper nice
In macOS, #904 can be solution.
We don't do sync right now. DTLN will be implemented #1007.