Я наконец нашел решение. Я пробовал много вещей, но все другие конфигурации / метод либо давали мне плохой звук, либо работали аналогично на практике, но были более сложными. Поэтому я дам здесь самое простое решение, которое сработало для меня (и упомяну некоторые альтернативы, которые могут сработать, по крайней мере, для некоторых людей). Я использую Debian Testing, поэтому некоторые вещи, которые я упоминаю, относятся к Debian. Не должно быть слишком сложно сделать то же самое в других дистрибутивах.
Установить JACK
apt-get install qjackctl jackd2
Настроить ALSA
Запустите эту команду: sudo apt-get install libasound2-plugins Вот мой /etc/asound.conf, вы можете поместить его содержимое в ~ /.asoundrc - но /etc/asound.conf лучше, потому что он общесистемный. Как видите, все относительно просто. Устройство "все" предназначено для JACK, и!по умолчанию - для всех не-JACK-приложений. Важно что то!по умолчанию используется тип plug, а не jack, в противном случае вы получите множество странных проблем. Вы можете легко адаптировать мой asound.conf к вашим потребностям - надеюсь, понятно, как добавлять или удалять аудиоустройства и каналы. Если нет, прочитайте документацию (http://alsa-project.org/main/index.php/Asoundrc).
Единственная проблема в моем asound.conf заключается в том, что аналоговый вход (обычно микрофон) нельзя использовать как монофонический, если вы указали стереофонический аналоговый вход, как я. Еще одна странная вещь заключается в том, что в JACK у меня много XRUN, но они [i] не [/i] влияют на качество звука в моем случае, поэтому я их игнорирую.
ВАЖНОЕ ПРИМЕЧАНИЕ: Если ваша звуковая карта способна к аппаратному микшированию, вам это не нужно!секция по умолчанию с плагином ALSA JACK для прослушивания звука из не-JACK-приложений. Если вы не уверены, на что способна ваша карта, запустите:
cat /proc/asound/card0/pcm*/info | grep count
Если хотя бы на некоторых устройствах имеется более 1 подчиненного устройства, ваша карта способна к аппаратному микшированию. Если аппаратное микширование доступно на ваших каналах по умолчанию, вы можете удалить!раздел по умолчанию из моего примера asound.conf.
Альтернативная конфигурация ALSA (НЕ рекомендуется!)
Можно написать asound.conf без плагина ALSA JACK, но в моем случае это приводило к плохим звукам с частыми артефактами, похожими на щелчки, на входах, несмотря на очень большой размер buffer_s (иногда несколько артефактов в минуту, иногда один артефакт за несколько минут) даже после обновления до ядра PF (позже я объясню, что это). Не удивительно, потому что JACK должен использовать ваши аудиоустройства как можно более непосредственно, а здесь это не так. Если вы хотите попробовать это в любом случае по какой-либо причине, пожалуйста, посмотрите мой /etc/asound.conf без плагина ALSA JACK (http://science.su/stuff/linux/sound/jack/without_alsa_jack_plugin/asound.conf). Он более сложный, чем первый, но я постарался сделать его максимально читабельным. Перед тем как попробовать, убедитесь, что вы используете одинаковые period_size и period в JACK и asound.conf. Я оставляю эту альтернативную конфигурацию в качестве примера для изучения (вы можете увидеть, как использовать различные типы в asound.conf, как микшировать моно в стерео и т.д.).
Настроить JACK
Вот скриншот моих настроек в qjackctl. Наиболее важными настройками являются "Реальное время", "Устройство ввода" и "Устройство вывода". Все остальное - просто пример рабочей настройки.
Обновление до лучшего ядра
Хорошая идея - попытаться перейти на ядро RT (в конце концов, ядро vanilla будет включать аналогичную поддержку в режиме реального времени, но в обозримом будущем вам придется использовать исправленное ядро, если вы хотите приемлемую задержку звука без артефактов, особенно от аудиовхода) ). Чтобы попробовать ядро RT в Debian Testing или выше, вам нужно просто запустить эту команду (я полагаю, вам нужен драйвер NVidia; если нет, установите вместо него любой драйвер):
sudo apt-get install linux-image-3.4-trunk-rt-amd64 linux-headers-3.4-trunk-rt-amd64 nvidia-kernel-dkms
Если ядро RT работает для вас, не стесняйтесь пропустить оставшуюся часть этого сообщения. С ядром RT вы можете услышать идеальный звук с низкой задержкой. Но, к сожалению, многие карты NVidia не работают с ядрами RT, и мое было одним из них (GeForce GTX 295), поэтому я не мог использовать RT.
Примечание: с ядром vanilla я сталкивался с артефактами, похожими на щелчки, несколько раз в минуту как на аналоговых, так и на цифровых входах, даже при относительно большом размере buffer_size - это было неприемлемо, поэтому ядро vanilla не работало для моей цели. Если это работает для вас, и у вас все в порядке с относительно высокой задержкой звука (буфер), которую вы должны допустить для приемлемого звука, вам, очевидно, не нужно менять ядро.
Драйвер NVidia в Debian уже содержит модификации для работы с ядром 3.4 RT, вам не нужно его изменять, но, к сожалению, он может дать вам черный экран вместо вашего графического интерфейса. В этом случае вам нужно удалить ядро RT и попробовать что-то еще, например PF-kernel (http://pf.natalenko.name). Автор не предоставляет файлы deb, но ссылается на чей-то сайт (http://kernel.night-leshiy.ru) - этот сайт написан не на английском языке, но на каком бы языке он ни находился, вам не нужно его понимать , просто скачайте файлы deb с ядром pf и его заголовками и установите их с помощью:
sudo dpkg -i linux-*-pf*.deb
Ядро PF содержит планировщик BFS, и на моей четырехъядерной рабочей станции на базе Xeon с 8 аппаратными потоками (так что ОС воспринимает это как 8 процессоров) оно сократило задержки в худшем случае процессов реального времени (например, JACK) с сотен миллисекунд до нескольких миллисекунды (в моем случае менее 2 мс). Это, конечно, выглядит очень плохим результатом, если сравнивать с ядром RT (с наихудшими задержками процессов реального времени в диапазоне 10-30 микросекунд ), но НАМНОГО лучше, чем ванильное ядро. Лично я использую 128 buffer_size с 2 периодами - это задержка ~ 5 мс; в моем случае этого достаточно, чтобы избежать каких-либо артефактов в звуке после нескольких часов тестирования. С ядром RT возможны еще лучшие результаты.
BFS не лучший планировщик, но он работает намного лучше, чем планировщик в vanilla kernel, если вы хотите низкую задержку, а ядро RT не работает для вас. Если вам нужны как можно меньшие задержки без ядра RT, есть улучшенная BFS со сложностью O(1) вместо O(n) и, возможно, еще лучший планировщик - RIFS. Вы можете найти их здесь (http://code.google.com/p/rifs-scheduler/downloads/list), если вы хотите собрать собственное ядро. Если это так, установите пакет ядра и прочитайте это руководство (http://vanilja.org/kernel).
Надеюсь, мой опыт кому-нибудь пригодится.