Pull to refresh

Настройка e-mu 0204 usb в ubuntu GNU/linux

Reading time 9 min
Views 39K
Пару дней назад купил я себе внешнюю звуковую карту e-mu 0204. Купил с рук, за 2 т.р. Владелец был счастлив, я то же. Оба думали, что надули друг друга. Стоит железка в магазине 4,5 т.р. Принес домой подрубил, звук сказочный. Но, обнаружился косяк. В непредсказуемые моменты времени слышны были тихие пощелкивания и перерывы звука. У меня отличные наушники ATH-SJ55. Соответствуют карточке по уровню, непонятно почему это вдруг началось. Разбираемся как исправить. Да, сразу отмечу, все эти проблемы описаны в инструкции!!! Так что весь ор вокруг карточки говорит лишь о том, что орущие просто ее не открывали. Инструкции у меня в комплекте не было, я в интернете ее позже нашел. Все настройки в статье все равно понадобятся.

Я конечно слышал о проблемах с картой и попробовал применить описанный в куче мест способ проигрывания звукового файла с тишиной что бы занять канал и вроде как щелчки должны исчезнуть так как «карта перестанет переходить в режим энергосбережения». Что я только не начитался, даже то, что ей питания не хватает и надо внешний usb хаб купить с отдельным блоком питания. Все это не помогло (хаб не пробовал, да и в позже прочитанной инструкции они прямо противопоказаны).
Залез в настройки pulseaudio. В железке есть аппаратный буфер, куда кладутся данные после оцифровки. Звуковой системе компа надо в него класть звук, вообще через него идет общение звуковухи и компа что бы звук не прерывался (туда то и надо смотреть).
Если на компе неверно настроены параметры работы с буфером, будут щелчки. Это я выяснил путем ковыряния настроек и чтения форумов с расчетом значения этих параметров. Второй из здесь описанных вариантов настройки возможно подойдет и для винды, так как есть сборка jackd для нее, кажется. Хотя в винде можно наверное и по другому настроить. На линуксе все проще. Сначала добавим себя в группу audio:
usermod -a -G audio theusername

Оно надо что бы добавить пользователя theusername в группу audio так как без этого сервер jackd и pulsaudio не сумеет выделять память и стартовать в режиме реального времени в случае настройки с ним. Далее настройки могут разниться.

Вариант первый, простой:



Я сломал всю башку прежде чем сумел настроить все это в линуксе и вообще понять в чем дело, сначала уже расстраиваться начал. Кстати, первым, попробуйте выбрать более простой ресемплер и больше ничего. Все проблемы с артефактами в звуке упираются в производительность компа и к звуковухе не имеют ровно никакого отношения. Самый простой способ сделать так что бы комп поспевал генерить звук это как раз сменить ресемплер на более простой. Хотя, что стоило производителю включить в комплект инструкцию? Может быть она и была, я с рук интерфейс брал. Тем, кто захочет настроить, смотреть в /etc/pulse/daemon.conf
#будет работать только если вы в группу audio себя добавили.Причем сначала стоит просто попробовать только этот параметр, высока #вероятность, что все просто заработает. 
realtime-scheduling = yes
#можно и другие значения попробовать
realtime-priority = 10
#запрещаем закрывать демон, если он не используется
allow-exit = no
exit-idle-time = -1
#тут можно и что то поменьше или получше, зависит от машины, у меня i7 четырех ядерный, он не заметит, а слабая машина ляжет
#причем если я ставил src-sinc-best-quality то требовались долгие манипуляции с настройками и все равно ничего толком не помогало
#то есть это главный параметр!
resample-method = src-sinc-medium-quality 
#битность общения с звуковухой
default-sample-format = s24le
#в пульсе ресамплинг проходит весь звук, так как источники имеют зачастую разную частоту дискретизации и по другому никак микшер не сделать
#я поставил максимум частоты
default-sample-rate = 192000
alternate-sample-rate = 192000
#Эти параметры можно крутить именно о их настройки написано на вышеприведенном форуме, но поставив более простой метод ресемплинга, мне это не понадобилось (в начале все же крутил, потом закомментировал)
;default-fragments = 4
;default-fragment-size-msec = 3


Еще возможно надо залазить в: /etc/pulse/default.pa
И там поставить:
load-module module-udev-detect use_ucm=0 tsched=0

вместо
load-module module-udev-detect use_ucm=0

После установки более простого метода ресемплера, мне эти настройки не понадобились. Сначала стоит попробовать без этого параметра, так как работать скорее всего будет и без него, зато без него нагрузка на процессор даже на самом лучшем ресемплере будет невысокой. Собственно низкой нагрузкой на процессор и хорош этот вариант настройки в целом. Вместе с tsched=0 все работает стабильнее, при этом надо понимать, что при этом параметре возрастет нагрузка на процессор от pulseaudio. Это, кстати, убьет все преимущества пульсы перед алсой, но настраивать алсу мне лень, а щелчки без пульсы те же.

