Base utilities for working with the Umik-1 microphone in Python applications.
Project description
Welcome to the UMIK-1 Python Toolkit! ๐ค ๐
A friendly, modular framework for building audio applications with the MiniDSP UMIK-1.
Welcome! Whether you are an audio engineer, a hobbyist, or a developer looking to integrate high-quality audio measurement into your Python projects, this toolkit is for you. It provides a solid foundation (the "Base App") and a suite of ready-to-run tools to record, measure, and calibrate your microphone.
๐ What's Inside?
It's included several ready-made applications to get you started immediately:
- ๐ List Audio Devices: Scans your computer and lists all connected audio input devices to help you find the specific "Device ID".
- ๐ Get UMIK-1 ID: A helper utility that specifically hunts for a device named "UMIK-1" and prints its ID automatically.
- ๐ Calibrate: Reads the UMIK-1 unique calibration file and creates a digital filter to ensure your measurements are scientifically accurate.
- ๐๏ธ Recorder: A robust audio recorder that handles file names, directory creation, and buffering to save high-quality WAV files.
- ๐ Real Time Meter: A real-time digital meter that displays RMS, dBFS, LUFS (Loudness), and dBSPL (Sound Pressure Level).
INFO AudioConsumerThread [measured_at: 2025-12-14 10:59:17.672282] {'interval_s': '3.0000', 'rms': '0.0180', 'flux': '45.8031', 'dBFS': '-34.9183', 'LUFS': '-30.4443', 'dBSPL': '77.6267'} [audio-metrics]
๐ Getting Started
Prerequisites
- Python 3.12+
- uv (A fast Python tool manager. Install it via
curl -LsSf https://astral.sh/uv/install.sh | shor see their docs). - PiP
๐ฆ System Requirements (Audio Libraries)
Depending on your OS, you may need to install low-level audio drivers for pyaudio/sounddevice and soundfile to work.
๐ง Linux (Ubuntu/Debian)
You must install PortAudio and LibSndFile headers:
sudo apt update && sudo apt install libportaudio2 libsndfile1 ffmpeg -y
๐ macOS
If you encounter issues, install these libraries via Homebrew:
brew install portaudio libsndfile
๐ช Windows
Generally, Python wheels include the necessary binaries. If you have issues, ensure you have the latest Visual C++ Redistributable installed. For the UMIK-1, no special driver is needed (it uses standard USB Audio Class), but ASIO4ALL is an optional recommendation if you need low-latency exclusive access.
Installation
pip install umik-base-app
๐ Hardware Compatibility
This project is lightweight and efficient, making it perfect for embedded devices.
- Raspberry Pi 4 Model B: โ Verified. This toolkit is fully compatible with the Raspberry Pi 4 B. It serves as an excellent platform for building standalone, headless acoustic monitoring stations or portable measurement rigs.
๐๏ธ Under the Hood: The Base App
Curious how it works? This project isn't just a script; it's a multi-threaded framework designed for stability.
The "Producer-Consumer" Model: Instead of doing everything in one loop (which can cause audio glitches), the work has been split:
-
The Ear (Producer): One thread does nothing but listen to the hardware and put audio into a queue.
-
The Brain (Consumer): Another thread takes audio from the queue and processes it (calculates metrics, saves to disk, etc.).
graph LR
Mic((๐ค UMIK-1)) -->|Raw Audio| Producer[Listener Thread]
Producer -->|Buffer| Queue[Queue]
Queue -->|Audio| Consumer[Consumer Thread]
Consumer -->|Execute| Calibrator[Calibrator]
Calibrator -->|Clean Audio| Meter[Decibel Meter]
Calibrator -->|Clean Audio| Recorder[Recorder]
Want to dive deeper? Check out the Architecture Documentation.
๐ Understanding Calibration Files
The UMIK-1 is a measurement microphone, meaning it relies on a software file to correct its frequency response.
When you download your unique files from MiniDSP (using your serial number, e.g., 7175488), you will get .txt files. When you run this app, it calculates a digital filter and saves a "Cache" file (.npy) so it starts up instantly next time.
Here is what the file structure looks like:
./umik-1/
โโโ 7175488.txt <-- Standard Calibration (0ยฐ / On-Axis). Use this for pointing at speakers.
โโโ 7175488_90deg.txt <-- 90ยฐ Calibration. Use this for ambient room measurement (mic pointing at ceiling).
โโโ 7175488_fir_1024taps_48000hz.npy <-- [GENERATED] The calculated Filter Cache.
โโโ 7175488_fir_128taps_48000hz.npy <-- [GENERATED] Cache for a smaller filter size.
โโโ ...
.txtFiles: These are the Source of Truth. Never delete them..npyFiles: These are generated by the app for speed. You can safely delete them; the app will just regenerate them from the.txtfile on the next run.
๐ Analysis & Visualization
Beyond real-time monitoring, this toolkit provides powerful scripts to analyze recordings "offline". This is perfect for tuning trigger thresholds or generating reports for noise complaints.
- Single File Analysis Calculates RMS, Flux, dBFS, LUFS, and dBSPL (if calibrated) for a specific WAV file and saves it to CSV.
- Linux/Mac:
umik-metrics-analyzer "file.wav" --calibration-file "umik-1/700.txt"
- Visualization (Plotting) Turns your CSV data into professional-grade charts.
- View (Popup Window):
umik-metrics-plot "file.csv"
- **Save (To Image):**
```bash
umik-metrics-plot "file.csv" --output=
๐ Example Output
Below is an actual analysis generated by the toolkit. It shows the correlation between digital levels (dBFS/LUFS) and real-world pressure (dBSPL), along with the "Flux" index used to detect sudden noises (like hammering or dogs barking).
- View Raw Data: sample_recording_metrics.csv
- View High-Res Chart: sample_recording_metrics.png
๐ป How to Run
๐ง Linux & ๐ macOS
There are easy-to-use commands.
- List Devices:
umik-list-devices
Or specifically find the UMIK-1 ID: make get-umik-id
- Calibrate:
umik-calibrate "umik-1/700.txt"
- Run Real Time Meter:
# Default Mic
umik-real-time-meter --device-id <ID>
# UMIK-1 (Requires calibration file)
umik-real-time-meter --device-id <ID> --calibration-file "umik-1/700.txt"
- Record Audio:
umik-recorder --device-id <ID> --calibration-file "umik-1/700.txt" --output-dir "my_folder"
๐ Documentation & Resources
There are detailed guides to help you understand the science and tech:
- Architecture Overview: Deep dive into the threading, pipeline pattern, and code structure.
- Understanding Audio Metrics: Learn the math behind RMS, LUFS, and dBSPL. Great for students!
- The UMIK-1 Guide: Specific details about handling the UMIK-1 hardware.
๐ Related Projects
If you are interested in taking this further, check out my Edge AI Acoustic Monitor project (under development). It uses similar principles but adds Machine Learning to classify sounds (like detecting chainsaws or birds) on embedded devices! ๐ py-edge-ai-acoustic-monitor-app
๐ค Contributing
Found a bug? Want to add a feature? Check out the CONTRIBUTING.md to see how to run tests, lint your code, and submit Pull Requests.
Happy listening! ๐ง
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
File details
Details for the file umik_base_app-0.1.2.dev0.tar.gz.
File metadata
- Download URL: umik_base_app-0.1.2.dev0.tar.gz
- Upload date:
- Size: 760.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.9.18 {"installer":{"name":"uv","version":"0.9.18","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 |
13b051b5f7852d51b347e726877d898d84ef1dfd0e76c10a8e921b3b9e644e11
|
|
| MD5 |
e9056737b8cab29e6793a33cd869b2df
|
|
| BLAKE2b-256 |
93f2ba377d6d96c1706f7f9e4c6abaa85484f33268bc0c6a461b914c97db930a
|