Вопрос или проблема
Я настроил pulseaudio так, чтобы левый и правый каналы были связаны на выходном устройстве, но если я быстро меняю громкость с помощью медиа-клавиш, каналы теряют синхронизацию, оставляя один громче другого. Есть ли другой способ заставить каналы всегда быть на одинаковом уровне громкости?
Я не уверен, сработает ли это, но возможно, вы могли бы попробовать назначить горячую клавишу на те же клавиши для изменения громкости. Ниже команда, которая снижает громкость на 5%, вторая увеличивает ее на 5%, а третья переключает кнопку без звука.
amixer -D pulse sset Master 5%-
amixer -D pulse sset Master 5%+
amixer -D pulse sset Master toggle
Вот скрипт, который я написал для этого:
#!/bin/bash
vol=$( amixer -D pulse get Master | grep "Front Left:" | cut -d[ -f2 | cut -d% -f1)
#читаем аргумент
if test $# -ge 1 && let $1
then
incr=$1
else
incr="3"
echo "Увеличение громкости на $incr% (по умолчанию)."
fi
echo "Текущая громкость: $vol - устанавливаю на $(( $vol + $incr ))."
#установить звук на фиксированное значение и включить его
amixer -D pulse sset Master $(( $vol + $incr ))% unmute > /dev/null
Так что вместо amixer -D pulse sset Master 5%+
, вам нужно вызвать этот скрипт: вставьте текст выше в файл (например, /home/ваш_имя/volume
).
Затем вам просто нужно сделать его исполняемым (chmod 755 /home/ваш_имя/volume
) и вы можете заменить вашу предыдущую команду на эту: /home/ваш_имя/volume -5
(или +5, +3, -3…).
Это должно делать то же самое, только при этом включается звук, если он был отключен.
У меня была такая же проблема, и после нескольких исследований я изменил сочетание клавиш, чтобы использовать pactl
вместо amixer
, и с тех пор этого не происходило.
Для ясности я изменил эту строку в своей конфигурации:
#bindsym XF86AudioRaiseVolume exec --no-startup-id amixer set Master 2%+ && $refresh_i3status
на
bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +2% && $refresh_i3status
и то же самое для другой.
Ответ или решение
Проблема с синхронизацией каналов в PulseAudio при использовании медиа-клавиш
Введение
PulseAudio — это мощный сервер звука для Linux, который часто используется для управления аудиовыходами и микрофонами. Однако, в некоторых случаях, такие как ваша ситуация с заблокированными каналами, могут возникать проблемы, особенно когда вы используете медиа-клавиши для регулировки громкости. Это может приводить к расхождению в объеме между левым и правым каналами, что отрицательно сказывается на качестве звука.
Проблема
Вы описали ситуацию, когда у вас заблокированы левый и правый каналы, чтобы они работали синхронно. Однако, при быстром использовании медиа-клавиш для изменения громкости, происходит несинхронизация каналов. В результате один канал становится громче, а другой тише, что нарушает баланс звука. Это распространенная проблема, когда вы работаете с PulseAudio и используете определенные методы управления громкостью.
Возможные решения
-
Скрипт для управления громкостью:
Вы можете использовать кастомный скрипт для управления громкостью, который будет автоматически применяться к обоим каналам. Ваш скрипт, который установлен для изменения громкости на определенное количество процентов, будет хорошим решением. Он позволяет сначала получить текущий уровень громкости, а затем изменять его, таким образом поддерживая единство между каналами.Пример скрипта:
#!/bin/bash vol=$(amixer -D pulse get Master | grep "Front Left:" | cut -d[ -f2 | cut -d% -f1) if test $# -ge 1 && let $1 then incr=$1 else incr="3" echo "Увеличение громкости на $incr% (по умолчанию)." fi echo "Текущая громкость : $vol - установка на $(( $vol + $incr ))." amixer -D pulse sset Master $(( $vol + $incr ))% unmute > /dev/null
Сохраните этот скрипт в файл и сделайте его исполняемым. Например, можно использовать:
chmod 755 /home/yourname/volume
Этот скрипт обеспечит синхронное изменение громкости.
-
Использование
pactl
вместоamixer
:
Если вы хотите избежать проблем синхронизации, рекомендуется заменить командуamixer
наpactl
. Этот инструмент управляет PulseAudio более эффективно в некоторых случаях. Обновите ваши настройки, чтобы использоватьpactl
для изменения громкости, например:bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +2% && $refresh_i3status
Это изменение позволит вам избежать проблем с несоответствием между каналами, так как
pactl
обрабатывает увеличение громкости на уровне всего устройства, что может помочь в корректной синхронизации. -
Клавиатурные сокращения:
Для добавления удобства, вы можете назначить клавиатурные сокращения для выполнения скрипта, который изменяет громкость. Таким образом, при нажатии на клавиши, громкость будет изменяться синхронно, что устранит проблемы, с которыми вы сталкиваетесь.
Заключение
Ваша проблема с несинхронизацией каналов в PulseAudio при использовании медиа-клавиш, безусловно, требует внимания, но ее можно эффективно решить с помощью модификации скриптов и использования различных командных инструментов. Оптимизация громкости с помощью pactl
и создание кастомизированного скрипта помогут поддерживать баланс между аудиоканалами, что существенно улучшит качество вашего звука.