Многоканальный звук в Linux
Добавлено: 04 апр 2015, 17:24
Многоканальный звук в Linux
ВНИМАНИЕ!
На смену Пульсаудио пришел PipeWire.
Читаем об этом ниже.
В Linux возникает проблема с включением
многоканального звука на некоторых звуковых кодеках (например ALC662).
Проблема именно с выводом звука через линейный выход (система видит только HDMI).
Решается следующим образом (перед настройкой отключите внешние устройства: камера, наушники и т. д. Так же, обязательно удалите конфиги Пульсы ~/.config/pulse/ и перезагрузите ПК).
Команда aplay -l покажет все звуковые устройства в системе.
(Если aplay -l пишет ...no soundcards found... - значит в системе нет драйвера под этот звуковой кодек, случается и так, что его вообще не существует под Линукс, выход - дискретная звуковая карта).
Нас интересует аналоговый вход/выход:
card 0: PCH [HDA Intel PCH], device 0: ALC662 rev1 Analog [ALC662 rev1 Analog] (ПРИМЕР! И далее, на примере для звуковой системы 5.1)
Выполним в терминале: alsamixer,
нажав F6, вызовем меню выбора звуковой карты и
выбираем действующую - HDA Intel PCH
Смотрим колонку " Master", чтобы громкость была 100% и колонка "PCM" была включена. Так же включаем каналы Front , Surround , Center , LFE (активные отображены 00, не активные мм, переключаются латинской м). Двигаясь по настройкам вправо, в пункте "Channel" ставим 6 каналов.
(ВАЖНО! задать многоканальность именно в альсамиксере - иначе басов вы не услышите, сабвуфер будет работать как обычная колонка).
Если alsamixer не сохраняет настройки,
выполнить в терминале:
sudo alsactl store
После сохранения выйти из альсамиксера (Esc).
Перезагружаем систему. Можно воспользоваться командами чтобы перезапустить Пульсу ( pulseaudio -k и pulseaudio --start ), но часто демон отваливается, поэтому будем перезагружаться).
Необходимо установить Audacious (много плееров поющих, удобных, а нам нужен лучший по звуку).
Настроим Audacious, переходим и активируем - файл > настройка > звук > PulseAudio
разрядность - выше чем реальная разрядность аудио-карты поднимать не стоит - искажение, щелчки (cмотрим какие значения поддерживает оборудование:
aplay --device hw /dev/urandom —dump-hw-params).
переходим > модули > эффекты:
Вкл. > Кристаллизатор
Вкл. > Расширенное стерео
Для улучшения звука ставим в систему ladspa и pulseaudio-equalizer. Pulseaudio-equalizer глючная штука и чтобы настройки не сбрасывались, делаем следующее:
запускаем pulseaudio-equalizer, активируем EQ Enabled и в терминале выполняем:
kwrite /tmp/eqcommands.sh
копируем строку:
load-module module-ladspa-sink sink_name=ladspa_output.mbeq_1197.mbeq master=alsa_output.pci-0000_00_1b.0.analog-stereo plugin=mbeq_1197 label=mbeq control=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 (Пример)
(на аргумент "master" система ругается, поэтому ставим "sink_master" и обратите внимание! каналов звука 2 - analog-stereo) выполняем в терминале от рута:
kwrite /etc/pulse/default.pa
и в открывшийся документ добавляем ранее скопированную (исправленную) запись, сохраняем. Перезагружаемся.
Далее, в системных настройках звука переключаем профиль «Line Out» на «LadSpa».
Возможно,
ваша аудио-карта поддерживает воспроизведение сигнала с более высокой опорной частотой (чаще всего defaults - 48000Hz). Тогда, просто необходимо настроить alsa на работу в высокочастотном режиме.
Чтобы узнать частоту дискретизации пишем в терминале:
grep rate /proc/asound/card0/codec#
и жмем Tab
codec#0 codec#3
теперь, меняя номер кодека (codec#0/codec#3) находим нашу карту:
grep Codec /proc/asound/card0/codec#0
Codec: Realtek ALC662 rev1
grep Codec /proc/asound/card0/codec#3
Codec: Intel PantherPoint HDMI
Наш вариант - codec#0, выполняем:
grep rate /proc/asound/card0/codec#0
rates [0x160]: 44100 48000 96000
rates [0x160]: 44100 48000 96000
rates [0x160]: 44100 48000 96000
rates [0x160]: 44100 48000 96000
rates [0x160]: 44100 48000 96000
rates [0x160]: 44100 48000 96000
rates [0x160]: 44100 48000 96000
крайний столбец, это и есть максимальная частота дискретизации действующей карты.
От рута открываем alsa.conf:
kwrite /usr/share/alsa/alsa.conf
изменим строку:
defaults.pcm.dmix.rate 48000
на частоту нашей аудио-карты
defaults.pcm.dmix.rate 96000
ставим 6 каналов:
defaults.pcm.dmix.channels 6
По умолчанию и в pulse установлено минимальное качество звука, меняем на лучшее - от рута открываем daemon.conf:
kwrite /etc/pulse/daemon.conf
находим строки:
resample-method = speex-float-1
default-sample-format = s16le
заменим на:
resample-method = soxr-vhq
default-sample-format = float32le
здесь же, в демоне, пропишем частоту нашей аудио-карты:
default-sample-rate = 96000
alternate-sample-rate = 96000
раскомментируем (убрать точку с запятой), сохраняем и перезапустим pulse (перезагрузить систему).
С сабвуфером на кодеке ALC662 полная засада.
Чтобы он начал звучать в системных настройках
ставим два канала вывода звука (на 5.1 переключаем только когда многоканальный звук имеем в источнике).
В настройках Пульсы (daemon.conf) изменение каналов на 6, enable-remixing = yes и lfe-crossover-freq = 42 ни на что не влияют. 5.1 Пульса берет из заданных нами 6 каналов в альсмиксере.
Все возможные значения параметра resample-method можно узнать командой:
pulseaudio --dump-resample-methods
а узнать какие значения параметров сейчас установлены у PulseAudio:
pulseaudio --dump-conf
На смену Пульсаудио пришел PipeWire.
Системд-юнит сам запустит, настроит и сделает так, чтобы программы, которым требуется Пульса, взаимодействовали с PipeWire.
Да, Пульса выпилится (только настройки Альсы будут работать).
Что получаем от перехода на PipeWire?
Меньшую нагрузку на процессор.
Памяти жрет тоже меньше.
Латентность PipeWire значительно ниже чем у Пульсы.
Для установки нужны следующие пакеты:
pipewire
pipewire-alsa
pipewire-pulse
ну и Джек, если пользуетесь:
pipewire-jack
* Из улучшательств, можно повысить частоту дискретизации (/etc/pipewire/pipewire.conf):
default.clock.rate = 96000
"sample-format" по дефолту имеет значение "float32le".
И настроить Audacious:
Модуль вывода>Pulsefudio
Эффекты> Кристаллизатор
> Расширенное стерео
>Sox Ресемплер (выставить частоту
дискретизации вашей карты).
В системных настройках звука ставим два канала вывода звука (Analog Stereo).
Текущие настройки смотрим командой:
pactl info
Пробуем, сравниваем.
* конфигурационный файл Pipewire сменил адрес:
/usr/share/pipewire/pipewire.conf
ВНИМАНИЕ!
На смену Пульсаудио пришел PipeWire.
Читаем об этом ниже.
В Linux возникает проблема с включением
многоканального звука на некоторых звуковых кодеках (например ALC662).
Проблема именно с выводом звука через линейный выход (система видит только HDMI).
Решается следующим образом (перед настройкой отключите внешние устройства: камера, наушники и т. д. Так же, обязательно удалите конфиги Пульсы ~/.config/pulse/ и перезагрузите ПК).
Команда aplay -l покажет все звуковые устройства в системе.
(Если aplay -l пишет ...no soundcards found... - значит в системе нет драйвера под этот звуковой кодек, случается и так, что его вообще не существует под Линукс, выход - дискретная звуковая карта).
Нас интересует аналоговый вход/выход:
card 0: PCH [HDA Intel PCH], device 0: ALC662 rev1 Analog [ALC662 rev1 Analog] (ПРИМЕР! И далее, на примере для звуковой системы 5.1)
Выполним в терминале: alsamixer,
нажав F6, вызовем меню выбора звуковой карты и
выбираем действующую - HDA Intel PCH
Смотрим колонку " Master", чтобы громкость была 100% и колонка "PCM" была включена. Так же включаем каналы Front , Surround , Center , LFE (активные отображены 00, не активные мм, переключаются латинской м). Двигаясь по настройкам вправо, в пункте "Channel" ставим 6 каналов.
(ВАЖНО! задать многоканальность именно в альсамиксере - иначе басов вы не услышите, сабвуфер будет работать как обычная колонка).
Если alsamixer не сохраняет настройки,
выполнить в терминале:
sudo alsactl store
После сохранения выйти из альсамиксера (Esc).
Перезагружаем систему. Можно воспользоваться командами чтобы перезапустить Пульсу ( pulseaudio -k и pulseaudio --start ), но часто демон отваливается, поэтому будем перезагружаться).
Необходимо установить Audacious (много плееров поющих, удобных, а нам нужен лучший по звуку).
Настроим Audacious, переходим и активируем - файл > настройка > звук > PulseAudio
разрядность - выше чем реальная разрядность аудио-карты поднимать не стоит - искажение, щелчки (cмотрим какие значения поддерживает оборудование:
aplay --device hw /dev/urandom —dump-hw-params).
переходим > модули > эффекты:
Вкл. > Кристаллизатор
Вкл. > Расширенное стерео
Для улучшения звука ставим в систему ladspa и pulseaudio-equalizer. Pulseaudio-equalizer глючная штука и чтобы настройки не сбрасывались, делаем следующее:
запускаем pulseaudio-equalizer, активируем EQ Enabled и в терминале выполняем:
kwrite /tmp/eqcommands.sh
копируем строку:
load-module module-ladspa-sink sink_name=ladspa_output.mbeq_1197.mbeq master=alsa_output.pci-0000_00_1b.0.analog-stereo plugin=mbeq_1197 label=mbeq control=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 (Пример)
(на аргумент "master" система ругается, поэтому ставим "sink_master" и обратите внимание! каналов звука 2 - analog-stereo) выполняем в терминале от рута:
kwrite /etc/pulse/default.pa
и в открывшийся документ добавляем ранее скопированную (исправленную) запись, сохраняем. Перезагружаемся.
Далее, в системных настройках звука переключаем профиль «Line Out» на «LadSpa».
Возможно,
ваша аудио-карта поддерживает воспроизведение сигнала с более высокой опорной частотой (чаще всего defaults - 48000Hz). Тогда, просто необходимо настроить alsa на работу в высокочастотном режиме.
Чтобы узнать частоту дискретизации пишем в терминале:
grep rate /proc/asound/card0/codec#
и жмем Tab
codec#0 codec#3
теперь, меняя номер кодека (codec#0/codec#3) находим нашу карту:
grep Codec /proc/asound/card0/codec#0
Codec: Realtek ALC662 rev1
grep Codec /proc/asound/card0/codec#3
Codec: Intel PantherPoint HDMI
Наш вариант - codec#0, выполняем:
grep rate /proc/asound/card0/codec#0
rates [0x160]: 44100 48000 96000
rates [0x160]: 44100 48000 96000
rates [0x160]: 44100 48000 96000
rates [0x160]: 44100 48000 96000
rates [0x160]: 44100 48000 96000
rates [0x160]: 44100 48000 96000
rates [0x160]: 44100 48000 96000
крайний столбец, это и есть максимальная частота дискретизации действующей карты.
От рута открываем alsa.conf:
kwrite /usr/share/alsa/alsa.conf
изменим строку:
defaults.pcm.dmix.rate 48000
на частоту нашей аудио-карты
defaults.pcm.dmix.rate 96000
ставим 6 каналов:
defaults.pcm.dmix.channels 6
По умолчанию и в pulse установлено минимальное качество звука, меняем на лучшее - от рута открываем daemon.conf:
kwrite /etc/pulse/daemon.conf
находим строки:
resample-method = speex-float-1
default-sample-format = s16le
заменим на:
resample-method = soxr-vhq
default-sample-format = float32le
здесь же, в демоне, пропишем частоту нашей аудио-карты:
default-sample-rate = 96000
alternate-sample-rate = 96000
раскомментируем (убрать точку с запятой), сохраняем и перезапустим pulse (перезагрузить систему).
С сабвуфером на кодеке ALC662 полная засада.
Чтобы он начал звучать в системных настройках
ставим два канала вывода звука (на 5.1 переключаем только когда многоканальный звук имеем в источнике).
В настройках Пульсы (daemon.conf) изменение каналов на 6, enable-remixing = yes и lfe-crossover-freq = 42 ни на что не влияют. 5.1 Пульса берет из заданных нами 6 каналов в альсмиксере.
Все возможные значения параметра resample-method можно узнать командой:
pulseaudio --dump-resample-methods
а узнать какие значения параметров сейчас установлены у PulseAudio:
pulseaudio --dump-conf
На смену Пульсаудио пришел PipeWire.
Системд-юнит сам запустит, настроит и сделает так, чтобы программы, которым требуется Пульса, взаимодействовали с PipeWire.
Да, Пульса выпилится (только настройки Альсы будут работать).
Что получаем от перехода на PipeWire?
Меньшую нагрузку на процессор.
Памяти жрет тоже меньше.
Латентность PipeWire значительно ниже чем у Пульсы.
Для установки нужны следующие пакеты:
pipewire
pipewire-alsa
pipewire-pulse
ну и Джек, если пользуетесь:
pipewire-jack
* Из улучшательств, можно повысить частоту дискретизации (/etc/pipewire/pipewire.conf):
default.clock.rate = 96000
"sample-format" по дефолту имеет значение "float32le".
И настроить Audacious:
Модуль вывода>Pulsefudio
Эффекты> Кристаллизатор
> Расширенное стерео
>Sox Ресемплер (выставить частоту
дискретизации вашей карты).
В системных настройках звука ставим два канала вывода звука (Analog Stereo).
Текущие настройки смотрим командой:
pactl info
Пробуем, сравниваем.
* конфигурационный файл Pipewire сменил адрес:
/usr/share/pipewire/pipewire.conf