У меня имеется компьютер на базе Kubuntu 14.04 64bit и звуковая usb карта Asus Xonar U7 с очень неплохими характеристиками. К карте подключены по аналогу бюджетные мониторы Behringer Ms40 и наушники Xiaomi HI-FI Headphones.
Мне захотелось от этого всего зоопарка качественно проигрывать lossless flac и играть в игрушки ;)
Разберем как это реализовать...
Начнем с ядра... Самые свежие ядра берем отсюда http://liquorix.net/
Установка ядра:
sudo -s
echo "deb http://liquorix.net/debian sid main" > /etc/apt/sources.list.d/liquorix.list
echo "deb-src http://liquorix.net/debian sid main" >> /etc/apt/sources.list.d/liquorix.list
apt-get update
apt-get install liquorix-keyring
apt-get install linux-image-liquorix-amd64 linux-headers-liquorix-amd64
Установка PulseAudio 8.0 с улучшенной поддержкой Xonar и ресемплера SoX:
с начал нужно поставить все зависимости для сборки пульсы (возможно придется еще что-то до устанавливать)
sudo apt-get build-dep pulseaudio && sudo apt-get install checkinstall libpulse-dev libsoxr-dev
Скачаем и соберем пульсу:
cd /tmp
wget http://www.freedesktop.org/software/pulseaudio/releases/pulseaudio-8.0.tar.xz
tar xf pulseaudio-8.0.tar.xz
cd pulseaudio-8.0
./configure --build=x86_64-linux-gnu --prefix=/usr --includedir="\${prefix}/include" --mandir="\${prefix}/share/man" --infodir="\${prefix}/share/info" --sysconfdir=/etc --localstatedir=/var --libexecdir="\${prefix}/lib/pulseaudio" --srcdir=. --enable-x11 --libdir=\${prefix}/lib/x86_64-linux-gnu --with-module-dir=\${prefix}/lib/pulse-8.0/modules
make && sudo make install
Сделаем нашу пульсу realtime:
sudo -s
echo "@pulse - rtprio 99" >> /etc/security/limits.conf
echo "@pulse - nice -20" >> /etc/security/limits.conf
usermod -a -G pulse user
где user - имя вашего пользователя
Настройка pulseaudio, у меня /etc/pulse/daemon.conf имеет такой вид:
allow-exit = yes
high-priority = yes
nice-level = -15
realtime-scheduling = yes
realtime-priority = 5
exit-idle-time = 0
scache-idle-time = 0
enable-remixing = yes
enable-lfe-remixing = yes
default-fragments = 8
default-fragment-size-msec = 5
resample-method = soxr-vhq
default-sample-format = s24le
default-sample-rate = 192000
alternate-sample-rate = 176400
default-sample-channels = 2
где resample-method - качество ресемплинга, за sox ресемплер хорошо написано тут. Если с soxr-vhq проблемы при паузе/проигровании видео, то замените на spleex-float-10
default-sample-rate и alternate-sample-rate - зависит от устройства.
default-fragments и default-fragment-size-msec напрямую влияет на задержку в играх: меньше значение -> меньше лаг.
В файле модулей пульсы /etc/pulse/default.pa находим строки и меняем
load-module module-device-restore restore_volume=false
load-module module-stream-restore restore_volume=false
load-module module-udev-detect use_ucm=0 tsched=0
load-module module-suspend-on-idle timeout=0
Настроем SDL:
sudo echo "export SDL_AUDIODRIVER=pulse" > /etc/profile.d/sdl.sh
Настроем OpenAL, правим файл /etc/openal/alsoft.conf :
sample-type = float32
frequency = 44100
drivers = pulse
Если у вас kde то вам удобней будет переключить kmix с пульсы на альсу
sudo echo "export KMIX_PULSEAUDIO_DISABLE=1" > /etc/profile.d/kmix.sh
Перегружаем машину...
После загрузки если все зделано верно запускаем pavucontrol, открываем вкладку "Устройства Вывода" и давим зеленую пимпочку на против Xonar U7 - "Set as fallback"
Теперь игры, фильмы, ютуб буду играть на порядок лучше чем раньше.. Но а как же lossless? Об этом дальше...
Для получения Hi-Fi Bit-Perfect звука из lossless аудио нам понадобится плеер DeaDBeeF. Скачиваем, устанавливаем и запускаем.
DeaDBeeF имеет гибкий, расширяемый плагинами интерфейс.
По умолчанию в настройке стоит вывод звука через pulseaudio, лучше выбрать плагин ALSA Output Plugin с выводом через Pulseaudio.
Встроенный в новую пульсу ресемпллер SoX очень и очень неплох, но если вам хочется совсем уж полнейший Bit-Perfect то, для этого выбираем модуль ALSA Output Plugin и в устройстве вывода выбираем Xonar U7 - direct hardware device without any conversion. Так же все галки должны быть сняты...
Далее идем в Воспроизведение и отключаем нормализацию громкости
И последнее идем в Расширения, находим Alsa output plugin, жмем настройку, снимаем галку с ресемплера и ставим вторую...
Все, можем запускать любые флаки от 16/44.1 и вплоть до 24/192. Это честный bit-perfect! Единственное при проигрывании не будут воспроизводится другие звуки с пульсы (от мессенжеров и тд). Пульса будет ждать до нажатия на стоп в плеере. На работу самих программ типа браузера это не повлияет. Просто в браузере (у меня Chrome) видео не будет запускаться до остановки проигрывания в DeaDBeef-е, но при этом будет кешироватся. Если у вас аудио система с микшированием 2-х и более каналов, то спокойно можете на второй кинуть встроенную звуковуху и в пульсе для месседжеров и тд указать её.
Второй минус при смене трека, если следующий трек имеет другое разрешение (например первый 24/48, а следующий 24/192), будет слышен щелчок - это звуковуха меняет режим. Но этого можно избежать слушая плейлист с одинаковыми разрешениями flac ;)
Такой способ актуален только на звуковых картах и ЦАПах с полным аппаратным перечнем частот семплинга. В U7 например 44.1K/48K/88.2K/96K/176.4K/192KHz @ 16bit/24bit, что охватывает весь популярный lossless контент. Если у вас нет хардверной поддержки например 176.4, то контент с таким разрешением уже без ресепленга не послушаешь :( Благо есть выбор ресеплеров: SoX - для перегонки самих фамйлов, на лету в DeaDBeeF в DSP имеется не плохой ресемплер, в плагине ALSA, да хоть в том же Pulseaudio... Выбирать вам. Я после некоторого времени использования прямого подключения к alsa вернулся на пульсу+ресемплер soxr-vhq, звук в 44100 звучит более "плавней" что ли....
Полезные ссылки:
SoX Resampler Plugin для DeaDBeeF на github: https://github.com/silentlexx/deadbeef_soxr
Компиляция (*-dev пакеты deadbeef и libsoxr должны быть установлены):
cd /tmp
git clone https://github.com/silentlexx/deadbeef_soxr.git
cd deadbeef_soxr/
./go
В настройках появится SoX Resempler
Lifehack 1:
Для бесшовного переключения между звуковыми картами в pulseaudio можно создать скриптик типа /usr/local/bin/pasetsink.sh
#!/bin/bash
CARD=$(pacmd list-cards | grep "alsa.card_name" | head -n$[$1+1] | tail -n1 | awk -F\" '{print $2}')
notify-send -i audio-card.png "Pulseaudio" "Вывод звука через $CARD"
pacmd set-default-sink $1
pacmd list-sink-inputs | grep index | while read line
do
pacmd move-sink-input `echo $line | cut -f2 -d' '` $1
done
где первым параметром номер карты из pavucontrol "Устройства Вывода", где первая это 0, вторая это 1 и тд.
notify-send нужно до установить sudo apt-get install libnotify-bin либо заменить на echo.
Эти скрипты можно повесить на хоткеи...
pasetsink.sh 1 в моем случае включает Xonar U7, pasetsink.sh 2 - Встроенная.
Lifehack 2:
Для отображения в виджете KDE ( STDOUT Plasmoid ) текущего состояния ЦАП создал скрипт ~/bin/dac.sh
#!/bin/bash
ALSAU=$(cat /proc/asound/U7/pcm0p/sub0/hw_params)
if echo $ALSAU | grep -q "closed"; then
echo "DAC N/A"
else
BIT=$(echo $ALSAU | awk '{print $4}'| awk -F_ '{print $1}' | sed s/S//)
RATE=$(echo $ALSAU | awk '{printf "%0.1f",$10/1000}' )
echo "DAC ${BIT}bit/${RATE}kHz "
fi
В настройках STDOUT Plasmoid указать путь к файлу и интервал обновления.
Надеюсь эта статья будет полезной... Пишите в комvентареах что в неё еще можно добавить.
4 комментария:
privet .. we love ffmpeg for win and android
on android
what would be a way & command
to say resize ALL videos in a folder (say mp4 WhatsApp videos) from 640 to 320
to save space?
and any alike software to do the same to all images?
and also reincode all voice notes?j to lower bit rate..
thank you!
- Andrei WhatsApp me at +1.718.974.4394 / nycles499 (at gmail.com)
resample-method = copy
Имеют ли смысл сейчас подобные настройки при выводе звука по usb или же по hdmi?
Например на Debian 10?
Отправить комментарий