LINUX.ORG.RU

Вывод звука на USB-ЦАП

 , ,


1

3

Добрый день, коллеги! Это моё первое сообщение, поэтому заранее прошу прощения за возможно глупые вопросы. Постараюсь максимально подробно описАть проблему. Задача следующая: выводить bitperfect на внешний ЦАП по USB с помощью ALSA и плеера MPD. Итак, в наличии Beaglebone Black. С официального сайта скачан последний релиз Debian 8.7 Jessie IoT (non-GUI) и записан на SD-карту. Далее накатил ядро. Вывод uname -a Linux beaglebone 4.9.38-armv7-rt-x4 #1 SMP PREEMPT RT Sun Jul 16 16:48:19 UTC 2017 armv7l GNU/Linux

Затем скачал MPD и применил к нему RT патч. Собрал MPD. Указал в конфиге девайс для вывода звука. Стартую MPD, всё работает, но звук выходит с жутким треском. Команда top показывает что прерывание, которое отвечает за USB (как я понял) начинает нещадно поедать ресурсы. Я не силён в Линуксе, но с командной строкой дружу. Прошу помощи у сообщества дабы разобраться самостоятельно не получается. Предвидя вопрос «а зачем?» отвечу, занимаюсь софтвенной частью цифрового транспорта для вывода качественного звука. Некоторый опыт уже имеется, но с такой проблемой столкнулся впервые. Заранее благодарен за помощь!

Скриншот

bitperfect на внешний ЦАП по USB с помощью ALSA

Что-то мне подсказывает, что тут оксюморон написан.

Скорее всего ты пытаешься в USB запихать непропихуемое, попробуй для начала увеличить буферы и уменьшить частоту дискретизации.

Dark_SavanT ★★★★★ ()
Ответ на: комментарий от Dark_SavanT

Я выше писал что некоторый опыт уже есть. Я уже это делал, но с обычным ядром не PREEMPT RT. Там загрузка процессора при воспроизведении файла flac 24/192 объёмом почти гигабайт не превышала 3-5%. Возможно дело в ядре, но чем ему так realtime не нравится?

guamoko ()

что за внешний ЦАП? правильно ли определяется? умеет ли даваемые на него частоты/битрейт?

применил к нему RT патч.

что за RT патч к MPD?

Далее накатил ядро.

а это зачем?

для начала бы проверить ЦАП в хомячковом дистре на x86 машине

kott ★★★★★ ()
Последнее исправление: kott (всего исправлений: 1)
Ответ на: комментарий от Dark_SavanT

Что-то мне подсказывает, что тут оксюморон написан.

почему это?

kott ★★★★★ ()
Ответ на: комментарий от kott

Смотрите, выше писал что с обычным ядром всё работает как надо, но мне этого не достаточно, хочу realtime. RT патч применил к MPD. ЦАП Schiit Bifrost. Определяется правильно. Играет PCM 24/192. Как только накатываю ядро PREEMPT RT, происходит то, что описано мной в первом посте.

guamoko ()
Ответ на: комментарий от guamoko

просто так хотите RT или есть достаточные причины?
лично мне такие причины для аудио-задач не известы

kott ★★★★★ ()
Ответ на: комментарий от kott

Цель, максимально снизить задержки вывода звука, чтобы ни один пакетик не пришёл раньше/позже. В случае с USB Audio это, к сожалению, имеет место быть. Опыт показывает, что на хорошем тракте это слышно! На обычном десктопе я это себе уже доказал. Теперь дело за ARM.

guamoko ()
Ответ на: комментарий от guamoko

RT означает, что вам за строго определённое время либо доставится пакет, либо нет

kott ★★★★★ ()
Ответ на: комментарий от kott

По ссылке сказано: This works only if the Linux kernel was compiled with CONFIG_RT_GROUP_SCHED disabled. Use the following command to check this option for your current kernel. У меня CONFIG_RT_GROUP_SCHED=y. Это значит что я должен пересобрать ядро с отключенной опцией CONFIG_RT_GROUP_SCHED? Подскажите, это можно сделать в menuconfig?

