OpenMeters is a fast and professional audio metering application for Linux, built with Rust and PipeWire.
Features
Checked items are implemented; unchecked items are planned. If you have ideas for more features, please feel free to open an issue or pull request!
General
- Bar mode
- Places the application at the top or bottom of the screen, spanning the entire width.
- (requires a Wayland compositor, unavailable on X11 as of now)
- Per-application capture
- Per-device capture
- Pop-out windows for individual visuals
- Adjustable background color & opacity
- Ability to enable/disable window decorations
Visuals
- loudness
- LUFS (ITU-R BS.1770-5)
- Short-term
- Momentary
- RMS
- Fast
- Slow
- True Peak
- LUFS (ITU-R BS.1770-5)
- oscilloscope
- Channel selection (L, R, L+R)
- Stable mode - Estimates the fundamental pitch of a given
signal and autocorrelates it against a reference signal to
find a stable trigger point.
- Ability to select the number of cycles to display (1-4)
- Free-run mode - A more traditional oscilloscope with a robust zero-crossing trigger. Suitable for simple signals, but will jitter with complex and rapidly changing material.
- spectrogram
- Spectral reassignment for exceptionally sharp time and frequency resolution.
- Note & frequency tool tips
- Piano roll overlay
- Ability to zoom & pan vertically
- Mel, log, and linear scales
- Adjustable color map
- spectrum analyzer
- A-weighting
- Peak frequency label
- Averaging modes
- Exponential
- Peak hold
- None
- Mel, log, and linear scales
- Bar mode
- Adjustable color map
- stereometer (X/Y vector scope, M/S goniometer)
- Correlation meter
- Single or multi-band
- Adjustable time window
- Two visual modes:
- Lissajous (draws lines between samples)
- Dot cloud (plots samples as points)
- Ability to flip L/R channels (for M/S monitoring)
- Adjustable scale (linear/exponential)
- Adjustable rotation
- Grid overlay
- Correlation meter
- waveform
- Channel selection (L, R, L+R)
- Adjustable scroll speed
- Adjustable color map
- Based on frequency
- Based on Loudness
- A single static color.
Installation
On Arch Linux (and Arch-based distributions)
Install the openmeters-git package via the AUR.
Building from source (Other distributions)
-
You'll need a graphical Linux system with PipeWire installed and running.
-
Ensure you have a working Rust toolchain. The recommended way is via rustup.
-
Clone the repository:
git clone https://github.com/httpsworldview/openmeters/ cd openmeters -
Build and run the application in release mode:
cargo build -r ./target/release/openmeters
or run it directly with Cargo:
Usage & key binds
Global
ctrl+shift+h: Show/hide global configuration drawerp: Pause/resume rendering.qtwice: Quit the application.ctrl+space: Move a hovered visual to a new window, or back to the main window.
Spectrogram
ctrl+scroll up/down: Zoom verticallymiddle click+drag: Pan vertically
Configuration
- Configurations are saved to
~/.config/openmeters/settings.json. - Invalid JSON will be ignored and default settings will be used instead. Your configuration file will not be overwritten unless you change settings in the GUI.
- The internal structure of this file will likely change often during development, so be aware that your settings may be reset inexplicably after updates. As this project grows, I will try to maintain backwards compatibility as much as possible, but no guarantees are made. The public API for settings is mostly stable as of now, so breaking changes should be infrequent.
- If you encounter a bug that causes OpenMeters to misbehave, the application settings can be reset by deleting this file. Please consider reporting any such bugs you encounter.
Contributing
Please see CONTRIBUTING.md for guidelines on how to contribute to this project, and how one might get started. No matter what you have to offer, I greatly appreciate you and your interest in contributing to this project. Every bit helps.
Credits
Thank you for checking out my shitty passion project. If you think OpenMeters is useful, please consider starring the repository and sharing it with others. I appreciate any and all criticism and feedback, so feel free to reach out to me.
Inspiration
- EasyEffects (https://github.com/wwmm/easyeffects) for being a great source of inspiration and for their excellent work in audio processing. Reading through their codebase taught me a lot about PipeWire.
- MiniMeters (https://minimeters.app/) for inspiring this entire project and for doing it better than I ever could. If you can, please support their work!
- Ardura's Scrolloscope (https://github.com/ardura/Scrollscope)
- Tim Strasser's Oszilloskop (https://github.com/timstr/oszilloskop)
- Audacity (https://www.audacityteam.org/)
Libraries used
- iced_layershell and related crates
(https://github.com/waycrate/exwlshelleventloop)
- Special thanks to Decodetalkers for reviewing and merging my patches.
- Iced (https://github.com/iced-rs/iced)
- RustFFT (https://github.com/ejmahler/RustFFT)
- RealFFT (https://github.com/HEnquist/realfft)
- wgpu (https://github.com/gfx-rs/wgpu)
License
OpenMeters is licensed under the GNU General Public License v3.0. See LICENSE for more details.
