| 1 | name = "music" |
| 2 | description = "Inter-track loudness leveling for music players. Even volume, dynamics mostly preserved." |
| 3 | |
| 4 | # slow agc to a music target; long envelopes, leans on program loudness not transients |
| 5 | [agc] |
| 6 | enabled = true |
| 7 | target_lufs = -16.0 |
| 8 | attack_ms = 3000.0 |
| 9 | release_ms = 1500.0 |
| 10 | silence_threshold_lufs = -70.0 |
| 11 | max_boost_db = 12.0 |
| 12 | max_cut_db = 12.0 |
| 13 | |
| 14 | # very light soft-knee rms; glue not compression |
| 15 | [compressor] |
| 16 | enabled = true |
| 17 | detector = "rms" |
| 18 | threshold_db = -22.0 |
| 19 | ratio = 1.5 |
| 20 | knee_db = 10.0 |
| 21 | attack_ms = 20.0 |
| 22 | release_ms = 300.0 |
| 23 | makeup_db = "auto" |
| 24 | rms_window_ms = 50.0 |
| 25 | |
| 26 | [limiter] |
| 27 | ceiling_dbtp = -0.3 |
| 28 | lookahead_ms = 2.0 |
| 29 | release_ms = 100.0 |
| 30 | hold_ms = 5.0 |
| 31 | oversample = 4 |
| 32 | link = "stereo" |
| 33 | |
| 34 | # wide psr cap preserves dynamics; soft tier only catches the rare hot track |
| 35 | [limiter.soft] |
| 36 | max_psr_db = 16.0 |
| 37 | static_ceiling_dbtp = -5.0 |
| 38 | attack_ms = 6.0 |
| 39 | release_ms = 250.0 |
| 40 | |
| 41 | [meters] |
| 42 | publish_hz = 20.0 |
| 43 | |
| 44 | # music players processed here (default/night bypass them) — else nothing to act on |
| 45 | [[rules]] |
| 46 | match = { process_binary = [ |
| 47 | "spotify", |
| 48 | "mpv", |
| 49 | "vlc", |
| 50 | "strawberry", |
| 51 | "rhythmbox", |
| 52 | "clementine", |
| 53 | "audacious", |
| 54 | "mpd", |
| 55 | ] } |
| 56 | route = "processed" |
| 57 | |
| 58 | # daws bypass — trusted to set their own gain |
| 59 | [[rules]] |
| 60 | match = { process_binary = ["ardour", "reaper", "qpwgraph", "carla", "bitwig-studio"] } |
| 61 | route = "bypass" |
| 62 | |
| 63 | [[rules]] |
| 64 | match = { media_role = ["Music"] } |
| 65 | route = "processed" |
| 66 | |
| 67 | [default_route] |
| 68 | route = "processed" |