guamoko ()

Если вы не против, задам ещё вопрос по теме. Выполняю команду:

ps -eLo pid,cls,rtprio,pri,nice,cmd | grep -i «irq»

Он мне вываливает вот такую бороду:

3 FF 88 128 - [ksoftirqd/0] 52 FF 50 90 - [irq/33-48060000] 66 FF 50 90 - [irq/159-44e0b00] 67 FF 50 90 - [irq/189-tps6521] 68 FF 50 90 - [irq/160-4802a00] 801 FF 50 90 - [irq/182-4803800] 807 FF 50 90 - [irq/181-4803800] 813 FF 50 90 - [irq/184-4803c00] 814 FF 50 90 - [irq/183-4803c00] 1084 FF 90 130 - [irq/178-TI-am33]

Можете подсказать что есть что? Где например часы rtc?

guamoko ()
Ответ на: комментарий от guamoko

Подскажите, это можно сделать в menuconfig?

наверняка можно
но можно и руками в конфиге указать

3 FF 88 128 - [ksoftirqd/0] 52 FF 50 90 - [irq/33-48060000] 66 FF 50 90 - [irq/159-44e0b00] 67 FF 50 90 - [irq/189-tps6521] 68 FF 50 90 - [irq/160-4802a00] 801 FF 50 90 - [irq/182-4803800] 807 FF 50 90 - [irq/181-4803800] 813 FF 50 90 - [irq/184-4803c00] 814 FF 50 90 - [irq/183-4803c00] 1084 FF 90 130 - [irq/178-TI-am33]
Можете подсказать что есть что? Где например часы rtc?

не-а

скажем так, если вы верите в улучшение качества звука засчёт RT - то я вряд ли смогу помочь

kott ★★★★★ ()
Последнее исправление: kott (всего исправлений: 1)
Ответ на: комментарий от kott

Похоже ответ найден. Нужно пересобрать ядро с отключенным параметром CONFIG_MUSB_PIO_ONLY, а это для меня смерти подобно. Сколько не пытался собрать ядро из исходников, всегда возникала какая-то непонятная ошибка и я бросал. Попробую ещё раз, вдруг получится.

guamoko ()
Ответ на: комментарий от guamoko

а этот модуль не был уже до этого загружен?

kott ★★★★★ ()

Тебе RT нафиг не нужно. realtime для звукового потока (чтобы не прерывалось и т.п.) обеспечивает isochronous endpoint твоего USB-ЦАП. RT в ядре вообще никак не повлияет на поток из MPD в USB-ЦАП. Если вдруг MPD не успеет вовремя декодировать твой flac - то получишь затык что с RT ядром, что с обычным.

RT для звука нужен только в том случае, если ты собираешься компом обрабатывать аналоговый поток - ну например педальку для гитары делаешь или ещё что. Тут да, если повезёт с железкой (c beaglebone повезёт, кстати, в отличии от Core iX и всяких RPi) RT поможет гарантировать заведомо известную задержку сигнала между аналоговым входом и аналоговым выходом. В любых других случаях (воспроизведение, запись и всё сопутствующее) RT в ядре для звука совершенно бесполезен, потому как отсутствуют две временные точки необходимые для самого понятия «задержка».

Если ты идиот и веришь в бред о том, что RT «улучшает» звучание проигрываемого плеером флака - то проволочную вешалку тебе на шею и пендаля под зад в сторону аудиодрочерских сект.

Stanson ★★★★★ ()
Ответ на: комментарий от Stanson

Если ты идиот и веришь в бред о том, что RT «улучшает» звучание проигрываемого плеером флака - то проволочную вешалку тебе на шею и пендаля под зад в сторону аудиодрочерских сект.

Я не идиот! Я уже доказал себе и другим людям то, что даже увеличение приоритета демона CIFS меняет характер звука в лучшую сторону при воспроизведении по сети! Я молчу про rtc, ethernet...

guamoko ()
Ответ на: комментарий от kott

Поделись что-ли доказательствами.

Вэлкам в гости. Всё расскажу, покажу и послушаем музыку))

А провода-то провода серебряные ставил?

