Base utilities for working with the Umik-1 microphone in Python applications.
Project description
๐ค audio-tools โ Audio Measurement CLI
A modular Python CLI for real-time audio measurement with USB microphones.
Supports UMIK-1, UMIK-2, Dayton UMM-6, Earthworks M23/M30, and other USB measurement mics. Auto-detects known devices, validates sample rate support, and applies per-unit calibration files.
๐ฆ Installation
APT โ Linux (Recommended for Raspberry Pi and Ubuntu)
BASE_URL="https://<your-endpoint>/audio-tools"
curl -fsSL "$BASE_URL/pubkey.gpg" | sudo gpg --dearmor -o /usr/share/keyrings/audio-tools.gpg
echo "deb [signed-by=/usr/share/keyrings/audio-tools.gpg] $BASE_URL noble main" \
| sudo tee /etc/apt/sources.list.d/audio-tools.list
sudo apt-get update && sudo apt-get install audio-tools
System dependencies (libportaudio2, libsndfile1, ffmpeg, libzmq3-dev) are installed automatically.
๐ Raspberry Pi 4B verified. Perfect headless acoustic monitoring box.
pip
pip install umik-base-app
Requires system libraries:
# Linux (Debian/Ubuntu)
sudo apt install libportaudio2 libsndfile1 ffmpeg libzmq3-dev -y
# macOS
brew install portaudio libsndfile zeromq ffmpeg
๐น๏ธ CLI Reference
audio-tools --<command> [options]
| Command | Description |
|---|---|
audio-tools --devices |
๐ List available audio input devices |
audio-tools --meter |
๐ Real-time SPL / LUFS / dBFS meter |
audio-tools --record |
๐๏ธ Calibrated audio recorder (WAV) |
audio-tools --calibrate |
๐ง Generate FIR filter from a calibration file |
audio-tools --analyze |
๐ฌ Analyze a WAV file and export metrics to CSV |
audio-tools --plot |
๐ Plot a metrics CSV as a chart |
audio-tools --batch |
๐ Batch-analyze a directory of WAV files |
audio-tools --enhance |
โจ Filter and enhance voice audio |
audio-tools --convert |
๐ Convert WAV recordings to OGG / MP3 / AAC |
Pass --help after any command for full options:
audio-tools --meter --help
audio-tools --convert --help
โก Quick Start
# 1. Find your microphone's device ID
audio-tools --devices
# 2. Run the SPL meter (system default mic)
audio-tools --meter
# 3. Run with UMIK-1 calibration file
audio-tools --meter --calibration-file "umik-1/7175488.txt"
# 4. Record calibrated audio
audio-tools --record --calibration-file "umik-1/7175488.txt" --output-dir recordings/
๐ Run Modes
Monolithic (Default)
Single process โ simplest for desktop and testing.
audio-tools --meter --calibration-file "umik-1/7175488.txt"
๐น Daemon Mode โ Unstoppable Ear
Run capture at high priority. Processing crashes never interrupt the audio stream.
# Terminal 1: high-priority capture process
sudo nice -n -20 audio-tools --meter --producer \
--calibration-file "umik-1/7175488.txt" --zmq-port 5555
# Terminal 2: connect consumer (safe to open/close/crash)
audio-tools --meter --consumer --zmq-host localhost --zmq-port 5555
๐ Distributed Mode โ Remote Sentry
Capture on a Raspberry Pi, visualize on your laptop.
# On the Raspberry Pi
audio-tools --meter --producer \
--calibration-file "umik-1/7175488.txt" --zmq-port 5555
# On your laptop
audio-tools --meter --consumer --zmq-host 192.168.1.50 --zmq-port 5555
๐๏ธ Calibration Files
Download the per-unit calibration file for your UMIK from miniDSP. Place it in your project:
umik-1/
โโโ 7175488.txt โ 0ยฐ on-axis. Use when pointing at a speaker.
โโโ 7175488_90deg.txt โ 90ยฐ ambient. Use when pointing at the ceiling.
โโโ 7175488_fir_*.npy โ [Generated] FIR filter cache (created on first run).
Generate or verify the FIR filter cache:
audio-tools --calibrate "umik-1/7175488.txt"
๐ฅ๏ธ Real-Time Dashboard (TUI)
Add --tui to get a live terminal dashboard instead of scrolling log output:
audio-tools --meter --tui
audio-tools --meter --tui --calibration-file "umik-1/7175488.txt"
Built with Textual:
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ audio-tools --meter Calibration: FULL (FIR) โ
โโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ dBFS โโโโโโโโโโโโ โ dBSPL 72.4 dB โ
โ -24.3 โโโโโโโโโโโโ โ LUFS -28.1 LUFS โ
โ โโโโโโโโโโโโ โ RMS 0.0241 โ
โ โ Flux 38.6 โ
โโโโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Mode: MONOLITHIC SR: 48000 Hz โ REC [R] Stop โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
| Key | Action |
|---|---|
R |
๐ด Toggle recording on/off |
Q |
โ Quit |
Press R to start recording โ audio is saved to recordings/ as a timestamped WAV. Press R again to stop; a notification pops with the filename.
๐ฌ Analysis & Visualization
# Analyze one file โ CSV
audio-tools --analyze "recording.wav" --calibration-file "umik-1/7175488.txt"
# Batch analyze a directory โ CSV per file
audio-tools --batch recordings/ --calibration-file "umik-1/7175488.txt"
# View chart (popup window)
audio-tools --plot "recording_metrics.csv"
# Save chart to PNG
audio-tools --plot "recording_metrics.csv" --save
๐ Convert Audio
Convert WAV recordings to share-friendly formats. Requires ffmpeg.
# OGG/Opus โ smallest, WhatsApp-compatible
audio-tools --convert recordings/ --format ogg
# Multiple formats in one pass
audio-tools --convert recordings/session.wav --format ogg mp3
# Output to a different directory
audio-tools --convert recordings/ --format ogg --out converted/
# Overwrite existing files
audio-tools --convert recordings/ --format ogg --overwrite
| Format | Use Case |
|---|---|
ogg |
๐ฑ WhatsApp voice notes (smallest) |
mp3 |
๐ต Universal |
aac |
๐ Apple-friendly (.m4a) |
๐ Related Projects
AI Acoustic Monitor โ adds ML sound classification (chainsaws, glass breaking, birds) on embedded devices, built on this framework: py-edge-ai-acoustic-monitoring-app
๐ ๏ธ For Developers
Building a custom app on this framework? See CONTRIBUTING.md.
Full technical documentation: docs/
- Architecture โ Producer-Consumer design, pipeline internals
- Audio Metrics โ RMS, LUFS, dBFS, dBSPL explained
- UMIK Series Guide โ Hardware-specific details
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file umik_base_app-0.5.tar.gz.
File metadata
- Download URL: umik_base_app-0.5.tar.gz
- Upload date:
- Size: 1.2 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.14 {"installer":{"name":"uv","version":"0.11.14","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b6ef499a4d44cb10ec5ecd73533d3fee4828dc33ffd327a8673310afbc7e4f01
|
|
| MD5 |
d2b9d7fd295c5353db84c938a2339d13
|
|
| BLAKE2b-256 |
afc40a6e7362ade7220050efc85baa22280a89b7b531734e83a4de518a16214e
|
File details
Details for the file umik_base_app-0.5-py3-none-any.whl.
File metadata
- Download URL: umik_base_app-0.5-py3-none-any.whl
- Upload date:
- Size: 79.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.14 {"installer":{"name":"uv","version":"0.11.14","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
27f636ac5a0fabad9c15508d84c155ae73c2e62209af0c9af7cae078968e24a6
|
|
| MD5 |
19692f38cecdb6320b5929990af871fd
|
|
| BLAKE2b-256 |
701cb16f1f310c02517992c9b52a5292f379cbb0ba38529a7f24170b32b32989
|