nixos-private-dots/modules/nixos/sound.nix
2025-04-26 14:26:41 +03:00

76 lines
4.3 KiB
Nix
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{ # Настройки звука
hardware.pulseaudio.enable = false;
security.rtkit.enable = true; # Уменьшает задержку?
services.pipewire = {
enable = true;
alsa.enable = true;
alsa.support32Bit = true;
pulse.enable = true;
jack.enable = true;
wireplumber = {
enable = true;
# Запретить конкретному софту редактировать громкость микрофона
# В терминал `wpctl status`, найти нужное приложение в списке клиентов
# Потом `wpctl inspect номер-клиента | grep application.process.binary`
# `systemctl --user restart wireplumber pipewire pipewire-pulse`
# Доп ссылки по теме
# https://www.reddit.com/r/archlinux/comments/190dvl8/pipewirewayland_how_to_stop_applications_from/
# https://askubuntu.com/questions/749407/is-there-any-way-to-prevent-application-from-changing-volume-level-of-my-microph
# https://www.linux.org/threads/prevent-applications-from-changing-microphone-gain.41636/
# https://www.reddit.com/r/Ubuntu/comments/pvlm6r/how_to_disable_microphone_autoadjusting/
# https://wiki.archlinux.org/title/Firefox/Tweaks#Disable_WebRTC_audio_post_processing
# Если не помогает и сайты в браузере косячат, то есть такие решения:
# 1) Firefox или его форки - в браузерной строке пишешь и открываешь about:config
# Там делаешь media.getusermedia.agc_enabled false. Это Automatic Gain Control
# 2) Chromium или его форки - в браузерной строке пишешь и открываешь chrome://flags/
# Там ставишь Allow WebRTC to adjust the input volume = Disabled
# Я решил сделать вайтлист. В стоке я запрещаю всем редачить громкость микро в системе
# Лишь определённый софт может редачить громкость моего микрофона
extraScripts."99-stop-microphone-auto-adjust.lua" = ''
table.insert (default_access.rules,{
matches = {
{
{ "application.process.binary", "=", "*" }
}
},
default_permissions = "r-x",
})
table.insert (default_access.rules,{
matches = {
{
{ "application.process.binary", "=", ".pavucontrol-wrapped" }
},
{
{ "application.process.binary", "=", ".easyeffects-wrapped" }
}
},
default_permissions = "rwx",
})
'';
};
# Ниже настройки имеют формат "число - название"
# Число определяет приоритет настройки, а название описывает цель конфига
extraConfig.pipewire = {
"10-clock-rate" = {
"context.properties" = {
"default.clock.rate" = 48000;
"default.clock.allowed-rates" = [ 44100 48000 88200 96000 176400 192000 352800 384000 705600 768000 ];
};
};
# Ниже настройки для минимальной задержки в играх (например osu!stable через wine)
# quantum — устанавливает размер буфера (чем меньше значение, тем ниже задержка, но выше нагрузка на процессор).
# Можно посчитать теоретическую задержку в секундах, поделив quantum на rate (48/48000 будет 1мс)
# Если со звуком есть проблемы (щелчки, прерывания), попробуйте увеличить значение (64, 128, 256) или просто удалить эту настройку
# По умолчанию я закомментировал настройку, чтоб у людей не было проблем
# "92-low-latency" = {
# default.clock.quantum = 32; # default = 1024
# default.clock.min-quantum = 32; # default = 32
# default.clock.max-quantum = 32; # default = 2048
# };
};
};
}