Если это не стёб, то дело обстоит следующим образом: в качестве источника используется Beaglebone Black, на GPIO навешан переходник, который квадратную шину I2S преобразует в S/PDIF, питание раздельное линейное на Бигль и переходник, далее цифровик из японской меди моножила 47Labs на ЦАП Schiit Bifrost (также сейчас гостит Metrum Musette), из него межблочники из монокристаллической меди (тоже моножила) на гибридник на лампе 6н23п, из него акустические 47Labs в авторские двухполосные мониторы. Вся эта «кухня» позволяет слышать(!) разницу с RT ядром и с выставленными экспериментальным путём приоритетами!

guamoko ()
Ответ на: комментарий от thesame

обычно здесь аудиофилов в макают головой в унитаз в прямом эфире

А это неважно! Я пришёл сюда из-за недостатка опыта. А где ещё набраться опыта, как не попросить помощи у знающих? Одними мануалами тут не обойдёшься.

guamoko ()
Ответ на: комментарий от guamoko

увеличение приоритета демона CIFS

TrueЪ слушают из RAM.

kott ★★★★★ ()
Ответ на: комментарий от guamoko

далее цифровик из японской меди моножила 47Labs на ЦАП Schiit Bifrost

Японская медь как-то влияет на прохождение цифрового сигнала?

Можете показать фото всей этой «кухни»?

nvl ★★ ()
Ответ на: комментарий от nvl

Японская медь как-то влияет на прохождение цифрового сигнала?

Вам реально интересно видеть весь мой тракт? Цифровик сделан из двух таких кабелей и обёрнут медным экраном. Всё это в термоусадке. Вам сделать фото кабеля?

Вот я не хотел тут обсуждать железяки. У меня был конкретный вопрос по Debian'у.

TrueЪ слушают из RAM.

Музыкальная коллекция у меня не большая. Всего на террабайт наберётся. Такой объём RAM мне недоступен.

guamoko ()
Ответ на: комментарий от guamoko

Вот я не хотел тут обсуждать железяки. У меня был конкретный вопрос по Debian'у

Ты на лоре, дядя. Тут на мегабайт полезной информации приходится гигабайт ахинеи.

anonymous ()
Ответ на: комментарий от guamoko

Музыкальная коллекция у меня не большая. Всего на террабайт наберётся. Такой объём RAM мне недоступен.

Facepalm. Трек (один) перед проигрыванием подгружается в оперативную память и дальше ты никак не зависишь ни от сети, ни от HDD. Объемов памяти современных компьютеров достаточно, чтобы даже треки DXD-разрешения успешно кэшировать.

I2S преобразует в S/PDIF

А зачем тут SPDIF? Или ЦАП другое не умеет?

YAR ★★★★★ ()
Ответ на: комментарий от YAR

Трек (один) перед проигрыванием подгружается в оперативную память и дальше ты никак не зависишь ни от сети, ни от HDD

Неверно! Трафик идёт постоянно. Кэш, в моём случае, 4Мб. А учитывая что некоторые рипы упакованы в один flac, весь он в память Бигля (512 Мб) не поместится.

А зачем тут SPDIF? Или ЦАП другое не умеет?

ЦАП умеет и по USB. НО! Цель была как раз собрать ядро PREEMPT RT и запустить воспроизведение по USB дабы сравнить с S/PDIF. Но (снова) см. мой первый пост.

guamoko ()
Ответ на: комментарий от guamoko

Неверно! Трафик идёт постоянно.

Так измени это.

Кэш, в моём случае, 4Мб

Вот и причина.

некоторые рипы упакованы в один flac

Сначала создают себе проблемы, загоняя все в один файл и эмулируя технологию 30-летней давности, а потом мужественно их решают, ага...


ЦАП умеет и по USB

Я к тому, что если можно подключиться по i2s, то подключайся по i2s.

YAR ★★★★★ ()
10 апреля 2018 г.

А AudiophileLinux не подойдет для Ваших целей? Там и RT ядро, и указанный ЦАП есть среди поддерживаемых. https://www.ap-linux.com

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.