pipewire: Add a Parametric equalizer using filter-chain

EQ Preset used is from Oratory1990 with Harman target and worn
earpads.

https://old.reddit.com/r/oratory1990/wiki/index/list_of_presets
https://www.dropbox.com/s/mejnlwpqm7uxtly/Beyerdynamic%20DT770%20%28old%20earpads%29.pdf?dl=0
This commit is contained in:
Sanchayan Maity 2024-02-02 13:36:40 +05:30
parent 90f94b527f
commit 42799da2d1
Signed by: sanchayanmaity
GPG Key ID: 6F6A0609C12038F3
2 changed files with 101 additions and 67 deletions

View File

@ -0,0 +1,101 @@
# 10 band sink equalizer for DT 770 80 Ohms
context.modules = [
{ name = libpipewire-module-filter-chain
args = {
node.description = "DT770 Equalizer Sink"
media.name = "DT770 Equalizer Sink"
filter.graph = {
nodes = [
{
type = builtin
name = eq_band_1
label = bq_highshelf
control = { "Freq" = 0 "Q" = 1.0 "Gain" = -2.6 }
}
{
type = builtin
name = eq_band_2
label = bq_peaking
control = { "Freq" = 45.0 "Q" = 0.2 "Gain" = -5.2 }
}
{
type = builtin
name = eq_band_3
label = bq_peaking
control = { "Freq" = 75.0 "Q" = 1.4 "Gain" = 2.0 }
}
{
type = builtin
name = eq_band_4
label = bq_lowshelf
control = { "Freq" = 105.0 "Q" = 0.71 "Gain" = 5.5 }
}
{
type = builtin
name = eq_band_5
label = bq_peaking
control = { "Freq" = 210.0 "Q" = 1.4 "Gain" = 4.0 }
}
{
type = builtin
name = eq_band_6
label = bq_peaking
control = { "Freq" = 2400.0 "Q" = 3.5 "Gain" = -2.3 }
}
{
type = builtin
name = eq_band_7
label = bq_peaking
control = { "Freq" = 3800.0 "Q" = 1.0 "Gain" = 3.0 }
}
{
type = builtin
name = eq_band_8
label = bq_peaking
control = { "Freq" = 4200.0 "Q" = 4.0 "Gain" = -1.3 }
}
{
type = builtin
name = eq_band_9
label = bq_peaking
control = { "Freq" = 6400.0 "Q" = 4.0 "Gain" = -6.2 }
}
{
type = builtin
name = eq_band_10
label = bq_peaking
control = { "Freq" = 8400.0 "Q" = 4.0 "Gain" = -1.4 }
}
{
type = builtin
name = eq_band_11
label = bq_highshelf
control = { "Freq" = 10000.0 "Q" = 0.71 "Gain" = -4.0 }
}
]
links = [
{ output = "eq_band_1:Out" input = "eq_band_2:In" }
{ output = "eq_band_2:Out" input = "eq_band_3:In" }
{ output = "eq_band_3:Out" input = "eq_band_4:In" }
{ output = "eq_band_4:Out" input = "eq_band_5:In" }
{ output = "eq_band_5:Out" input = "eq_band_6:In" }
{ output = "eq_band_6:Out" input = "eq_band_7:In" }
{ output = "eq_band_7:Out" input = "eq_band_8:In" }
{ output = "eq_band_8:Out" input = "eq_band_9:In" }
{ output = "eq_band_9:Out" input = "eq_band_10:In" }
{ output = "eq_band_10:Out" input = "eq_band_11:In" }
]
}
audio.channels = 2
audio.position = [ FL FR ]
capture.props = {
node.name = "dt770_effect_input.eq11"
media.class = Audio/Sink
}
playback.props = {
node.name = "dt770_effect_output.eq11"
node.passive = true
}
}
}
]

View File

@ -84,18 +84,11 @@ context.modules = [
# flags = [ ifexists nofail ]
#}
# The native communication protocol.
{ name = libpipewire-module-protocol-native }
# The profile module. Allows application to access profiler
# and performance data. It provides an interface that is used
# by pw-top and pw-profiler.
{ name = libpipewire-module-profiler }
# Allows applications to create metadata objects. It creates
# a factory for Metadata objects.
{ name = libpipewire-module-metadata }
# Creates a factory for making devices that run in the
# context of the PipeWire server.
{ name = libpipewire-module-spa-device-factory }
@ -104,15 +97,6 @@ context.modules = [
# context of the PipeWire server.
{ name = libpipewire-module-spa-node-factory }
# Allows creating nodes that run in the context of the
# client. Is used by all clients that want to provide
# data to PipeWire.
{ name = libpipewire-module-client-node }
# Allows creating devices that run in the context of the
# client. Is used by the session manager.
{ name = libpipewire-module-client-device }
# The portal module monitors the PID of the portal process
# and tags connections with the same PID as portal
# connections.
@ -188,55 +172,4 @@ context.objects = [
node.freewheel = true
}
}
# This creates a new Source node. It will have input ports
# that you can link, to provide audio for this source.
#{ factory = adapter
# args = {
# factory.name = support.null-audio-sink
# node.name = "my-mic"
# node.description = "Microphone"
# media.class = "Audio/Source/Virtual"
# audio.position = "FL,FR"
# }
#}
# This creates a single PCM source device for the given
# alsa device path hw:0. You can change source to sink
# to make a sink in the same way.
#{ factory = adapter
# args = {
# factory.name = api.alsa.pcm.source
# node.name = "alsa-source"
# node.description = "PCM Source"
# media.class = "Audio/Source"
# api.alsa.path = "hw:0"
# api.alsa.period-size = 1024
# api.alsa.headroom = 0
# api.alsa.disable-mmap = false
# api.alsa.disable-batch = false
# audio.format = "S16LE"
# audio.rate = 48000
# audio.channels = 2
# audio.position = "FL,FR"
# }
#}
]
context.exec = [
#{ path = <program-name> [ args = "<arguments>" ] }
#
# Execute the given program with arguments.
#
# You can optionally start the session manager here,
# but it is better to start it as a systemd service.
# Run the session manager with -h for options.
#
#{ path = "/usr/bin/pipewire-media-session" args = "" }
#
# You can optionally start the pulseaudio-server here as well
# but it is better to start it as a systemd service.
# It can be interesting to start another daemon here that listens
# on another address with the -a option (eg. -a tcp:4713).
#
#{ path = "/usr/bin/pipewire" args = "-c pipewire-pulse.conf" }
]