Щелчки останутся только при старте компа (когда карта включается), небольшие, да еще при подключении очередного клиента к звуковухе. Описывать настройку pulseaudio для слабого компа я тут не стану, суть в том, что ресемплер надо попроще поставить и приоритет pulseaudio поднять. Нужно отметить, что этот метод настройки сильно зависит от производительности компа. Если у вас на процессоре плавает частота (ondemand планировщик) то иногда производительности может не хватать и будут артефакты в звуке. Есть и более интересный способ настройки, по моим наблюдениям он намного стабильнее и качественнее.

Вариант второй, кошерный:


В /etc/pulse/daemon.conf
#с этим методом спокойно и без косяков работает самый классный ресемплер
resample-method = src-sinc-best-quality 
default-sample-format = s24le
#в пульсе ресамплинг проходит весь звук, так как источники имеют зачастую разную частоту дискретизации и по другому никак микшер не сделать
#но я поставил максимум частоты
default-sample-rate = 192000
alternate-sample-rate = 192000

Остальное по умолчанию. Даже tsched=0 не ставим! Пользователям skype у которых он хрипит при старте, думаю то же это решение подойдет. Проблема в skype в том, что частота дискретизации файла, который он проигрывает на старте, не совпадает с частотой ресемплера, вот и хрипит и на многих карточках. Наша же карточка то претендует на начальный уровень профессиональных, так что вообще то логично, что она рассчитана на профессиональный софт. В общем, едем дальше.
Ставите jackd, в нем настраиваете количество выборок в буфере 1024 и количество периодов на буфер 2 (можно покрутить и другие варианты этих значений если щелкает, так как буфер настраивается в зависимости от конкретного компа и его возможностей). Минимальное количество выборок 128 для данной карты, а количество периодов на буфер 2, можно поэкспериментировать.
В зависимости о того запустите ли вы jackd в режиме реального времени или нет, буфер может быть разный. По сути это те же параметры буфера, что и в pulseaudio, только в их исходном виде, а не расчетные. Ориентироваться в верности можно на сообщения о рассинхронизации, их надо что бы было 0, хотя в режиме реального времени на этот и так не слишком надежный показатель ориентироваться вообще нельзя, остается просто на слух. Это в qjackctl в окне сообщений найдете, вкладка статус, ее то же надо установить, так же эти числа есть и в окне статуса в главной панели.
Так же обратите внимание на режим запуска jackd, в реальном времени или нет, стоит попробовать оба и посмотреть как будет вести себя звук под нагрузкой компа. Если выставите режим реального времени, не забудьте поставить для pulseaudio то же режим реального времени (в том же daemon.conf):
realtime-scheduling = yes
realtime-priority = 5

Только приоритет пульсы должен быть меньше чем у jackd. По умолчанию jackd запускается с приоритетом 10.
В общем окно настроек у меня выглядит так:
image
Обратите внимание на параметр «Тайм аут», если вас раздражают небольшие артефакты при повторном подключении клиентов (например если звука долго не было, а потом вы включили музыку), то можно там выставить время пока jackd будет держать канал. Например минуту. Это приведет к постоянной загрузке процессора, зато окажет тот же эффект, что и проигрывание файла с тишиной. Но, это если артефакты вообще останутся после настройки. Я сравнивал, встроенная карточка на моем ноуте работает точно так же, немного дергаясь при переключении мелодий в проигрывателе, что вполне логично, так просто слышится резкое прекращение звука или начало нового не с нулевой громкости (без fade in/out). Так что не стоит предъявлять невероятных требований там, где это не нужно.
Потом pulseaudio заставляете выводить через jackd звук, путем добавления команды, которая выполняется после старта jackd.
Команда
pacmd set-default-sink jack_out
Это то же в параметрах qjackctl задается. Теперь pulsaudio работает микшером и результат выводит в jackd, который напрямую льет звук в alsa драйвер и через него в железку.
В конечном итоге я просто взял qjackctl да поставил в автозагрузку, настроив все параметры в ней. В отличии от pulseaudio параметры работы с буфером понятны и расчетов не требуют, а так же очевидно влияют на работу.

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

UPD №1: Так же я крутил latency I/O, но вразумительных результатов не получил, помимо этого указав конкретно, что надо два канала вывода. Я подробно не лез, вроде бы latency I/O задает некоторый учет задержек внутри самой звуковухи, туда можно загнать и значительно большие значения. Но, это уже просто ковыряние настроек из любопытства. Оказалось, что хорошая звуковуха и наушники, имеют свои недостатки, я теперь слышу даже совсем мелкие косяки в звуке, а звуковая паранойя, заработанная за день разбирательств с настройками, приводит к тому, что непонятно, то ли это в самой исходной записи косяк, то ли буфер подкрутить. Хотя качество звука превосходное все время.

UPD №2: Нашел отличный обзор карточки. В нем есть параметры буферов и задержек для нее. Что может послужить основой для более точной настройки.
RightMark Audio Analyzer 6.2.3 PRO

Device: ASIO E-MU 0204 | USB

Features:
Input channels: 2
Output channels: 4
Input latency: 440
Output latency: 440
Min buffer size: 88
Max buffer size: 22000
Preferred buffer size: 440
Granularity: 44


