Audio and Music > OpenMeters
Fast, simple, and professional audio metering/visualization for Linux written in Rust.
OpenMeters
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)
- Zero-crossing - 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
- ERB, log, and linear scales
- Adjustable color map
- spectrum analyzer
- A-weighting
- Peak frequency label
- Averaging modes
- Exponential
- Peak hold
- None
- ERB, 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
- Three visual modes:
- Lissajous - draws lines between samples
- Dot Cloud - plots samples as points
- Dot Cloud (Bands) - same as above, but colors dots based on frequency band
- 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
- Peak history overlay
- Adjustable color map
- Based on frequency
- Based on Loudness
- A single static color.
Installation
Arch Linux
Install the openmeters-git package via the AUR.
yay -S openmeters-git
Debian
Download the latest .deb package from
GitHub
Fedora
Download the latest .rpm package from
GitHub
Other Distributions
Tarballs are available under tagged releases, or you can build OpenMeters yourself from source. I cannot guarantee OpenMeters will work on every distribution, although it is quite distro-agnostic. If you have trouble getting things working, open an issue and I'll try to help.
Building from source
You'll need a graphical Linux system with PipeWire installed and running, plus PipeWire's development package for your particular distribution.
Ensure you have a working Rust toolchain. The recommended way is via rustup.
Clone the repository:
git clone https://github.com/httpsworldview/openmeters/ cd openmetersBuild and run the application in release mode:
cargo build -r ./target/release/openmetersor run it directly with Cargo:
cargo run -r
Packaging
See packaging/ for instructions on how to build
packages for Debian or Fedora.
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
settings.json. Please consider reporting any such bugs you encounter.
theming
- Themes are saved to
~/.config/openmeters/themes/as separate JSON files.
You can create and switch between themes in the "Theme" tab of the
configuration page. Saving a theme will refresh the list of available
themes, if any have spawned in the themes/ directory. The built-in
theme is read-only and cannot be overwritten or deleted. Feel free to
share your custom themes with others by sharing the corresponding JSON
files.
Contributing & Referencing
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.
If you would like to utilize some part of this project directly in your own application I would be more than happy to discuss the use of my code over E-mail; just reach out to me at httpworldview@gmail.com. You are free to draw inspiration from this project and the methods used herein (given you do not violate the terms of the GPL). It would be unfair to ask for attribution over ideas or implementations when this project has only been possible thanks to the thousands of researchers and open-source contributors who came before me.
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.
References
- MiniMeters (https://minimeters.app/) Inspired this entire project and does it better than I ever could. If you can, please support their work!
- EasyEffects (https://github.com/wwmm/easyeffects) Has been a great reference from the beginning. I specifically adopted their approach of using a virtual sink to capture audio as I loved the ability to enable and disable processing per-application.
- Ardura's Scrolloscope (https://github.com/ardura/Scrollscope)
- Tim Strasser's Oszilloskop (https://github.com/timstr/oszilloskop)
- Audacity (https://www.audacityteam.org/)
- (Per-module academic references can be found in the headers of some source files, namely our spectrogram.)
Libraries used
- iced_layershell and related crates
(https://github.com/waycrate/exwlshelleventloop)
- Special thanks to Decodetalkers for reviewing and merging my patches, and for maintaining such a useful library.
- 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.