nixos-config/user/pipewire.nix
2024-05-31 11:41:21 -03:00

88 lines
2.7 KiB
Nix

{
config,
pkgs,
lib,
...
}:
{
# RNNoise is a noise supperssion neural network
# Here we use it as a plugin for pipewire to create a virtual microphone
config = {
home.file = {
".config/pipewire/pipewire.conf.d/99-input-denoising.conf".text = ''
context.modules = [
{ name = libpipewire-module-filter-chain
args = {
node.description = "Noise Canceling source"
media.name = "Noise Canceling source"
filter.graph = {
nodes = [
{
type = ladspa
name = rnnoise
plugin = ${pkgs.rnnoise-plugin}/lib/ladspa/librnnoise_ladspa.so
label = noise_suppressor_mono
control = {
"VAD Threshold (%)" 0.0
"VAD Grace Period (ms)" 0
"Retroactive VAD Grace (ms)" 0
}
}
]
}
capture.props = {
node.name = "capture.rnnoise_source"
node.passive = true
audio.rate = 48000
}
playback.props = {
node.name = "rnnoise_source"
media.class = Audio/Source
audio.rate = 48000
}
}
}
]
'';
};
xdg.configFile = {
"pipewire/pipewire.conf.d/99-rtp-sink.conf".text = ''
context.modules = [
{ name = libpipewire-module-rtp-sink
args = {
# Make this sink appear as an option in graphical interfaces
media.class = Audio/Sink
node.name = "rtp-sink"
node.description = "RTP"
#sap.ip = "224.0.0.56"
#sap.port = 9875
#source.ip = "0.0.0.0"
destination.ip = "192.168.0.102"
destination.port = 4010
#local.ifname = "eth0"
net.mtu = 320
#net.ttl = 1
#net.loop = false
#sess.name = "PipeWire RTP stream"
#audio.format = "S16BE"
audio.rate = 48000
audio.channels = 2
audio.position = [ FL FR ]
stream.props = {
node.name = "rtp-sink"
}
}
flags = [ nofail ]
}
]
'';
"systemd/user/pipewire.service.d/override.conf".text = ''
[Service]
ExecStartPre=/usr/bin/env sleep 10s
'';
};
};
}