Мелкие доработки аудиоплеера

Запишу изменения, сделанные на плеере на базе mpd.

$ cat /etc/rc.local
#!/bin/bash

/sbin/hdparm -B 255 /dev/sda
echo 2048 > /sys/class/rtc/rtc0/max_user_freq
/usr/local/bin/ympd -u rain 1>/dev/null 2>/dev/null &

Первое – отключение постоянной парковки винта. Как-то пропустил этот момент, в итоге он нащелкал уже 150к парковок.

Второе – рекомендации из мануала по включению RT для плеера. Делается вместе с опцией в sysctl.conf.

Третье – запуск веб-морды для плеера – https://www.ympd.org

В /etc/sysctl.conf:

vm.dirty_writeback_centisecs = 100000
vm.dirty_expire_centisecs = 100000
kernel.dmesg_restrict=0
dev.hpet.max-user-freq = 2048

Первые два – более редкий сброс кэша на диск (/home в RW, так что пригодится).

Третье – включение dmesg для пользователя (бывает нужно, а в новых дистрах юзеру dmesg нельзя).

Ну и последнее – упомянутая выше опция для установки максимальной частоты HPET-таймера.

В /etc/default/grub

GRUB_TIMEOUT=2

GRUB_CMDLINE_LINUX=”radeon.dpm=1 consoleblank=0 net.ifnames=0 biosdevname=0 clocksource=hpet threadirqs”

Первое – чуть снизил таймаут для меню загрузчика. Все равно раз в сто лет нужно, а грузится сейчас чуть быстрее.

Второе – включение энергосбережение для встроенной в AMD C60 графики; удержание консоли включенной; “старые” имена для сетевых интерфейсов (мне как-то ближе eth0) и опции из мануала по realtime для mpd.

Поставил RT-ядро из репозитория, снес остальные.

Linux mpd 4.9.0-6-rt-amd64 #1 SMP PREEMPT RT Debian 4.9.82-1+deb9u3 (2018-03-02) x86_64 GNU/Linux

Проверка на RT:

$ ps H -q `pidof -s mpd` -o 'pid,tid,cls,rtprio,comm'
PID TID CLS RTPRIO COMMAND
614 614 TS - mpd
614 757 TS - io
614 758 TS - player
614 759 TS - decoder:flac
614 760 FF 50 output:USB SPDI

Вывод звука с FF-приоритетом (это реалтайм). Похоже, работает – т.е., похоже, mpd из дистра уже умеет RT и патчить не нужно. Хотя бы частично – так как не все опции из рекомендаций он понимал.

Добавил autofs. Винт почему-то часто отпадает, при этом плеер вообще не запускается, не пуская даже по SSH. Сейчас система гарантированно загрузится, а диск монтируется при обращении к нему. Если не сможет смонтироваться – то я хотя бы по SSH смогу попасть на машину и посмотреть, что там. Или выключить машину кнопкой на панели, так как это тоже раньше не работало при отвалах диска.

$ cat /etc/auto.master

/mnt /etc/auto.misc --timeout=600,--ghost

В /etc/auto.misc

disk -fstype=xfs,ro :UUID=e9a85596-587d-449f-bdbe-666ebd26b5ad

Линкуем /mnt/disk/ на /storage.

В/etc/mpd.conf

audio_buffer_size "131071"
buffer_before_play "1%"

replaygain "off"

audio_output {
type "alsa"
name "USB SPDIF"
device "hw:1" # optional

replay_gain_handler "none"
use_mmap "yes"
auto_resample "no"
auto_channels "no"
auto_format "no"
#priority "FIFO:99"
# mixer_type "software" # optional
# mixer_device "default" # optional
# mixer_control "PCM" # optional
# mixer_index "0" # optional
}

Буфер побольше – на 131072 плеер уже ругался и не запускался. Сейчас с диска вычитывается хороший кусок файла (если не весь) и диск больше не трогается. Процент буфера – начинать играть как можно раньше (меньше шансов выпадения звука).

Опции касательно replaygain и autoresample/-format/-channels – из рекомендаций по bit perfect. В принципе, особо ничего не должно было поменяться – replaygain и так не использовал, остальное работало как надо – но лишним не будет. Смысл опций в том, чтобы отключить любую возможность программной обработки (а значит и изменения) звукового потока. Пусть играет именно так, как записан.

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