Skip to content

Instantly share code, notes, and snippets.

@YellowOnion
Created December 10, 2021 23:11
  • Star 2 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save YellowOnion/a5cc07b6e70dadde5a35af0c349ae096 to your computer and use it in GitHub Desktop.
{
"context.exec": [],
"context.modules": [
{
"args": {},
"flags": [
"ifexists",
"nofail"
],
"name": "libpipewire-module-rtkit"
},
{
"name": "libpipewire-module-protocol-native"
},
{
"name": "libpipewire-module-profiler"
},
{
"name": "libpipewire-module-metadata"
},
{
"name": "libpipewire-module-spa-device-factory"
},
{
"name": "libpipewire-module-spa-node-factory"
},
{
"name": "libpipewire-module-client-node"
},
{
"name": "libpipewire-module-client-device"
},
{
"flags": [
"ifexists",
"nofail"
],
"name": "libpipewire-module-portal"
},
{
"args": {},
"name": "libpipewire-module-access"
},
{
"name": "libpipewire-module-adapter"
},
{
"name": "libpipewire-module-link-factory"
},
{
"name": "libpipewire-module-session-manager"
},
{ name = libpipewire-module-loopback
args = {
node.name = "alsa-remap.headphones"
node.description = "Raw headphones out"
capture.props = {
media.class = "Audio/Sink"
audio.position = [ FL FR ]
}
playback.props = {
audio.position = [ FL FR ]
node.target = "alsa_output.pci-0000_09_00.4.analog-surround-51"
stream.dont-remix = true
node.passive = true
}
}
},
{ name = libpipewire-module-loopback
args = {
node.name = "alsa-remap.speakers"
node.description = "Raw speaker out"
capture.props = {
media.class = "Audio/Sink"
audio.position = [ FL FR ]
}
playback.props = {
audio.position = [ RL RR ]
node.target = "alsa_output.pci-0000_09_00.4.analog-surround-51"
stream.dont-remix = true
node.passive = true
}
}
},
{ name = libpipewire-module-filter-chain
args = {
node.name = "effect_output.virtual-surround-5.1"
node.description = "Virtual Surround Sink"
media.name = "Virtual Surround Sink"
filter.graph = {
nodes = [
{
type = builtin
label = convolver
name = convFL_L
config = {
filename = ".hrir/eq.wav"
channel = 0
}
}
{
type = builtin
label = convolver
name = convFL_R
config = {
filename = ".hrir/eq.wav"
channel = 1
}
}
{
type = builtin
label = convolver
name = convFR_L
config = {
filename = ".hrir/eq.wav"
channel = 1
}
}
{
type = builtin
label = convolver
name = convFR_R
config = {
filename = ".hrir/eq.wav"
channel = 0
}
}
{
type = builtin
label = convolver
name = convFC
config = {
filename = ".hrir/eq.wav"
channel = 2
}
}
{
type = builtin
label = convolver
name = convLFE
config = {
filename = ".hrir/eq.wav"
channel = 3
}
}
{
type = builtin
label = convolver
name = convSL_L
config = {
filename = ".hrir/eq.wav"
channel = 4
}
}
{
type = builtin
label = convolver
name = convSL_R
config = {
filename = ".hrir/eq.wav"
channel = 5
}
}
{
type = builtin
label = convolver
name = convSR_L
config = {
filename = ".hrir/eq.wav"
channel = 5
}
}
{
type = builtin
label = convolver
name = convSR_R
config = {
filename = ".hrir/eq.wav"
channel = 4
}
}
{
type = builtin
label = mixer
name = mixL
}
{
type = builtin
label = mixer
name = mixR
}
{
type = builtin
label = copy
name = copyFL
}
{
type = builtin
label = copy
name = copyFR
}
{
type = builtin
label = copy
name = copySL
}
{
type = builtin
label = copy
name = copySR
}
]
links = [
{ output = "copyFL:Out" input = "convFL_L:In" }
{ output = "copyFL:Out" input = "convFL_R:In" }
{ output = "copyFR:Out" input = "convFR_R:In" }
{ output = "copyFR:Out" input = "convFR_L:In" }
{ output = "copySL:Out" input = "convSL_L:In" }
{ output = "copySL:Out" input = "convSL_R:In" }
{ output = "copySR:Out" input = "convSR_R:In" }
{ output = "copySR:Out" input = "convSR_L:In" }
{ output = "convFL_L:Out" input = "mixL:In 1" }
{ output = "convFR_L:Out" input = "mixL:In 2" }
{ output = "convFC:Out" input = "mixL:In 3" }
{ output = "convLFE:Out" input = "mixL:In 4" }
{ output = "convSL_L:Out" input = "mixL:In 5" }
{ output = "convSR_L:Out" input = "mixL:In 6" }
{ output = "convFL_R:Out" input = "mixR:In 1" }
{ output = "convFR_R:Out" input = "mixR:In 2" }
{ output = "convFC:Out" input = "mixR:In 3" }
{ output = "convLFE:Out" input = "mixR:In 4" }
{ output = "convSL_R:Out" input = "mixR:In 5" }
{ output = "convSR_R:Out" input = "mixR:In 6" }
]
inputs = [ "copyFL:In" "copyFR:In" "convFC:In" "convLFE:In" "copySL:In" "copySR:In" ]
outputs = [ "mixL:Out" "mixR:Out" ]
}
capture.props = {
media.class = Audio/Sink
audio.channels = 6
audio.position = [ FL FR FC LFE SL SR]
}
playback.props = {
node.target = "alsa-remap.headphones"
node.passive = true
audio.channels = 2
audio.position = [ FL FR ]
}
}
},
{ name = libpipewire-module-filter-chain
args = {
node.name = "effect_input.rnnoise"
node.description = "Noise Canceling source"
media.name = "Noise Canceling source"
filter.graph = {
nodes = [
{
type = ladspa
name = rnnoise
plugin = librnnoise_ladspa
label = noise_suppressor_stereo
control = {
"VAD Threshold (%)" 50.0
}
}
]
}
capture.props = {
node.passive = true
}
playback.props = {
media.class = Audio/Source
}
}
}
],
"context.objects": [
{
"args": {
"factory.name": "support.node.driver",
"node.group": "pipewire.dummy",
"node.name": "Dummy-Driver",
"priority.driver": 20000
},
"factory": "spa-node-factory"
},
{
"args": {
"factory.name": "support.node.driver",
"node.freewheel": true,
"node.group": "pipewire.freewheel",
"node.name": "Freewheel-Driver",
"priority.driver": 19000
},
"factory": "spa-node-factory"
}
],
"context.properties": {
"core.daemon": true,
"core.name": "pipewire-0",
"default.clock.min-quantum": 32,
"default.clock.quantum": 256,
"default.clock.max-quantum": 512,
"default.clock.rate": 48000,
"link.max-buffers": 16,
"vm.overrides": {
"default.clock.min-quantum": 1024
}
},
"context.spa-libs": {
"api.alsa.*": "alsa/libspa-alsa",
"api.bluez5.*": "bluez5/libspa-bluez5",
"api.jack.*": "jack/libspa-jack",
"api.libcamera.*": "libcamera/libspa-libcamera",
"api.v4l2.*": "v4l2/libspa-v4l2",
"api.vulkan.*": "vulkan/libspa-vulkan",
"audio.convert.*": "audioconvert/libspa-audioconvert",
"support.*": "support/libspa-support"
},
"stream.properties": {
"resample.quality": 10
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment