Как использовать JACK и Pulseaudio/ALSA одновременно на одном аудио устройстве?
Всякий раз, когда я запускаю водород, он ломает звук во всех других приложениях, использующих, например, Pulse, я больше не могу воспроизводить видео в Chrome после однократного запуска Hydrogen, пока я не перезагружу свой компьютер или не выполню принудительную перезагрузку sudo alsa. Я нашел людей со схожими проблемами, но нет реального руководства, чтобы исправить это, часто есть ссылки на http://jackaudio.org/pulseaudio_and_jack (который был перемещен на http://jackaudio.org/faq/pulseaudio_and_jack.html) I Я использую Ubuntu Studio 14.04 64bit.
АЛЬТЕРНАТИВНО, если это действительно невозможно, может кто-нибудь сказать мне, как использовать Джек на одной звуковой карте и Pulse на другой? Таким образом, я мог подключить звуковую карту USB только тогда, когда мне нужен JACK.
Пожалуйста, не заставляйте меня использовать окна.
11 ответов
С 16.04 все становится намного проще:)
Просто установите qjackctl
а также pulseaudio-module-jack
модуль:
apt-get install qjackctl pulseaudio-module-jack
Затем настройте qjackctl
выполнить следующую команду после запуска. Скопируйте его в "Настройка..." > "Параметры"> "Выполнить сценарий после запуска":
pactl set-default-sink jack_out
И это так. Pulseaudio распознает (через D-Bus), что JACK запустился, и автоматически направит аудио на него. Когда JACK остановлен, Pulseaudio вернется к нормальной маршрутизации и снова начнет отправлять аудио прямо на карту.
Таким образом (почти) по умолчанию Pulseaudio реализует настройку, описанную выше в mmv-ru.
У этого видео на Youtube: "Джек и PulseAudio вместе как друзья - Linux", похоже, есть ответы на некоторые вопросы:
Ключом к решению, как оказалось, было обеспечение того, чтобы Pulse-Audio-Module-jack был установлен с:
aptitude install pulseaudio-module-jack
затем sudo отредактировал файл /etc/pulse/default.pa, добавив две строки в раздел загрузки драйверов аудио:
load-module module-jack-sink
load-module module-jack-source
тогда - я думаю - перезапуск пульсаудио. Я только что перезапустил компьютер (я знаю, что он ленивый), и это сработало… угроза "Ардора" больше не убивала pulseaudio, они счастливо играли вместе.
Только что прошел квест о сосуществовании Джека и Пульса на Fedora. Вообще я доволен Pulseaudio, но иногда нужен аудио Джек.
Мое решение работает на Fedora 23.
dnf install jack-audio-connection-kit jack-audio-connection-kit-dbus qjackctl
Не трогайте /etc/pulse/default.pa!
Настроить qjackctl
Там соответствующий фрагмент ~/.config/rncbc.org/QjackCtl.conf
[Settings]
Server=jack_control start
Driver=alsa
InDevice="hw:PCH,0"
OutDevice="hw:PCH,0"
Названия раковин для pactl можно найти по команде:
pacmd list-sinks
Есть еще один фрагмент ~/.config/rncbc.org/QjackCtl.conf, чтобы показать полные команды
[Options]
...
StartupScript=true
StartupScriptShell=pactl suspend-sink alsa_output.pci-0000_00_1b.0.analog-stereo 1
PostStartupScript=true
PostStartupScriptShell=pactl set-default-sink jack_out
ShutdownScript=false
ShutdownScriptShell="pactl unload-module module-jack-sink; pactl load-module module-jack-source"
PostShutdownScript=true
PostShutdownScriptShell="pactl suspend-sink alsa_output.pci-0000_00_1b.0.analog-stereo 0; pactl set-default-sink alsa_output.pci-0000_00_1b.0.analog-stereo"
Там "Включить интерфейс D-Bus" важно для самого Qjackctl.
Как это работает
Теперь на загрузочном ПК работают только с PulseAudio. Все автоматические работают как без Джека.
После запуска Qjackctl,
- Сценарий запуска Qjackctl приостанавливает основную звуковую карту в Plseuaudio и позволяет Джеку получить к ней доступ "pactl suspend-sink"
- Джек начал через D-Bus "Джек_контрол старта"
- Импульс автоматически обнаруживает запуск гнезда через шину D-Bus и нагрузку на гнездо и источник гнезда.
- Qjackctl после запуска скрипта меняет приемник по умолчанию в Pulse на jack_out. (Я встречаю это сам не сделал) "pactl set-default-sink jack_out" (поначалу это выглядит ненужным, поскольку все запущенные клиенты PA переключились на новый приемник, но новые приложения застряли на приостановленном приемнике без этой команды)
Поэтому система перенастроена на использование "Импульса поверх Джека". (Там я пропускаю аппаратный ввод приостановить, потому что я не использую его в любом случае)
Если "Stop JACK audio server on exti приложения" не установлен, я могу закрыть Qjackctl и перезапустить его, не нарушая настройки.
После остановки Джека с помощью Qjackctl, все возвращаются к простому незагроможденному Пульсу!
- Отключение джека с помощью Qjackctl через dbus - опция "Включить интерфейс D-bus".
- jack-source и jack-раковина автоматически удаляются из Pulseaudio по шине d-bus
- приемник по умолчанию в Pulse Audio переключен на звуковую карту из-за исчезновения домкрата
- Qjackctl после завершения работы скрипта активирует звуковую карту обратно в Pulseaudio "pactl suspend-раковина alsa_output.pci-0000_00_1b.0.analog-стерео 1"
Используемые инструменты
- Джекд (из пакета pulseaudio-utils)
- jack_control (из пакета ack-audio-connection-kit-dbus)
- Qjackctl (из пакета pulseaudio-utils)
- Pactl для управления Pulseaudio из sctipts (из пакета pulseaudio-utils)
Проблема в том, что при запуске не запускается Hydrogen (как Ardor), но не закрывайте его при выходе:
Но ты можешь бежатьkillall jackd
в терминале после выхода водорода.Сложный способ одновременно использовать программное обеспечение Jack и pulseaudio - это установить "pulseaudio-module-jack" (также установить qjackctl (gui для jackd) и pavucontrol, если его нет). Перезапустить pulseaudio
pulseaudio -k
,
Теперь закройте аудио приложения (Джек и Pulseaudio),
запустите jackd с помощью qjackctl (нажмите кнопку запуска) (опция dbus должна быть выбрана на последней вкладке настроек qjackctl).
На вкладке Pavucontrol "устройство вывода" нажмите зеленую кнопку "устройство по умолчанию" рядом с "стоком".
Теперь программное обеспечение pulseaudio и Hydrogen должны работать одновременно.Используя qjackctl, на первой вкладке "Настройки" вы можете изменить аудиоустройство Jackd.
Ubuntu 20.04, я обнаружил, что это смесь разных ответов
- Установите JACK и QJackCtl, а также приемник pulseaudio и источник для JACK
sudo apt-get install qjackctl pulseaudio-module-jack
- Запустите QJackCtl и в
Setup...
->Options
->Execute script after Startup
вставьте следующее:
pactl load-module module-jack-sink channels=2; pactl load-module module-jack-source; pacmd set-default-sink jack_out
Запустите JACK, в QJackCtl к системе должны быть подключены PulseAudio Sink и Source.
В настройках Ubuntu выберите JACK Sink в качестве вывода
Обновление 2020 года. Debian Buster. Надеюсь, применимо и к Ubuntu.
Больше не нужно использовать скрипт.
Установить
pulseaudio-module-jack
. Он содержит модуль, отвечающий за обнаружение, когда домкрат запускается, и за поиск / опускание из него / в него.
Вы можете проверить это в конфигурационном файле pulseaudio:
/etc/pulse/default.pa
### Automatically connect sink and source if JACK server is present
.ifexists module-jackdbus-detect.so
.nofail
load-module module-jackdbus-detect channels=2
.fail
.endif
Убедитесь, что jackdbus запущен. Если вы используете qjackctl для запуска jack, установите флажок dbus в Setup -> Misc.
Это должно быть все, что нужно.
Самый простой способ направить всю систему для работы с разъемом:
устанавливать
sudo apt-get install qjackctl pulseaudio-module-jack
Откройте qjackctl. В Настройка> Параметры>
Установите флажок Выполнить скрипт после запуска и вставьте это:
pacmd load-module module-jack-source channels=2; pacmd load-module module-jack-sink channels=2;
Установите флажок Выполнить скрипт после завершения работы и вставьте это:
killall jackd
Теперь запустите qjack и откройте настройки звука. Вы найдете выходной порт Pulse Audio Jack Sink. Выберите его, и вся система будет синхронизирована. Если вы остановите Jack server/qjack, звук снова вернется к вашему порту по умолчанию.
Теперь это может быть намного проще. То, что сработало для меня сегодня, чтобы удовлетворить мои действительно базовые потребности, после новой установки Linux Mint 18.2 (базовый пакет Ubuntu 16.04) было:
Используйте Synaptic для установки QSynth и QJackCtl.
Скопируйте необходимые звуковые шрифты в соответствующую папку, такую как
/usr/share/sounds/sf2/
В QSynth Setup: во вкладке Audio измените Audio Driver на pulseaudio.
В QSynth Setup: под SoundFonts: Open... и выберите один из них по необходимости.
В QJackCtl Setup > Настройки> Дополнительно:
Префикс сервера: pasuspsender -
/usr/bin/jackd
В QJackCtl Setup > Options:
Выполнить скрипт после запуска:
pactl load-module module-jack-sink channels=2; pactl load-module module-jack-source; pacmd set-default-sink jack_out
В QJackCtl Connect: ALSA: присоедините запись клавиатуры слева к FLUID Synth справа.
В основных настройках системы для звука выберите необходимое устройство вывода.
Теперь я могу играть на клавиатуре во время просмотра видео (например, на YouTube с использованием Firefox) - раньше я мог делать только один из них за раз без большого количества настроек, которые я редко мог отследить.
Надеюсь, что это поможет кому-то или побудит их попробовать еще раз:-).
Есть два способа ответить на этот вопрос.
- Либо попробуйте заставить jack работать с pulseaudio... остальная часть этого вопроса объяснит, как это сделать.
- Или... не пытайтесь использовать и pulseaudio, и jack, просто замените их на pipewire: pipewire должен быть "новым pulseaudio" (я думаю, что в некоторых моментах он должен заменить pulseaudio, и уже гораздо меньше глючит, чем pulseaudio и поддерживает больше параметров Bluetooth). Pipewire эмулирует одновременно и pulseaudio, и jack, и может без проблем использоваться с pulseaudio/qjackctl/... для соединения приложений pulseaudio и jack (по сути, pipewire не делает большой разницы между приложениями pulseaudio и jack… большую часть времени я я даже не уверен, работает ли приложение, которое я использую, jack или pulseaudio). Если вы действительно хотите иметь боль и использовать pulseaudio + jack... остальная часть этого вопроса для вас.
Некоторое время назад я написал команду, и кто-то сообщил мне, что, попробовав все решения здесь, ему не повезло. Но это решение сработало для него, поэтому я опубликую его здесь, если кому-то еще можно будет помочь. NB: я не утверждаю, что это решение является самым элегантным, но оно отлично справилось со своей задачей:
- Я могу запустить / остановить домкрат, просто нажав кнопку запуска / остановки, и переключение между pulseaudio и pavucontrol происходит автоматически.
- он автоматически подключает все текущие игровые программы к разъему (вот почему есть этот уродливый grep, дайте мне знать, если у вас есть лучшее решение)
- это также гарантирует, что приложение pulseaudio также может использовать микрофоны
Это решение может быть немного улучшено за счет правильной выгрузки модулей при выходе из Джека, возможно, с помощью предложенного здесь уродливого grep , но я не нашел для себя никакой пользы.
Обратите также внимание, что я даю довольно подробные инструкции по отладке таких проблем.
Мое решение (см. теорию ниже, чтобы понять, почему оно работает/не работает, и отладить любую потенциальную проблему)
Установить:
$ sudo apt install jack2 pavucontrol qjackctl pulseaudio-module-jack.
Запустите qjackctl:
$ qjackctl
Нажмите на
Setup
, и проверьте правильность выходного интерфейса (например, если у вас есть выход HDMI, эта проверка может быть важна). В моем случае я просто буду использовать значение по умолчанию и вернусь сюда, если у меня возникнут проблемы позже.
Затем на вкладке «Дополнительно» я заменил префикс сервера
jackd
с
pasuspender -- jackd
. Это должно сообщить pulseaudio временно разрешить jack управлять звуковой картой. Я не уверен, действительно ли это необходимо, но я думаю, что это не повредит:
Затем во вкладке «Параметры» вставьте
Execute script after Startup
следующий код:
pactl load-module module-jack-sink && pactl load-module module-jack-source && pactl set-default-sink jack_out && pacmd set-default-source jack_in && pacmd list-sink-inputs | grep index | sed 's/ *index: *//g' | xargs -I{} pacmd move-sink-input "{}" jack_out
Цель этой команды — создать новые выходы (приемник) для pulseaudio, указывающего на разъем, чтобы включить этот новый приемник по умолчанию (все новые открытые приложения будут записывать в разъем), а также изменить вывод всех существующих приложений на убедитесь, что они указывают на гнездо.
Затем, чтобы убедиться, что pulseaudio перезапускается при закрытии разъема, я также добавил в поле
Execute script after Shutdown
:
pacmd suspend false
Вот и все! Теперь вам просто нужно сохранить, нажав на
Apply
и нажать на
Start
чтобы начать домкрат:
Вы должны увидеть что-то подобное, если это работает (и, конечно, без ошибок):
Немного теории, чтобы понять, почему это работает или почему это не работает
Таким образом, вы не можете воспроизводить звук, потому что только одна программа может одновременно воспроизводить звук на одной и той же звуковой карте. Поэтому, когда Джек играет, пульсаудио блокируется. Теперь также выяснилось, что большинство настольных приложений могут общаться с pulseaudio, но не с Джеком. Поэтому, когда Джек включен, у вас просто больше нет звука. Хитрость заключается в том, чтобы направить импульсный аудиотрафик на Джека с помощью чего-то вроде этого:
application -> pulseaudio -> Jack -> sound card
Обратите внимание, что все ссылки должны быть правильно настроены. Сейчас мы увидим, как они настроены и как проверить, правильно ли они настроены.
Итак, чтобы создать ссылку
pulseaudio -> Jack
мы собираемся загрузить модуль, который создает новый приемник pulseaudio(т. е. виртуальное устройство вывода) с именем
Jack sink
: таким образом любые приложения, пишущие в этот сток, будут перенаправляться на Джек. У вас может быть несколько уже существующих приемников, например, один для внутреннего звука, а если у вас есть bluetooth-гарнитура, у вас также может быть один приемник для нее. Чтобы проверить, на каком стоке на самом деле играет приложение, установите и запустите (
pavucontrol
в любом случае очень полезен для всех вещей, связанных со звуком, так как вы можете управлять практически всем с его помощью). Вы можете увидеть список приемников на вкладке с именем, например
Input devices
(извините, если перевод плохой), в моем случае у меня сейчас 2 стока (гнездо еще не загружено):
Если у вас просто один сток, то вы можете не увидеть ничего интересного, но если у вас несколько стоков, вы можете проверить в первой вкладке, какое приложение на каком стоке играет (тут вы видите, что firefox играет на моей блютуз гарнитуре), и вы можете изменить его, если это необходимо:
Итак, если у вас есть проблемы, вы можете:
- ссылка на сайт
pulseaudio -> jack
: проверьте наличие стока, соответствующего jack (если нет, попробуйте запустить вручную командуpactl load-module module-jack-sink
который должен был запускаться автоматически. Если это не удается, убедитесь, что вы установилиpulseaudio-module-jack
, и, в конце концов, перезапустите pulseaudio, просто уничтожив егоkillall pulseaudio
. Не беспокойтесь, не нужно перезапускать pulseaudio, он автоматически возрождается.). Также убедитесь, что громкость не равна 0%, и звук канала не отключен: - ссылка на сайт
application -> pulseaudio
: проверь, что твои приложения пишут на этот сток. Если нет, вы можете вручную изменить приемник (но сценарий запуска должен был изменить приемник автоматически) следующим образом: - ссылка на сайт
jack -> sound card
: Если у вас все еще есть проблемы (эта часть также может касаться проблем, которые у вас возникают с программным обеспечением, которое пишет на jack напрямую, как ), ознакомьтесь сGraph
часть джека:
Вы должны начать со всех узлов, упакованных вместе, но вы можете перемещать их, чтобы их было легче увидеть. Затем убедитесь, что все приложения, которые вы хотите услышать, подключены к
system
(в моем случае не подключался автоматически). NB: если у вас более старая версия QJackctl, вместо этого у вас могут быть вкладки. Но это то же самое: у вас будут зеленые входы/выходы во вкладке "Jack", которые вы можете подключить вручную, фиолетовые будут во вкладке "Alsa", а красные во вкладке "MIDI"... но на самом деле все внешние MIDI-устройства, которые вы подключаете, появятся на вкладке Alsa: причина в том, что существует два типа «MIDI»: устаревший Alsa Midi (порты являются глобальными для системы) и более новый Jack Midi (каждый приложение может иметь свои собственные MIDI-входы/выходы).
- Траблы с MIDI: По идее, чтобы получить миди, можно просто подключить фиолетовые входы к фиолетовым входам (или во вкладке Alsa в старой версии, да я знаю, что странно, что нужно зайти во вкладке Alsa, а не в Midi, чтобы получить Midi (!!!), но это из-за разницы между Alsa MIDI и более поздним, но менее используемым Jack Midi). Однако оказывается, что по каким-то странным причинам он имеет странные значения по умолчанию и отображается как «Midi/красный» вместо «Alsa/зеленый», что делает невозможным подключение к внешнему миди-устройству. Точнее, если вы запускаете из командной строки без каких-либо опций или с:
zynaddsubfx -I alsa -O jack
(что означает ввод с Alsa MIDI, вывод на разъем) это не должно быть проблемой, вы сможете подключить MIDI-устройства:
Однако, если вы запустите его графическим способом, автоматически запустится запись Джека по умолчанию.
zynaddsubfx -I jack -O jack
вместо этого... И у него будет проблема, что ввод будет создан на красной вкладке/MIDI, в то время как фактическое внешнее MIDI-устройство находится на фиолетовой вкладке/Alsa. Это означает, что вы не сможете подключить внешнюю миди-клавиатуру к:
Поэтому решение состоит в том, чтобы запустить
zynaddsubfx
с помощью командной строки без параметров или с
zynaddsubfx -I alsa -O midi
и все должно работать!
Я использую Linux Mint 19.1. После того, как я попробовал все возможные решения, у меня все не получилось.
Наконец, я смог решить все свои проблемы, выполнив шаги / инструкции в видео: Ссылка
По сути, он устанавливает приложения из репозиториев Kxstudio. и у них есть скрипт, чтобы все идеально настроить при запуске.
Моя конечная цель состояла в том, чтобы иметь возможность записывать ввод через мой интерфейс (Scarlett solo), а также запускать / записывать звук из других приложений (рабочий стол, браузер)
Конечно, нужно будет работать и pulseaudio, и jack, если они дойдут до того, что им понадобится jack, так как большинство медиаплееров в браузере не знают jack!..к несчастью.
Я продолжал видеть предложение о запуске только одного из них одновременно, что кажется мне таким ужасным компромиссом. На мой взгляд, немного трагично, что эти две службы, то есть jack и pulseaudio, хотя оба функционируют самостоятельно, по крайней мере, так плохо управляются kxstudio, что я и использую.
Итак, что происходит:
Гнездо не может запуститься во время работы pulseaudio (и с помощью драйвера звуковой карты, который он хочет использовать, что достаточно справедливо), поэтому его нужно запустить в первую очередь
pulseaudio должен быть направлен на домкрат после запуска и запуска
Довольно просто... да? По определенным причинам у меня было бесконечное горе с этим, потому что..
Сначала я думаю, потому что pulseaudio 4.0, кажется, глючит и портит драйвер alsa, так что в некоторых ситуациях он оставляет его заблокированным, и поэтому jack не может запуститься, даже если pulseaudio не работает. (Говорит, что не удалось установить параметры захвата или SMTG, как это)
То, что я сделал в конце концов, было
- полностью удалил jack и pulseaudio (с помощью команды find и rm -rf:D после очистки apt-get)
- установлен Pulseaudio 11 (из источников)
- установленный джек и его библиотеки (libjack-dev)
в этом порядке, а затем я наконец-то заставил их нормально работать через qjackctl, который гарантирует, что они запускаются правильным образом (загружает приемник jack в pulseaudio и устанавливает его по умолчанию).
Кстати, я видел, что вместо этого рекомендуется Cadence, и я не понимаю, почему для меня это кажется мусором по сравнению с qjackctl.
В любом случае, проблема в том, что запуск jack с использованием qjackctl занимает некоторое время, и чтобы избежать времени ожидания при каждой загрузке, вы можете использовать эту функцию спасения kde, которая заключается в загрузке предыдущего сеанса. Убедитесь, что у вас нет qjackctl в автозапуске, поскольку при каждой перезагрузке у вас будет еще один экземпляр, независимо от значения параметра singleton = true (глючит всю ночь).
Это связано с тем, что я больше не чувствовал, что с ним возиться, например, при написании интеллектуального сценария, который проверяет, что pulseaudio выключил (или приостановил) пусковое гнездо и проверил, правильно ли он запустился, затем запустил pulseaudio, модуль нагрузочного джека и т. Д.
Иначе полагаться на ОС для правильного запуска демонов и загрузки конфигурации было бы нормальным (здоровым) сценарием, однако, похоже, этого не происходит.
Повеселись..