MyTetra Share
Делитесь знаниями!
Внешние звуковые карты E-mu 0202 USB, E-mu 0404 USB и E-mu Tracker Pre USB в Linux
Время создания: 03.09.2016 23:29
Текстовые метки: внешняя звуковая карта, e-mu, linux, настройка
Раздел: Компьютер - Linux - Звук и аудио - E-MU
Запись: xintrea/mytetra_syncro/master/base/1472934544wyvnw2blt9/text.html на raw.github.com

Итак, по просьбе Teftelia попробуем собарть воедино информацию по настройке E-mu 0202 USB, E-mu 0404 USB и E-mu Tracker Pre USB для начинающих.


C чего начать:


1. Определяем, загрузился ли у нас драйвер snd-usb-audio, и под каким номером в системе зарегестрировалась карточка: в консоли набираем


$ aplay -l


вот что получилось на моем AsusX50N:


**** List of PLAYBACK Hardware Devices ****

card 0: NVidia [HDA NVidia], device 0: ALC660-VD Analog [ALC660-VD Analog]

  Subdevices: 0/1

  Subdevice #0: subdevice #0

card 0: NVidia [HDA NVidia], device 6: Si3054 Modem [Si3054 Modem]

  Subdevices: 1/1

  Subdevice #0: subdevice #0

card 1: USB [E-MU 0404 | USB], device 0: USB Audio [USB Audio]

  Subdevices: 1/1

  Subdevice #0: subdevice #0

card 1: USB [E-MU 0404 | USB], device 1: USB Audio [USB Audio #1]

  Subdevices: 1/1

  Subdevice #0: subdevice #0


Отсюда видим, что у нас есть карта E-mu 0404USB и она имеет индекс 1. В составе карты есть два устройсва: 0 и 1 (аналоговый и SPDIF выходы соответсвенно). Карточка HDA Nvidia под номером 0 нас не интересует в данный момент.

2. Проверяем воспроизведение посредством ALSA. Для этого подготовим wav файл стерео 16 бит/44кГц длительностью секунд 30-40 с именем foo.wav Проверять на mp3 или на моно не советую, по крайней мере для новичков, есть неочевидные ньюансы, на крайний случай пойдет ogg 16/44 стерео.

2.1. Запускаем команду


aplay -D hw:1,0 foo.wav


(hw:1,0 - означает карта №1, устройство №0 (данные по номерам берем из п.1))

в результате получаем..... правильно, тишину в колонках и сообщение об ошибке:


aplay: set_params:979: Sample format non available


(не все советы одинаково полезны ;-))


Вышеприведенное сообщение говорит о том, что что-то не то с частотой дискретизации - не верьте ему, он банально врет. Причина в том, что наш файл имеет битность 16, а карточка ожидает 24 бита. Если вас посетила мысль о грядущем переконвертировании всей своей музыкальной коллекции из 16 бит в 24, чтоб слушать её на E-mu 0x0xUSB, то это зря, достаточно вместо hw:1,0 указать plughw:1,0. Алиас plughw отличается от hw, тем, что ALSA перед отдачей аудио потка "в железо" преобразует его к "нужной" битности и кол-ву каналов (частота дискретизации остается "оригинальной").


aplay -D plughw:1,0 foo.wav


Вот теперь звук должен воспроизводиться корректно.


Следующим пунктом нашей программы - полное ингорирование положения регулятора громкости. Это связано с тем, что EMU USB не имеет аппаратного микшера, в отличие от тех же карточек на основе AC97. Но ALSA имеет достаточно гибкую архитектуру, и эту проблему можно решить объявлением программного регулятора громкости. Для этого нам нужно создать в домашнем каталоге пользователя файл ".asoundrc" (без кавычек) со следующим содержимым:


pcm.usb_sv{

  type softvol

  slave.pcm "plughw:1,0"

  control.name "SoftMaster"

  control.card 1

  max_dB 0.0

  min_dB -51.0

  resolution 100

  hint{

    show on

    description "EMU-0404USB Volume"

  }

}


Здесь мы объявили новый алиас с именем "usb_sv", не забываем перебить индексы карты (если нужно) в 3 и 5 строках. Прелесть настроек в .asoundrc состоит в том, что изменения вступют в силу "мгновенно" после сохранения файла.


Проинициализируем наше новое виртуальное PCM устройство "usb_sv" путем вывода звука через него:


