A web implementation of the SoundWave paper that detects motion using the Doppler effect with microphone and speakers.
Doppler is a JavaScript library that implements motion detection using the Doppler effect in web browsers. It enables touchless interaction by emitting an inaudible tone through speakers and detecting frequency shifts caused by moving objects using the microphone. This creates possibilities for gesture-based interfaces without requiring specialized hardware.
Web developers and researchers interested in creating touchless interfaces, experimenting with alternative input methods, or exploring the capabilities of browser audio APIs for motion sensing applications.
Doppler provides a pure JavaScript implementation of academic research (Microsoft's SoundWave paper) that makes motion detection accessible using standard web technologies. Unlike camera-based solutions, it works with just microphone and speakers, offers privacy advantages, and demonstrates sophisticated signal processing in the browser.
:wave: Motion detection using the doppler effect
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Directly implements Microsoft's SoundWave paper, providing an academically validated approach to motion detection using web technologies without hardware.
Uses only standard microphone and speakers, enabling touchless interactions without specialized cameras or sensors, as highlighted in the README.
Leverages Web Audio API and getUserMedia, ensuring compatibility with modern browsers that support these APIs, as noted for cross-platform use.
Has active derivatives like an Android version and Chrome extension, demonstrating real-world interest and practical applications beyond the core library.
Does not work on Firefox due to lack of echoCancellation: false support in getUserMedia, severely limiting browser coverage.
READEME admits missing features from the original paper, such as handling fast hand movements and using multiple sinusoids, reducing accuracy.
Cannot run on local filesystem; requires starting a server (e.g., with Python), adding complexity for quick prototyping or testing.
Only provides basic usage examples, with advanced adjustments and contributions needed for improvements, leaving developers to figure out details.