Skip to main content

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 | sh or 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:

  1. The Ear (Producer): One thread does nothing but listen to the hardware and put audio into a queue.

  2. 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.
โ””โ”€โ”€ ...
  • .txt Files: These are the Source of Truth. Never delete them.
  • .npy Files: These are generated by the app for speed. You can safely delete them; the app will just regenerate them from the .txt file 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.

  1. 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"
  1. 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).

Sample Recording Metrics

๐Ÿ’ป How to Run

๐Ÿง Linux & ๐ŸŽ macOS

There are easy-to-use commands.

  1. List Devices:
umik-list-devices

Or specifically find the UMIK-1 ID: make get-umik-id

  1. Calibrate:
umik-calibrate "umik-1/700.txt"
  1. 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"
  1. 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:

๐Ÿ”— 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

umik_base_app-0.1.2.dev0.tar.gz (760.0 kB view details)

Uploaded Source

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

Hashes for umik_base_app-0.1.2.dev0.tar.gz
Algorithm Hash digest
SHA256 13b051b5f7852d51b347e726877d898d84ef1dfd0e76c10a8e921b3b9e644e11
MD5 e9056737b8cab29e6793a33cd869b2df
BLAKE2b-256 93f2ba377d6d96c1706f7f9e4c6abaa85484f33268bc0c6a461b914c97db930a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page