LIBPIPEWIRE-MODULE-PARAMETRIC-EQUALIZER(7)

✨ NAME ✨

libpipewire-module-parametric-equalizer β€” Parametric-Equalizer πŸŽ§πŸ’–

(this is page libpipewire-module-parametric-equalizer(7) from the Miscellaneous Information Manual, bestie, and it's giving very niche-but-important energy πŸ’…)


🌸 DESCRIPTION 🌸

okay so. the parametric-equalizer module loads parametric equalizer configuration that was generated from the AutoEQ project or Squiglink. that's the whole vibe. πŸ¦‹

both of those projects let you equalize headphones or an in-ear monitor to a target curve. and the way they do it is: they generate a file for parametric equalization for a given target β€” but plot twist 😭 β€” that file is not a format that can be directly given to the filter chain module. the pipeline does not accept it raw. nope.

a super popular example of this whole situation being EQ'ing to the Harman target curve, or EQ'ing one headphone/IEM to another. iconic behavior honestly.

so a parametric equalizer configuration generated from AutoEQ or Squiglink looks like this:

Preamp: -6.8 dB
Filter 1: ON PK Fc 21 Hz Gain 6.7 dB Q 1.100
Filter 2: ON PK Fc 85 Hz Gain 6.9 dB Q 3.000
Filter 3: ON PK Fc 110 Hz Gain -2.6 dB Q 2.700
Filter 4: ON PK Fc 210 Hz Gain 5.9 dB Q 2.100
Filter 5: ON PK Fc 710 Hz Gain -1.0 dB Q 0.600
Filter 6: ON PK Fc 1600 Hz Gain 2.3 dB Q 2.700

Fc, Gain and Q specify the frequency, gain and Q factor respectively. and the fourth column? it can be one of PK, LSC or HSC, which specify peaking, low shelf and high shelf filter respectively. more often than not though, only peaking filters are involved. no cap. πŸ™ˆ

and then β€” the main character moment β€” this module parses a configuration like the one above and loads the filter chain module with that configuration translated to filter chain arguments. so it's like... a translator bestie for your EQ. 🫢✨


πŸ‘‘ MODULE NAME πŸ‘‘

libpipewire-module-parametric-equalizer


πŸ’… MODULE OPTIONS πŸ’…

options specific to the behaviour of this module, babes:

  • equalizer.filepath = <str> β€” path of the file with parametric EQ πŸ“
  • equalizer.description = <str> β€” name which will show up in
  • audio.channels = <int> β€” number of audio channels, default 2
  • audio.position = <str> β€” channel map, default "[FL, FR]"
  • remote.name = <str> β€” environment with remote name, default "pipewire-0"
  • capture.props = {} β€” properties passed to the input stream, default { media.class = "Audio/Sink", node.name = "effect_input.eq<number of nodes>" }
  • playback.props = {} β€” properties passed to the output stream, default { node.passive = true, node.name = "effect_output.eq<number of nodes>" }

🌈 GENERAL OPTIONS 🌈

options with well-known behaviour (iykyk):

  • audio.channels
  • audio.layout
  • audio.position
  • remote.name

πŸŽ€ EXAMPLE CONFIGURATION πŸŽ€

# ~/.config/pipewire/pipewire.conf.d/my-parametric-equalizer.conf

context.modules = [
{   name = libpipewire-module-parametric-equalizer
    args = {
        #remote.name = "pipewire-0"
        #equalizer.filepath = "/a/b/EQ.txt"
        #equalizer.description = "Parametric EQ Sink"
        #audio.channels = 2
        #audio.position = [FL, FR]
        #capture.props = {
        #  node.name = "Parametric EQ input"
        #}
        #playback.props = {
        #  node.name = "Parametric EQ output"
        #}
    }
}
]

⭐ Since ⭐

1.0.6 β€” yes it's vintage-ish, it ate and left no crumbs πŸ’œ


ok that's the whole page bestie, go forth and equalize responsibly πŸ§šπŸ’–

and this lil love letter comes to you courtesy of PipeWire 1.6.11 β€” catch you on the next man page, mwah πŸ“πŸ’«

πŸ“¦ where this page comes from