aplay -D usb_sv foo.wav


Теперь достаточно закрыть приложение микшера и открыть его заново (под Gnome'oм нужно прибить "mixer_applet2" вручную в "Системном мониторе", хотя проще сделать "Завершение сеанса", и войти в систему заново)

Открываем окно микшера, и наблюдаем новый ползунок с именем "SoftMaster". Проверим работу нашего регулятора: запускаем команду:


aplay -D usb_sv foo.wav


и двигаем ползунком "SoftMaster" - громкость, таки, регулируется, что и требовалось.


Теперь мы можем в настройках программ указывать в качестве вывода устройство usb_sv, и будет "регулироемое" счастье. Но не долгое, т.к. не все программы позволяют подобные "вольности" с алиасами. Например, Скайп без проблем переваривает виртуальные устройства, а в видео проигрывателе VLC нам предлагают на выбор либо устройство по умолчанию, либо конкретное hw устройство, а с hw мы уже проходили - 16 бит "оно" не переваривает.


Что ж, ситуация неприятная, но поправимая, мы просто переопределим ALSA устройство по-умолчанию. Для этого в файле .asoundrc заменим первую строчку и вместо "pcm.usb_sv{" пропишем:


pcm.!default{


Готово, все программы должны работать на ура! Правда, если у вас есть ещё, например, встроенная карта, то она остается "без работы" в большинстве приложений.

На первый взгляд, мы успешно настроили звуковую подсистему - по крайней мере музыка 16/44 играет без проблем. Теперь запускаем видео-проигрыватель, и получаем... ужасные хрипы, скрежет и подхрюкивание.... WTF!!! Дело в том, что большинство видео имеет 48кГц аудио дорожку, а EMU USB ожидает 44кГц. Передискретизация внутри железок EMU-USB отсутсвует, и это хорошо, по крайней мере для меломанов.

Есть несколько решений данной проблемы:


1. Объявить программный ресемплер.

2. Поставить патч для usb-mixer, и регулировать вручную частоту дискретизации. Ожидая недоверчивые возгласы, повторю ещё раз:да, есть патч; да, это то самое, чего так долго не хватало владельцам EMU-USB; да, он рабочий и обкатаный; да, теперь в alsamixer есть отдельный ползунок, регулирующий аппаратный sample rate. Установку патча я пропишу позже в "разделе" "для продвинутых", особо нетерпеливые могут пройти по: http://ubuntuforums.org/showpost.php?p=7420874&postcount=79 и сделать всё самостоятельно. (За прорыв в создании патча делаем четыре раза "ку" нашему соотечественнику mellowman'у!)

3. Держать в VirtualBox WinXP,  и оттуда переключать частоту дискретизации. (анахронизм, и вообще не труЪ).

Итак, добавление программного 44кГц ресемплера к регулятору громкости: после правок ваш файл ~/.asoundrc будет выглядеть так:

pcm.usb_44{

  type plug

  slave{

    pcm "plughw:1,0"

    format S24_3LE

    rate 44100

   }

}


pcm.usb_sv{

  type softvol

  slave.pcm "usb_44"

  control.name "SoftMaster"

  control.card 1

  max_dB 0.0

  min_dB -51.0

  resolution 100

  hint{

    show on

    description "EMU-0404USB Volume"

  }

}


Для работы ресемплера должны быть установлены пакеты  alsa-plugins и speex.

Не забываем корректировать индекс карты, и менять объявление "usb_sv" на "!default", если необходимо.

Запускаем видео-проигрыватель снова, и наслаждаемся. Как по мне, для 99% фильмов абсолютно не критична потеря качества при передискретизации "быстрым алгоритмом". Если данное положение дел вас несколько смущает, добавьте в начале .asoundrc объявление:


defaults.pcm.rate_converter "samplerate_best"


Вы получите более качественный ресемплинг, правда ценой немалой нагрузки на CPU.

Если вдруг вы захотите использовать SPDIF выход вместо аналогового, то достаточно поправить в .asoundrc "plughw:1,0" на "plughw:1,1".

Для новичков, я думаю достаточно.  

Следующим номером нашей программы - объявление программного мишкирования нескольких звуковых потоков, "наложение" патчей, управление аппаратным sample rate. To be continued.


 
MyTetra Share v.0.65
Яндекс индекс цитирования