Flutter for the UI.
Rust for the listening, and pitch detecting backend.
Connected the former with the latter using flutter_rust_bridge.
More details on Rust backend:
For listening (getting audio signal from microphone) I used:
- Android: https://crates.io/crates/oboe
- native desktop/iOS (not currently released): https://crates.io/crates/clap
- Web: https://crates.io/crates/web-sys (so basically JS Web Audio API called from Rust compiled to WASM).
For pitch detection: