IT News: Digital Camera, OS, Laptop, Smartphone, Smart TV, Sound...

The Author's Project by Valeri N.Kravchuk
Сайт проверен Dr.Web
Меню сайта
  • Главная страница
  • Информация о сайте
  • Дневник
  • Каталог файлов
  • Обратная связь
  • Каталог сайтов
  • FAQ
  • Доска объявлений
  • Форум
  • Фотоальбом
  • Категории раздела
    Автомобильные гаджеты, ремонт... [220]
    Безопасность IT [484]
    Блоки питания, Power Banks, зарядки... [490]
    Видеорегистраторы [220]
    Гаджеты для спорта и здоровья... [190]
    Гаджеты, аксессуары... [625]
    Измерительная техника, инструменты [449]
    Накопители данных [226]
    Нетбуки, Ноутбуки, Ультрабуки [679]
    Мультиварки, блендеры и не только... [158]
    Планшеты [758]
    Радар-детекторы [26]
    Роботы-пылесосы [37]
    Своими руками [356]
    Сети, сетевые технологии, оборудование... [269]
    Смартфоны [4966]
    Фотокамеры, объективы, искусство фотографии.. [543]
    Умный дом [47]
    Электронные книги [96]
    CB, LPD, PMR- связь... [169]
    DECT, IP-телефоны [18]
    Drones, boats, cars... [108]
    electric cars [35]
    GPS-навигаторы, трекеры... [51]
    Linux и не только [4380]
    mini computers и не только... [409]
    News IT, Это интересно, ликбез... [1113]
    Smart TV, UltraHD, приставки, проекторы... [414]
    Smart Watch [263]
    Sound: наушники, плееры, усилители... [616]
    Windows 10... [298]
    Windows 11 [28]
    Погода

  • Метеорадар БРЕСТ
  • Погода в Бресте от www.yr.no

    Яндекс.Погода БРЕСТ

  • Интересные ссылки

    COMPIZOMANIA

    Наш опрос
    Оцените мой сайт
    Всего ответов: 1339
    Статистика
    Анализ веб сайтов

    Яндекс.Метрика

    Рейтинг@Mail.ru Яндекс цитирования

    Russian America Top. Рейтинг ресурсов Русской Америки.

    eXTReMe Tracker

    Правильный CSS!


    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0
    Locations of visitors to this page
    Форма входа
    Главная » 2013 » Ноябрь » 26 » Cобираем звуковую станцию на базе Linux и MPD
    12:30
    Cобираем звуковую станцию на базе Linux и MPD

    Cобираем звуковую станцию на базе Linux и MPD




    В основе референсного аудиопроигрывателя Bryston BDP–2 стоимостью, на минуточку, 156 тысяч рублей лежит стандартная материнка с процессором
    Intel Atom и звуковой картой ESI Juli@ PCI. В качестве ОС для этого плеера разработчики выбрали Debian Linux. При наличии времени и желания можно
    собрать аналогичный цифровой источник из имеющегося железа, а с установкой нужного ПО и тонкой настройкой параметров системы тебе поможет эта статья.


    Введение


    Надо сказать, при создании BDP–2 инженеры из Bryston не сильно утруждали себя работой над программной частью: в поставке идет стоковый Debian 6.0.1,
    ядро версии 2.6.32 без поддержки realtime, предлагаются практически нетронутые настройки MPD, какие-либо оптимизации вовсе отсутствуют. Дело в том,
    что стандартные ядра имеют довольно большую задержку звука (11–20 мс), и это не позволяет работать со звуком профессионально. В realtime-системе эта
    задержка составляет ~1 мс, что уже считается отличным результатом. Поэтому первым делом мы скомпилируем ядро и звуковой сервер MPD с RT-патчами,
    чтобы максимально снизить задержки, затем настроим высокоточный таймер событий, выставим максимальные приоритеты для устройств и процессов,
    связанных с передачей аудио, а в завершение проведем тюнинг системных параметров. В общем, сделаем то, что должны были сделать hi-end’овцы.

    Будем рассматривать на примере древнего компа (материнка VIA Epia-MS, проц VIA C3 800 МГц, 512 Мб ОЗУ, звуковая карта ESI Juli@ PCI) и дистрибутива
    Debian 7.1, установленного по минимуму, то есть без графики и лишних сервисов. У тебя может быть другая звуковуха, только мы бы рекомендовали именно
    PCI/PCI-E, поскольку внешние карты USB могут некорректно работать с некоторыми материнскими платами.

    Подопытный комп, аналоговая часть ESI Juli@ демонтирована
    Подопытный комп, аналоговая часть ESI Juli@ демонтирована

    Для тестов использовался цифро-аналоговый преобразователь Nagra DAC
    Для тестов использовался цифро-аналоговый преобразователь Nagra DAC



    Компиляция RT-ядра


    RT-патч предназначен для поддержки реального времени в ядре, причем не «мягкого», а «жесткого». Разница заключается в том, что системы «мягкого»
    реального времени допускают небольшое превышение желаемого времени выполнения, в системах же «жесткого» реального времени подобное превышение
    недопустимо. Патч накладывается на ванильное ядро, поэтому ставим все необходимое для его компиляции и качаем ядро и патч:

    # apt-get install kernel-package libncurses5-dev fakeroot build-essential pkg-config wget gcc autoconf git
    # mkdir kernel && cd $_
    # wget bit.ly/149djQn
    # wget bit.ly/14rDBvQ
    

    Распаковываем и патчим:

    # tar xjf linux-3.8.13.tar.bz2 && cd linux-3.8.13
    # bzcat ../patch-3.8.13-rt11.patch.bz2 | patch -p1
    

    Затем в menuconfig/nconfig включаем опцию Processor type and features -> Preemption Model -> Fully Preemptible Kernel (RT) и собираем ядро:

    # CONCURENCY_LEVEL=3 fakeroot make-kpkg --initrd --append-to-version=-rt kernel_image kernel_headers
    

    Вместо CONCURENCY_LEVEL=3 можешь поставить свое число, в зависимости от количества ядер процессора + 1.
    Устанавливаем и перезагружаемся:

    # dpkg -i ../*.deb
    # reboot
    

    Выбор нужной опции ядра
    Выбор нужной опции ядра


    Подготовка MPD


    Для начала — что это такое? Зачем нужен еще один плеер, если их и так предостаточно? Собственно, MPD — демон с клиент-серверной архитектурой,
    что открывает довольно любопытные возможности, а именно:

    • в отличие от множества других графических плееров, он прекрасно обходится без иксов, так что, если они упали или вообще отсутствуют на компе,
    • музыка все равно будет играть;
    • это клиент-серверное приложение — при желании им можно управлять из графического интерфейса;
    • MPD мало того что клиент-серверный — он еще и сетевой! Следовательно, его можно поставить на безголовый сервер и спокойно рулить им хоть с
    • нетбука, хоть с другого компа, хоть со смартфона или планшета (iOS/Android).


    Сам же MPD поддерживает множество возможностей, в том числе поддержку FLAC, ALAC, WAV, MP3, OGG, потокового воспроизведения аудио, gapless playback
    (воспроизведение без пауз)… всего не перечислишь.
    Исходники берем с официального cайта (по указанным ниже причинам необходима версия 0.17.1), затем ставим необходимые зависимости для сборки:

    # wget bit.ly/14wxPtj
    # tar xjvf mpd-0.17.1.tar.bz2
    # cd mpd-0.17.1
    # apt-get build-dep mpd
    # apt-get install libcdio-paranoia-dev
    

    После этого можно, в принципе, заходить в каталог и набирать команду autogen, а затем make… но мы торопиться не будем, поскольку в противном
    случае MPD будет скомпилирован с опциями по умолчанию, что нам может не подойти. Кроме того, придется применять RT-патч к самому MPD, который
    предназначен для улучшения качества звука путем управления приоритетами потоков (зря, что ли, RT-ядро компилировали?). Поскольку сам плеер
    развивается быстрее, чем патч, версия MPD должна быть именно 0.17.1. Скачиваем патч и накладываем его:

    # wget bit.ly/10kbsHY -O mpd-rtopt.diff.gz
    # gunzip -c mpd-rtopt.diff.gz | patch -p1
    

    Теперь уже можно выбирать опции сборки. Конечно, это дело вкуса, но мы собирали со следующими опциями:

    # ./autogen.sh CFLAGS="-O2 -mtune=`uname -m`" --enable-alsa --enable-rtopt --enable-id3 --enable-sqlite --enable-audiofile --enable-flac 
    --enable-cdio-paranoia --enable-lsr --disable-oss --disable-pulse --disable-jack --disable-ipv6 --disable-inotify # make && make install

    Рассмотрим некоторые опции подробнее:

    • --enable-alsa — включает поддержку ALSA;
    • --enable-rtopt — собственно, то, ради чего мы патчили;
    • --enable-id3 — поддержка тегов ID3;
    • --enable-sqlite — поддержка SQLite для внутренней БД MPD;
    • --enable-audiofile — поддержка WAV-файлов;
    • --enable-flac — поддержка FLAC — формата сжатия без потери качества;
    • --enable-cdio-paranoia — аудиоCD;
    • --enable-lsr — поддержка изменения частоты дискретизации на лету;
    • --disable-oss — поскольку мы будем использовать ALSA, OSS нам не понадобится;
    • --disable-pulse, --disable-jack — обертки вокруг ALSA нам тоже ни к чему;
    • --disable-ipv6 — если нет IPv6, зачем его включать?
    • --disable-inotify — для меньшего потребления ресурсов.


    А теперь, после успешной сборки и установки, давай перейдем к настройке аудиосистемы.


    Начальная настройка и тюнинг


    Приведем наиболее важные части файла mpd.conf:

    # Каталог с музыкой. Вложенные подкаталоги также поддерживаются
    music_directory "/var/mpd/music"
    # Плей-листы
    playlist_directory "/var/mpd/plists"
    # База данных с тегами
    db_file "/var/mpd/mpd_db"
    # Еще одна база данных — на этот раз для пользовательской информации о музыке
    sticker_file "/var/mpd/sticker_db"
    log_file "/var/log/mpd.log"
    # Настройка для ESI Juli@, подключенной по SPDIF (Toslink либо RCA) к внешнему ЦАП
    # Конфигурация аудиовывода — почти единственный многострочный параметр в `mpd.conf`. Возможно использование одновременно 
    нескольких аудиовыводов
    audio_output { # Указываем, что будем использовать ALSA type "alsa" # Название конфигурации name "ESI Julia SPDIF" # Используем цифровой выход (для получения информации о звуковой карте смотри вывод команды aplay -L) device "iec958:CARD=Juli,DEV=0" # Чтобы получить bit-perfect playback, запрещаем звуковой подсистеме автоматически выравнивать громкость, изменять частоту
    дискретизации, изменять количество каналов и выполнять преобразование разрядности аудиопотока
    replay_gain_handler "none" auto_resample "no" auto_channels "no" auto_format "no" # Поддержка Memory-mapping I/O use_mmap "yes" # Выставляем максимальный приоритет priority "FIFO:99" } ... # Размер внутреннего аудиобуфера в килобайтах audio_buffer_size "2048" # Заполнение аудиобуфера перед проигрыванием музыки в процентах buffer_before_play "50%" ... # Конфигурация realtime-опций MPD — второй многострочный параметр в данном файле realtime_option { memlock "yes" # Поддержка locks in-memory stack_reserve "1024" # Резервируем стек (в килобайтах) heap_reserve "10240" # и кучу (также в килобайтах) main_priority "OTHER:0" player_priority "FIFO:50" decoder_priority "FIFO:47" update_priority "OTHER:0" # Приоритеты потоков }

    По желанию (и если MPD был скомпилирован с соответствующей опцией) можно, например, включить потоковое аудио по HTTP — для последнего
    надо добавить следующие строчки в конфиг:

    audio_output {
     type "httpd"
     name "My HTTP Stream"
     # Используемый кодек, может быть vorbis или lame
     encoder "vorbis"
     port "8000"
     # quality "5.0"
     # Параметры quality и bitrate взаимоисключающие
     bitrate "128"
     # Формат аудиопотока (44,1 кГц, 16 бит, стерео)
     format "44100:16:2"
    }
    

    Конфигурационный файл mpd.conf
    Конфигурационный файл mpd.conf

    Также необходимо произвести тюнинг системы. Первым делом создаем файл /etc/security/limits.d/mpd со следующим содержанием:

    @audio - rtprio 99
    @audio - memlock unlimited
    @audio - nice -19
    

    Этот файл практически выключает ограничения приоритетов для демона. Далее необходимо изменить настройку HPET (который является генератором
    тактовой частоты и на многих довольно старых материнских платах по умолчанию не используется). Для этого правим строку в файле /etc/default/grub —
    заодно добавим опцию threadirqs, которая имеет отношение к RT-ядру и которая понадобится в дальнейшем:

    GRUB_CMDLINE_LINUX_DEFAULT="quiet clocksource=hpet threadirqs"
    

    HPET необходим для более точной (по времени) подачи сигнала на ЦАП. Казалось бы, разница в несколько микро- (а то и нано-) секунд при подаче
    потока битов настолько незначительна, что на нее не стоит обращать внимания… ан нет. Один бит задержался, два пришли раньше времени — и в
    высококлассной стереосистеме разница может быть ощутима человеческим ухом. С использованием HPET вероятность подобного сценария уменьшается.
    Давай также настроим некоторые параметры ядра через sysctl. Открой в своем любимом редакторе /etc/sysctl.conf и добавь в него следующие строчки:

    # Настройки виртуальной памяти, в частности стратегия распределения памяти и коэффициент подкачки
    vm.overcommit_memory = 2
    vm.overcommit_ratio = 50
    vm.swappiness = 10
    # Настройка максимально допустимой частоты HPET
    dev.hpet.max-user-freq = 2048
    

    В дополнение к последнему параметру необходимо изменить подобный же для rtc — но, поскольку он находится в sysfs, придется прописывать его в
    rc.local:

    echo 2048 > /sys/class/rtc/rtc0/max_user_freq
    

    Поставим пакет rtirq-init. Он содержит скрипт, увеличивающий приоритеты IRQ-потоков, связанных со звуковым оборудованием:

    # apt-get install rtirq-init
    

    После установки, возможно, потребуется отредактировать файл /etc/default/rtirq, а именно список IRQ-потоков, которые будут иметь повышенный
    приоритет:

    RTIRQ_NAME_LIST="rtc snd usb i8042"
    

    Ну и напоследок — если у тебя PCI’ная звуковая карта, то надо увеличить до максимума таймер времени ожидания (latency timer, задающий время,
    которое может занимать карта на шине, если к шине обращаются другие карты) для нее и, соответственно, немного увеличить его для других устройств
    PCI. Но сперва надо узнать PCI ID карты:

    # lspci | grep -i audio
    

    В моем случае ID был 01:09.0, следовательно, для увеличения latency timer набираем команды

    # setpci -v -d *:* latency_timer=b0
    # setpci -v -s 01:09.0 latency_timer=ff
    

    Эти команды ты тоже можешь прописать в rc.local.

    Интерфейс QMPDClient
    Интерфейс QMPDClient

    Sonata — еще один клиент для MPD
    Sonata — еще один клиент для MPD

    RT-патч превращает ядро Linux в полностью преемптивное (то есть с вытесняющей многозадачностью)

    Проверка работоспособности


    В общем-то, теперь можно запускать демон MPD. Перед запуском убедись, что музыка в соответствующем каталоге присутствует и создан каталог
    для плей-листов. Если же она разбросана по разным каталогам, то можно указывать на них симлинками. Команда для ручного запуска выглядит так:

    # mpd /etc/mpd.conf
    

    А как же проверить работоспособность? Дело в том, что даже самый простой консольный клиент в состав исходников MPD не входит, как и библиотека
    libmpdclient, поэтому можно либо скомпилировать их самостоятельно, либо установить соответствующий пакет. Поскольку клиент не требует наложения
    патчей, то особого смысла заморачиваться с компиляцией нет, а значит, ставим пакет:

    # apt-get install mpc
    

    Перед запуском рекомендуем посмотреть настройки микшера — в Debian 7.1 звук по умолчанию отключен. Обновляем базу данных MPD, добавляем всю
    музыку в плей-лист и запускаем воспроизведение:

    # mpc update --wait
    # mpc listall | mpc add
    # mpc play
    

    Если все нормально, то должна зазвучать музычка. В случае же потокового воспроизведения тебе надо еще проверить работу этого потока. Указываем
    адрес и порт, прописанный в конфиге. Для некоторых плееров необходимо также указывать файл mpd.ogg — например 192.168.1.5:8000/mpd.ogg.


    Удаляем лишнее


    Ну а теперь необходимо подчистить систему. В общем-то, ты можешь это сделать и сам, но есть некоторые тонкости — к примеру, пакеты, установленные
    с помощью apt-get build-dep, удалить не совсем просто. Итак, сначала мы отмечаем нужные для MPD пакеты, чтобы они не удалились следующей командой,
    а уже затем удаляем пакеты, относящиеся к сборке:

    # apt-mark manual libcdio-paranoia1 libavahi-glib1 libcurl3-gnutls libshout3
    # apt-get autoremove kernel-package libncurses5-dev fakeroot build-essential pkg-config wget gcc autoconf git
    # apt-get remove libcdio-paranoia-dev
    

    Затем выполняем следующую трехэтажную команду:

    # apt-get remove $(apt-cache showsrc "mpd" | grep Build-Depends | perl -p -e 's/(?:[\[(].+?[\])]|Build-Depends:|,|\|)//g')
    

    Команда эта выглядит пугающе, но делает вполне безобидную вещь — удаляет все пакеты, которые нужны были для сборки MPD.

    Удаляем также MTA — зачем нам почта на аудиостанции?

    # apt-get remove exim
    

    В общем-то, остальные бесполезные для аудиостанции пакеты ты можешь удалить и сам. Но если ты не уверен, понадобится ли тебе, к примеру, cron
    или syslog, — лучше их просто отключить из init-скриптов.

    Монтирование корневой ФС в режиме RO


    Если музыка у тебя будет находиться на ином накопителе, нежели система, имеет смысл при загрузке монтировать корневую ФС в режиме read only.
    Наиболее простой способ сделать это — прописать соответствующую опцию в /etc/fstab. Однако это потребует размещения всех изменяемых частей
    на других разделах либо удаления программ, которые эти данные генерируют, что иногда не совсем просто.
    Еще один способ заключается в использовании unionfs/aufs/overlayfs — эти файловые системы позволяют объединять в одной точке монтирования и
    RO, и RW — последняя может размещаться в оперативной памяти. Данная техника используется при создании Live-дистрибутивов. Подробнее о том,
    как это делать, можно узнать на страничке.

    Клиенты для MPD


    Есть ли для MPD другие клиенты? Конечно, есть. Более того, наличие множества клиентов — одна из особенностей этого демона. Некоторые из них опишем
    чуть подробнее.

    • Ncmpc — довольно простой клиент для MPD, основанный на ncurses. К сожалению, не очень удобно работать с плей-листами.
    • А вот еще один клиент на ncurses — ncmpcpp в этом смысле куда более приятен. В нем имеется поиск по тегам.
    • Клиент для xfce, xfmpc, отличается присущей этой среде минималистичностью и отсутствием лишних функций.
    • Еще один графический клиент, Sonata, позволяет, кроме всего прочего, загружать из интернета обложки альбомов и тексты песен и обладает
    •  большим количеством настроек. К примеру, он поддерживает работу с несколькими серверами MPD. Правда, вызывается окно настроек не слишком  интуитивно.
    • QMPDClient, как понятно из названия, является Qt-клиентом и на вид очень мощный плеер — но не особо впечатлил. Тем не менее отметим такую
    • возможность, как автоматическое удаление уже сыгранной композиции из плей-листа.


    Отдельно стоит упомянуть клиенты для коммуникаторов. Для Android в Google Play нашлись MPDroid и DroidMPD. Какой из них выбрать — дело вкуса; интерфейс
    второго показался несколько аляповатым. Для iPhone/iPod пользуется популярностью MPoD, для iPad есть специализированная версия — MPaD.

    Интерфейс MPDRoid довольно симпатичен
    Интерфейс MPDRoid довольно симпатичен

    MPoD: клиент для iPhone
    MPoD: клиент для iPhone



    Околоаудиофильские дистрибутивы


    Существует множество дистрибутивов для работы со звуком — от минималистичных, для работы исключительно в качестве аудиоцентра без монитора
    с управлением по сети, до навороченных, имеющих кучу секвенсоров и VST-плагинов. Все их, конечно, описать невозможно, но небольшой обзор
    отдельных не помешает. И начнем мы с Voyage MPD.

    Voyage MPD — встраиваемый дистрибутив на базе Debian 7.1. Последняя на момент написания статьи версия содержит MPD 0.18, ядро 3.8.13 с последними
    драйверами ALSA, веб-интерфейс на основе Meshlium, заявлена также поддержка DoP (DSD over PCM, упаковка DSD в фреймы PCM). Имеется Voyage
    MPD Starter Kit, позволяющий собрать аудиостанцию. Стоимость набора 149 долларов, но звуковая карта в комплект не входит.

    64 Studio — дистрибутив (опять же на Debian), позиционируется как заточенный под создание медиаконтента. Имеет следующие особенности: low-latency
    ядро, секвенсоры, такие как Rosegarden, Ardour — мультитрековый звуковой редактор… Однако дистрибутив не обновлялся с 2008 года.

    Ubuntu Studio — как говорится, без комментариев. По сути, тот же Ubuntu с XFCE, заточенный под создание мультимедийного контента. Ничем особенным
    не выделяется — разве только low-latency ядром да возможностью поставить на обычный Ubuntu метапакет и превратить в данный дистрибутив.

    AV Linux, несмотря на название, не антивирус под Linux, а еще один дистрибутив для работы с аудио и видео. Из особенностей можно назвать то, что он
    включает в себя не только свободное ПО, но и демоверсии проприетарных продуктов, таких как LinuxDSP и Mixbus.




    Итоги


    Linux вполне может использоваться как в качестве ПО для аудиоцентров, так и в качестве ПО для профессиональной работы со звуком. И если первый
    аспект еще более-менее обозрим (хотя и тут есть свои тонкости, как можно было увидеть из вышесказанного), то профессиональная работа со звуком
    настолько разнообразна, что и в рамках книги ее не охватишь. Статья, однако, такую цель не преследовала — мы хотели всего лишь показать, что на
    основе древнего компа можно собрать систему, качество звучания которой не будет уступать оборудованию стоимостью в тысячи долларов.

    Оптимальные настройки BIOS


    Приведем некоторые настройки BIOS, которые рекомендуется подправить для улучшения производительности:

    • Если имеется HyperThreading, лучше его отключить.
    • Video BIOS shadow тоже лучше отключить.
    • Для устройств PCI выключи опцию PCI Delay Transaction, поскольку она увеличивает задержки.
    • Отключи все ненужные встроенные устройства.



    Впервые опубликовано в журнале «Хакер» от 08/2013.

    http://habrahabr.ru/company/xakep/blog/203598/
    Категория: Linux и не только | Просмотров: 1102 | Добавил: laptop | Рейтинг: 5.0/2
    Всего комментариев: 0
    Добавлять комментарии могут только зарегистрированные пользователи.
    [ Регистрация | Вход ]
    Волк слабее льва и тигра, но в цирке волк не выступает!
    Волк слабее льва и тигра, но в цирке волк не выступает!
    Волк - единственный из зверей, который может пойти в бой на более сильного противника.
    Если же он проиграл бой, то до последнего вздоха смотрит в глаза противника. После этого умирает...

    Праздники сегодня

    Поиск
    Календарь
    Архив записей
    Друзья сайта
  • Официальный блог
  • JEEP - the best! Mercedes - the best! Автомобильный портал города Бреста: технические характеристики с фото, авторынок, автоспорт...
    Наша кнопка
    IT новости с моего лаптопа...

    Внимание!
    Администратор сайта laptop.ucoz.ru не несет ответственности за содержание рекламных объявлений. Все используемые на сайте зарегистрированные товарные знаки принадлежат своим законным владельцам! Используемая со сторонних источников информация публикуется с обязательными ссылками на эти источники.
    Copyright Valeri N.Kravchuk © 2007-2024