This project is a React + TypeScript demo proving reliable mic input and audio playback on iOS Safari.
It implements a robust WebAudio state machine, gesture-based unlock, and auto-recovery logic for mobile audio handling.
| Feature | Description |
|---|---|
| π§ Shared AudioContext | A single, persistent AudioContext reused throughout the session. |
| π’ Tap to Enable Audio | Unlocks the context via user gesture; fixes autoplay rejections. |
| π Push-to-Talk (Press & Hold) | Hold to record mic input; release to stop and save to buffer. |
| Plays recorded audio (or synthetic tone if none). | |
| π Reset Audio Stack | Stops mic, disconnects nodes, closes context, and reinitializes cleanly. |
| πͺͺ Telemetry Panel | Logs recent events, context state, and mic info for debugging. |