Skip to main content

Dynamic Range (DR) algorithm implementation in python

Project description

Dynamic Range (DR) meter ๐ŸŽง

Tests Coverage Status Docker

PyPI PyPI - Python Version PyPI - Downloads

Linter/Formatter: Ruff Code style: Black Dependency management: poetry

A Dynamic Range (DR) analyzer for audiofiles.

Asciicast of installing and using drmeter

The algorithm has been reverse-engineered using the available information and officially endorsed software to calcuate the DR value. The analysis results of drmeter are verified to be within a ยฑ0.5 absolute tolerance from the results produced by officially endorsed software (see #testing).

This project is in no way affiliated with the Pleasurize Music Foundation or its Dynamic Range Project.

Installation

The recommended method for installing drmeter is pipx:

pipx install drmeter

Any regular pip install drmeter will do, too. The drmeter requires Python 3.9+ to run.

To use drmeter without installation, consider the dockerized approach below

Usage

See drmeter --help for usage instructions. drmeter expects a single path to a file or a directory to analyze, and defaults to an "animated" progress display, emitting the results to stdout in the process.

$ drmeter 'Nobody There (Beautiful Scars).wav'
Analyzing Dynamic Range of Nobody There (Beautiful Scars).wav ...

โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
โ”‚ DR            Peak          RMS   Filename                           โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ DR12      -0.10 dB    -15.02 dB   Nobody There (Beautiful Scars).wav โ”‚
โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ

Using the --quiet/-q flag will silence most of the output and only print the calculated DR score to stdout:

$ drmeter 'Nobody There (Beautiful Scars).wav' -q
DR12

Alternatively drmeter supports a more detailed JSON-formatted output using the --output/-o json parameter, including both per-channel and totaled results. Using the --output parameter redirects the progress display to stderr, so that the formatted output can be piped to other applications or to file. If you do not require the progress display, it can be silenced using --quiet/-q here, too.

# Save a copy to file
$ drmeter -ojson -q 'Nobody There (Beautiful Scars).wav' | tee dr.json
{
  "filename": "/โ€ฆ/Nobody There (Beautiful Scars).wav",
  "dr_score": [
    11.93,
    11.63
  ],
  "peak_db": [
    โ€ฆ
  ]
}
# Parse JSON using jq
$ drmeter -ojson -q 'Nobody There (Beautiful Scars).wav' | jq '.[].overall_dr_score'
11.78

Dockerized

A container image of drmeter is available at ghcr.io/janw/drmeter with the latest tag pointing to the latest commit on the main branch. The following command (with the files you're looking to analyze in/below the current working directory) behaves very similarly to an installed version, accepting arguments directly as expected:

docker run --rm --tty --workdir /src -v "$PWD:/src" \
    ghcr.io/janw/drmeter --output json path/to/files

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

drmeter-0.3.1.tar.gz (10.7 kB view details)

Uploaded Source

Built Distribution

drmeter-0.3.1-py3-none-any.whl (11.0 kB view details)

Uploaded Python 3

File details

Details for the file drmeter-0.3.1.tar.gz.

File metadata

  • Download URL: drmeter-0.3.1.tar.gz
  • Upload date:
  • Size: 10.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for drmeter-0.3.1.tar.gz
Algorithm Hash digest
SHA256 b61b7c07b2719d18b8df49676f9eb888a6aee5c22ced5ae02ec50388ab76ac68
MD5 11c9c690f850bb939fdbfab23be91dc6
BLAKE2b-256 c62f86186a639c3f692f886a272d02d7dec9105dc790a19d5b8e7288bc37d4d8

See more details on using hashes here.

File details

Details for the file drmeter-0.3.1-py3-none-any.whl.

File metadata

  • Download URL: drmeter-0.3.1-py3-none-any.whl
  • Upload date:
  • Size: 11.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for drmeter-0.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 d8aa28508c39a3010c1855e2aa52d7c49f0be2a2d63740aa1c362f2796946eea
MD5 99267789899364e392a95101f6dfe9a5
BLAKE2b-256 28372a6f410206b255d67932d04744a4f7fc58f2fe711b501cc08ff640f9d705

See more details on using hashes here.

Supported by

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