Audio Ripple is an immersive audio-reactive visualizer for live performance, interactive installations, and creative experimentation.
It converts sound (or any excitation plug-in) into dynamic ripple waves that propagate across a 2-D plane.
| Feature | Details |
|---|---|
| 🔊 Real-time audio | Microphone / any sounddevice input |
| 🛠 Modular sources | Audio, synthetic tones, soon: video & heart-pulse |
| 🚀 GPU acceleration | Optional CuPy backend |
| 🎚 Live controls | Damping, speed, amplitude, decay, per-source sliders |
| 🖥 Qt / PyQtGraph GUI | Responsive, resizeable window |
| 🧩 Extensible | Add new sources by subclassing ExcitationSourceBase |
git clone https://github.com/<you>/audio-ripple.git
cd audio-ripple
### 2. Set-up environment
> Preferred (Pixi)
```bash
# Installs all deps from pixi.toml
pixi install
# Run the main app
pixi run python main.pyAlternative (pip)
python -m venv .venv
source .venv/bin/activate # or .venv\Scripts\activate on Windows
pip install -r requirements.txt # Generate from pixi.toml
python main.pyAdjust runtime settings (resolution, plane size, GPU use) in main.py.
| Slider | Effect |
|---|---|
| Damping | Energy loss per step |
| Decay α | Spatial fall-off of each source |
| Amplitude | Excitation strength (per-source) |
| Speed | Wave propagation speed (m/s) |
Additional sliders appear automatically for each custom source.
src/audioviz
├── audio_processing/
│ └── audio_processor.py
├── sources/ # <— plug-in exciters live here
│ ├── audio.py
│ ├── synthetic.py
│ ├── image_pulse.py # (WIP)
│ └── base.py
├── visualization/
│ ├── ripple_wave_visualizer.py
│ ├── spectrogram_visualizer.py
│ └── visualizer_base.py
└── utils/
├── audio_devices.py
└── signal_processing.py
main.py
Generate local API docs with pdoc:
PYTHONPATH=src pdoc audioviz --html --output-dir docs --force
xdg-open docs/audioviz/index.html # or `open` / `start` on macOS / WindowsWe love PRs!
See CONTRIBUTING.md for setup, coding style, and how to add new excitation sources (e.g., HeartPulseExcitation).
Place demo GIFs / MP4s in assets/ and embed them here. A phone-recorded clip is perfectly fine for now.
MIT — see LICENSE.txt.
- Add more excitation sources (e.g., video, heart pulse)
- Write CONTRIBUTING.md
- Clean
main.pyand*.yamlor structured configs.