Для сравнения

Device: ASIO E-MU 0202 | USB

Features:
Input channels: 2
Output channels: 2
Input latency: 2138
Output latency: 2714
Min buffer size: 384
Max buffer size: 96000
Preferred buffer size: 1920
Granularity: 192


Device: ASIO E-MU 0404 | USB

Features:
Input channels: 4
Output channels: 4
Input latency: 22083
Output latency: 22216
Min buffer size: 88
Max buffer size: 22000
Preferred buffer size: 22000
Granularity: 44


Обратите внимания на размеры буфера! Вот почему у 0202, 0404 проблем нет, а у 0204 есть! В случае с 0404 буфер такой же как у 0204, но она сообщает «Preferred buffer size: 22000» то есть сама говорит, по протоколу, что буфер надо пользовать на всю катушку сразу, потому настройка не требуется. Вот поэтому и требуется настройка 0204, на мой любительский взгляд, так как она говорит софту на компе «Preferred buffer size: 440». Но, опять же, зато гляньте на latancy, она зависит от параметров буфера, так что 0404 такую задержку имеет потому, что буфер 22000 предлагает, а предлагает она его для перестраховки, так как профи перенастроит по своему если надо. Настройка вполне себе приводит карту в отличное состояние. У производителей других карт (и этой серии в том числе) расчет был вероятно такой «выставим буфер на максимум, если задержки пользователь не заметит, отлично, зато буфера хватит, если заметит, сам знает где настроить, раз заметил». Расчет, как выясняется, верный.

UPD №3: Найдена великолепная статья с раскладыванием всего по полкам, что связано с буферами. Да, и не забывайте, ресемплер тратит ресурсы процессора, значит от того какой тип ресемплера вы выберете будет зависеть максимальная нагрузка на проц, если вы переборщите, то при ресемплинге нескольких источников, проца не хватит и будут рассинхронизации, а значит щелчки. В общем меру надо знать.

UPD №4: ВНИМАНИЕ!!! Я нашел простое решение! Читать инструкцию :) В ней написано про эти буфера и про гул, что возникает у некоторых (там есть специальные переключатели на дне что бы гул убирать). В общем не знаешь, что делать, читай инструкцию! :) У меня в комплекте ее не было, вот и возился, иначе сразу бы прочел. А те, кто орет о недостатках просто ее не читали!!! :) Правда, надо признать, софт под винды для карточки вероятно так себе, судя по отзывам, я сам его не видел.

UPD №5: Для пользователей линукс дополнительно сообщу, что можно настроить все в чистой алсе и еще ссылка. Так как 0404 и 0204 очень похожи, скорее всего инструкция подойдет и в данном случае, но, я не проверял, как я и говорил, возится мне лень. Плюс к всему, я не спец так что могу ошибиться, судя по тому, что нагрузка на процессор при моих настройках меняется в зависимости от того какая частота дискретизации у исходного звукового файла, значит передискретизацию записи в 192000 не проходят и звук выводится в таком виде на карту. Это значит, что инструкция по вышеприведенным ссылкам и вывод через чистую alsa не так и совершенны по сравнению с выводом с помощью pulseaudio+jackd+alsa. Несовершенны с очки зрения простоты настройки конечно. Но, вам решать. Правда надо отметить, что с момента написания инструкции по этим ссылкам alsa совершенствовалась и у меня устройство вообще автоматом просто заработало, только с щелчками. Так что настроить dmix и буфера скорее всего несложно и просто в alsa.

UPD №6:
Найден самый простой способ настройки из всех вышеперечисленных. Достаточно поставить частоту дискретизации 88200 и все пашет при обычной pulseaudio. Частота выставляется в вышеприведенных настройках… если вас конечно такая устроит. Меня устроила, чем проще, тем лучше.

UPD №7:
В убунте 14.04 проблем больше просто нет. Но. Я использую нормализацию звука, может быть дело в этом. Потому оставлю здесь метод нормализации звука в Pulseaudio:
Ставите пакеты с ladspa плагинами. Какой конретно я не знаю, я просто поставил все по поиску, они маленькие и ставятся в одну папку.
Добавляем в конец файла /etc/pulse/default.pa несколько строк

1. load-module module-ladspa-sink sink_name=ladspa_output.dysonCompress master=0 sink_properties=device.description=«Compress» plugin=dyson_compress_1403 label=dysonCompress control=-9.0,1,0.5,0.7
Эта строка загружает модуль нормализации звука. Нормализация не позволяет громкости звука прыгать резко и как следствие меня бесить :)

2. set-default-sink 2
Номер 2 у меня потому, что мне надо включить нужную звуковуху по умолчанию, что бы руками это не делать.

3. set-sink-volume 2 40000
Настраиваем громкость на серединку, опять же что бы не подпрыгивать когда первый звук в наушниках зазвучит.

В результате может поэтому, может потому, что софт дорос, никаких косяков в работе звуковухи нет даже без других настроек, да и нормализация скорее всего не нужна, но мне удобно с ней.
Tags:
Hubs:
+34
Comments 25
Comments Comments 25

Articles