Project Awesome project awesome

Audio and Music > OpenMeters

Fast, simple, and professional audio metering/visualization for Linux written in Rust.

Package 130 stars GitHub

OpenMeters

Preview

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
  • 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
  • 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

  1. You'll need a graphical Linux system with PipeWire installed and running, plus PipeWire's development package for your particular distribution.

  2. Ensure you have a working Rust toolchain. The recommended way is via rustup.

  3. Clone the repository:

    git clone https://github.com/httpsworldview/openmeters/
    cd openmeters
    
  4. Build and run the application in release mode:

    cargo build -r
    ./target/release/openmeters
    

    or 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 drawer
  • p: Pause/resume rendering.
  • q twice: 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 vertically
  • middle 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

Libraries used

License

OpenMeters is licensed under the GNU General Public License v3.0. See LICENSE for more details.

Back to Rust