Pulseaudio с заблокированными каналами не так хорошо работает с медиаклавишами.

Вопрос или проблема

Я настроил 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 и используете определенные методы управления громкостью.

Возможные решения

  1. Скрипт для управления громкостью:
    Вы можете использовать кастомный скрипт для управления громкостью, который будет автоматически применяться к обоим каналам. Ваш скрипт, который установлен для изменения громкости на определенное количество процентов, будет хорошим решением. Он позволяет сначала получить текущий уровень громкости, а затем изменять его, таким образом поддерживая единство между каналами.

    Пример скрипта:

    #!/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

    Этот скрипт обеспечит синхронное изменение громкости.

  2. Использование pactl вместо amixer:
    Если вы хотите избежать проблем синхронизации, рекомендуется заменить команду amixer на pactl. Этот инструмент управляет PulseAudio более эффективно в некоторых случаях. Обновите ваши настройки, чтобы использовать pactl для изменения громкости, например:

    bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +2% && $refresh_i3status

    Это изменение позволит вам избежать проблем с несоответствием между каналами, так как pactl обрабатывает увеличение громкости на уровне всего устройства, что может помочь в корректной синхронизации.

  3. Клавиатурные сокращения:
    Для добавления удобства, вы можете назначить клавиатурные сокращения для выполнения скрипта, который изменяет громкость. Таким образом, при нажатии на клавиши, громкость будет изменяться синхронно, что устранит проблемы, с которыми вы сталкиваетесь.

Заключение

Ваша проблема с несинхронизацией каналов в PulseAudio при использовании медиа-клавиш, безусловно, требует внимания, но ее можно эффективно решить с помощью модификации скриптов и использования различных командных инструментов. Оптимизация громкости с помощью pactl и создание кастомизированного скрипта помогут поддерживать баланс между аудиоканалами, что существенно улучшит качество вашего звука.

Оцените материал
Добавить комментарий

Капча загружается...