Split UMC202HD inputs into mono channels

This commit is contained in:
jalr 2021-11-19 12:31:39 +00:00
parent 0a11febed6
commit d2b01eaf44
3 changed files with 55 additions and 11 deletions

View file

@ -204,7 +204,7 @@ in
#"Shift_R+Shift" = "exec ${pkgs.dbus}/bin/dbus-send --session --type=method_call --dest=net.sourceforge.mumble.mumble / net.sourceforge.mumble.Mumble.stopTalking";
"XF86AudioMute" = "exec pactl set-source-mute alsa_input.usb-BEHRINGER_UMC202HD_192k-00.analog-stereo-input toggle";
"XF86AudioMute" = "exec pactl set-source-mute UMC202HD_input1 toggle";
"${cfg.modifier}+l" = "exec ${pkgs.swaylock}/bin/swaylock -f -i ${wallpaper}";
};

View file

@ -1,5 +1,10 @@
{ config, lib, pkgs, ... }:
let
defaults = {
media-session = (builtins.fromJSON (builtins.readFile "${pkgs.pipewire-media-session}/nix-support/media-session.conf.json"));
};
in
lib.mkIf config.myConfig.gui.enable {
sound.enable = true;
hardware.pulseaudio.enable = false;
@ -25,4 +30,43 @@ lib.mkIf config.myConfig.gui.enable {
pavucontrol
pulseaudio # pacmd and pactl
];
# Split U-PHORIA inputs into mono channels
# https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/Virtual-Devices#behringer-umc404hd-micguitar-virtual-sources
services.pipewire.media-session.config.media-session."context.modules" = defaults.media-session."context.modules" ++ [
{
name = "libpipewire-module-loopback";
args = {
"node.name" = "UMC202HD_input1";
"node.description" = "UMC202HD Input 1";
"capture.props" = {
"audio.position" = [ "AUX0" ];
"stream.dont-remix" = true;
"node.target" = "alsa_input.usb-BEHRINGER_UMC202HD_192k-00.pro-input-0";
"node.passive" = true;
};
"playback.props" = {
"media.class" = "Audio/Source";
"audio.position" = [ "MONO" ];
};
};
}
{
name = "libpipewire-module-loopback";
args = {
"node.name" = "UMC202HD_input2";
"node.description" = "UMC202HD Input 2";
"capture.props" = {
"audio.position" = [ "AUX1" ];
"stream.dont-remix" = true;
"node.target" = "alsa_input.usb-BEHRINGER_UMC202HD_192k-00.pro-input-0";
"node.passive" = true;
};
"playback.props" = {
"media.class" = "Audio/Source";
"audio.position" = [ "MONO" ];
};
};
}
];
}

View file

@ -3,25 +3,25 @@ import serial
def run():
source_to_led_mapping = {
"UMC202HD_input1": 0,
"UMC202HD_input2": 1,
}
with pulsectl.Pulse("event-printer") as pulse:
def print_events(ev):
with pulsectl.Pulse("event-source-info") as pulse2:
source = pulse2.source_info(ev.index)
if source.name in [
"alsa_input.usb-BEHRINGER_UMC202HD_192k-00.analog-stereo",
"alsa_input.usb-BEHRINGER_UMC202HD_192k-00.analog-stereo-input",
]:
if source.name in source_to_led_mapping.keys():
muted = bool(source.mute)
led = source_to_led_mapping[source.name]
with serial.Serial(port="/dev/mute-indicator", baudrate=115200) as ser:
if muted:
ser.write("L0:32,0,0\n".encode())
ser.write("L1:32,0,0\n".encode())
ser.write("S\n".encode())
ser.write(f"L{led}:32,0,0\n".encode())
else:
ser.write("L0:0,32,0\n".encode())
ser.write("L1:0,32,0\n".encode())
ser.write("S\n".encode())
ser.write(f"L{led}:0,32,0\n".encode())
ser.write("S\n".encode())
pulse.event_mask_set("source")
pulse.event_callback_set(print_events)