headroom/profiles/music.toml

73 lines
1.7 KiB
TOML

name = "music"
description = "Inter-track loudness leveling for music players. Even volume, dynamics mostly preserved."
# Slow AGC to a music-friendly target so tracks and albums sit at a
# consistent loudness without per-track volume fiddling. Long envelopes
# keep it musical — it leans on program loudness, not transients.
[agc]
enabled = true
target_lufs = -16.0
attack_ms = 3000.0
release_ms = 1500.0
silence_threshold_lufs = -70.0
max_boost_db = 12.0
max_cut_db = 12.0
# Very light, soft-knee RMS leveling. Ratio is barely above 1:1 — this
# is glue, not compression. Most material passes near-untouched.
[compressor]
enabled = true
detector = "rms"
threshold_db = -22.0
ratio = 1.5
knee_db = 10.0
attack_ms = 20.0
release_ms = 300.0
makeup_db = "auto"
rms_window_ms = 50.0
[limiter]
ceiling_dbtp = -0.3
lookahead_ms = 2.0
release_ms = 100.0
hold_ms = 5.0
oversample = 4
link = "stereo"
# Wide PSR cap preserves musical dynamics; the soft tier only catches
# the rare track that's wildly hotter than its neighbours.
[limiter.soft]
max_psr_db = 16.0
static_ceiling_dbtp = -5.0
attack_ms = 6.0
release_ms = 250.0
[meters]
publish_hz = 20.0
# IMPORTANT: unlike default/night, this profile routes music players
# THROUGH the processor — otherwise it would have nothing to act on.
[[rules]]
match = { process_binary = [
"spotify",
"mpv",
"vlc",
"strawberry",
"rhythmbox",
"clementine",
"audacious",
"mpd",
] }
route = "processed"
# DAWs are never leveled — they're trusted to set their own gain.
[[rules]]
match = { process_binary = ["ardour", "reaper", "qpwgraph", "carla", "bitwig-studio"] }
route = "bypass"
[[rules]]
match = { media_role = ["Music"] }
route = "processed"
[default_route]
route = "processed"