.TH "libpipewire-module-parametric-equalizer" 7 "1.4.2" "PipeWire" \" -*- nroff -*-
.ad l
.nh
.SH NAME
libpipewire-module-parametric-equalizer \- Parametric-Equalizer 
.SH DESCRIPTION
.PP
The \fCparametric-equalizer\fP module loads parametric equalizer configuration generated from the AutoEQ project or Squiglink\&.
.PP
Both the projects allow equalizing headphones or an in-ear monitor to a target curve\&. While these generate a file for parametric equalization for a given target, but this is not a format that can be directly given to filter chain module\&.
.PP
A popular example of the above being EQ'ing to the Harman target curve or EQ'ing one headphone/IEM to another\&.
.PP
For AutoEQ, see https://github.com/jaakkopasanen/AutoEq\&. For SquigLink, see https://squig.link/\&.
.PP
Parametric equalizer configuration generated from AutoEQ or Squiglink looks like below\&.
.PP
.PP
.nf
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
.fi
.PP
.PP
Fc, Gain and Q specify the frequency, gain and Q factor respectively\&. The fourth column can be one of PK, LSC or HSC specifying peaking, low shelf and high shelf filter respectively\&. More often than not only peaking filters are involved\&.
.PP
This module parses a configuration like above and loads the filter chain module with the above configuration translated to filter chain arguments\&.
.PP
.SH "MODULE NAME"
.PP
.PP
\fClibpipewire-module-parametric-equalizer\fP
.PP
.SH "MODULE OPTIONS"
.PP
.PP
Options specific to the behaviour of this module
.PP
.IP "\(bu" 2
\fCequalizer\&.filepath = <str>\fP path of the file with parametric EQ
.IP "\(bu" 2
\fCequalizer\&.description = <str>\fP: Name which will show up in
.IP "\(bu" 2
\fCaudio\&.channels = <int>\fP: Number of audio channels, default 2
.IP "\(bu" 2
\fCaudio\&.position = <str>\fP: Channel map, default '[FL, FR]'
.IP "\(bu" 2
\fCremote\&.name = <str>\fP: environment with remote name, default 'pipewire-0'
.IP "\(bu" 2
\fCcapture\&.props = {}\fP: properties passed to the input stream, default \fC{ media\&.class = 'Audio/Sink', node\&.name = 'effect_input\&.eq<number of nodes>' }\fP
.IP "\(bu" 2
\fCplayback\&.props = {}\fP: properties passed to the output stream, default \fC{ node\&.passive = true, node\&.name = 'effect_output\&.eq<number of nodes>' }\fP
.PP
.PP
.SH "GENERAL OPTIONS"
.PP
.PP
Options with well-known behaviour:
.PP
.IP "\(bu" 2
\fBaudio.channels\fP
.IP "\(bu" 2
\fBaudio.position\fP
.IP "\(bu" 2
\fBremote.name\fP
.PP
.PP
.SH "EXAMPLE CONFIGURATION"
.PP
.PP
.PP
.nf
# ~/\&.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"
        #}
    }
}
]
.fi
.PP
.PP
\fBSince\fP
.RS 4
1\&.0\&.6 
.RE
.PP