Как использовать JACK и Pulseaudio/ALSA одновременно на одном аудиоустройстве?

Всякий раз, когда я запускаю hydrogen, он прерывает мой звук во всех других приложениях, которые используют Pulse, например, я больше не могу воспроизводить видео в Chrome после того, как запустил Hydrogen один раз, пока я не перезагружу свой компьютер или не выполню принудительную перезагрузку sudo alsa. Я нашел людей с подобными проблемами, но нет реального руководства по их устранению, часто есть ссылки на http://jackaudio.org/pulseaudio_and_jack (который переместился в http://jackaudio.org/faq/pulseaudio_and_jack.html ) Я использую Ubuntu Studio 14.04 64bit.

В качестве альтернативы, если этого действительно невозможно достичь, может кто-нибудь сказать мне, как использовать Jack на одной звуковой карте и Pulse на другой? Таким образом, я мог подключать звуковую карту USB только тогда, когда мне нужен разъем.

Пожалуйста, не заставляй меня пользоваться Windows.

С 16.04 все стало намного проще :)

Просто установите qjackctl и pulseaudio-module-jack модуль:

apt-get install qjackctl pulseaudio-module-jack

Затем настройте qjackctl>> чтобы выполнить следующую команду после запуска. Скопируйте его в "Настройка...", "Параметры", "Выполнить скрипт после запуска".:

pacmd set-default-sink jack_out

И это все. Pulseaudio распознает (через D-Bus), что разъем запущен, и автоматически направит звук на него. Когда разъем остановлен, Pulseaudio вернется к нормальной маршрутизации и снова начнет отправлять аудио непосредственно на карту.

Таким образом (почти) по умолчанию Pulseaudio реализует настройку, описанную выше mmv-ru.

Это видео на Youtube: "Джек и PulseAudio вместе как друзья - Linux" казалось, у него были какие-то ответы:

Ключом к решению, по-видимому, было убедиться, что pulseaudio-module-jack установлен с:

aptitude install pulseaudio-module-jack

затем sudo отредактировал файл /etc/pulse/default.pa, включив две строки в раздел загрузка аудиодрайверов вручную:

load-module module-jack-sinkload-module module-jack-source

затем - я думаю - перезапуск pulseaudio. Я только что перезагрузил компьютер (ленивый, я знаю), и это сработало отлично ... разжигание страсти больше не убивало pulseaudio, они счастливо играли вместе.

Мое решение работает на Fedora 23.

dnf install jack-audio-connection-kit jack-audio-connection-kit-dbus qjackctl

Не прикасайтесь к /etc/pulse/default.па!

Настройка qjackctl

Settings

Соответствующий фрагмент ~/.config/rncbc.org/QjackCtl.conf:

[Settings]Server=jack_control startDriver=alsaInDevice="hw:PCH,0"OutDevice="hw:PCH,0"

Options

Названия приемников для pactl можно найти по:

pacmd list-sinks

Вот еще один фрагмент ~/.config/rncbc.org/QjackCtl.conf, чтобы показать полные команды

[Options]...StartupScript=trueStartupScriptShell=pactl suspend-sink alsa_output.pci-0000_00_1b.0.analog-stereo 1PostStartupScript=truePostStartupScriptShell=pactl set-default-sink jack_outShutdownScript=falseShutdownScriptShell="pactl unload-module module-jack-sink; pactl load-module module-jack-source"PostShutdownScript=truePostShutdownScriptShell="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"

Misc"Включить интерфейс D-Bus" важно для самого Qjackctl.

Как это работает

Теперь при загрузке ПК работает только с PulseAudio, все автоматически работает как без разъема.

После запуска Qjackctl,

  1. Сценарий запуска Qjackctl приостанавливает работу основной аудиокарты в Pulseaudio и позволяет Джеку получить к ней доступ: pactl suspend-sink alsa_output.pci-0000_00_1b.0.analog-stereo 1
  2. Разъем запускается по d-шине: jack_control start
  3. Импульс автоматически определяет запуск гнезда по D-шине и загружает приемник гнезда и источник гнезда.
  4. Qjackctl после запуска скрипта изменяет приемник по умолчанию в Pulse на jack_out: pactl set-default-sink jack_out (на первый взгляд это кажется ненужным, так как все запущенные клиенты PA переключаются на новый приемник, но новые приложения будут зависать на приостановленном приемнике без этой команды)

Таким образом, система перенастроена на использование "Импульса поверх гнезда". (Я пропускаю аппаратную приостановку ввода, потому что я все равно ее не использую)

Если не установлен флажок "Остановить аудиосервер JACK при выходе из приложения", я могу закрыть Qjackctl и повторно запустить его, не нарушая настройки.

После остановки Jack с помощью Qjackctl все возвращается к обычному незагроможденному Pulse!

  1. Jackd stopped by Qjackctl over dbus - "Enable D-bus interface" option.
  2. разъем-источник и разъем-приемник автоматически удаляются из Pulseaudio по d-шине
  3. приемник по умолчанию в Pulse audio переключается на аудиокарту, поскольку разъем исчезает
  4. Qjackctl после завершения работы скрипта повторно активирует аудиокарту в Pulseaudio: pactl suspend-sink alsa_output.pci-0000_00_1b.0.analog-stereo 1

Используемые инструменты

  1. jackd (из пакета pulseaudio-utils)
  2. jack_control (из пакета ack-audio-connection-kit-dbus)
  3. Qjackctl (из пакета pulseaudio-utils)
  4. pactl для управления Pulseaudio из скриптов (из пакета pulseaudio-utils)
  5. LANG=C pacmd list-sinks|grep -E "index:|name:|alsa.long_card_name =|alsa.name =" или LANG=C pactl list sinks|grep -E "(Sink #|Name:|alsa.long_card_name =|alsa.name =)" для определения имени устройства alsa
  • Проблема в том, что водород (как и Ardour) запускает jackd при запуске, но не закрывает его при выходе:
    Но ты можешь убежать killall jackd в терминале после выхода водорода.

  • Сложным способом одновременного использования программного обеспечения Jack и pulseaudio является установка "pulseaudio-module-jack" (также установите qjackctl (графический интерфейс для jackd) и pavucontrol, если его нет). Перезапустить pulseaudio pulseaudio -k.
    Теперь закройте аудиоприложения (Jack и pulseaudio).,
    запустите jackd с помощью qjackctl (нажмите кнопку пуск) (опция dbus должна быть выбрана на последней вкладке настроек qjackctl).
    На вкладке Pavucontrol "устройство вывода" нажмите зеленую кнопку "устройство по умолчанию" рядом с "приемником гнезда".
    Теперь программное обеспечение pulseaudio и Hydrogen должны работать одновременно.

  • Используя qjackctl, на первой вкладке "настройки" вы можете изменить аудиоустройство Jackd.

Самый простой способ направить всю систему на запуск с помощью jack:

Устанавливать

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 и откройте настройки звука. Вы найдете выходной порт приемника импульсного аудиоразъема. Выберите его, и вся система будет синхронизирована. Если вы остановите Jack server/qjack, звук снова вернется к вашему порту по умолчанию.

[Вот общий вид]

enter image description here

обновление 2020 года. Разрушитель Debian. Надеюсь, это применимо и к Ubuntu.

Больше не нужно использовать какой-либо скрипт.

Устанавливать pulseaudio-module-jack. Он содержит модуль, отвечающий за определение момента запуска домкрата и извлечение / опускание из / в него.

Вы можете проверить это в конфигурационном файле pulseaudio:

/etc/pulse/default.pa

### Automatically connect sink and source if JACK server is present.ifexists module-jackdbus-detect.so.nofailload-module module-jackdbus-detect channels=2.fail.endif

>Убедитесь, что jackdbus запущен. Если вы используете qjackctl для запуска jack, установите флажок dbus в разделе Настройка - Разное.

Этого должно быть достаточно.

Ubuntu 20.04, Я обнаружил, что это смесь различных ответов

  1. Установите JACK и QJackCtl, а также приемник и источник pulseaudio для JACK
sudo apt-get install qjackctl pulseaudio-module-jack
  1. Запустите 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

enter image description here

  1. Start JACK, в QJackCtl приемник и источник PulseAudio должны быть подключены к системеenter image description here

  2. В настройках Ubuntu выберите приемник РАЗЪЕМА в качестве выходного

enter image description here

Теперь все могло бы быть намного проще. То, что сработало для меня сегодня, чтобы удовлетворить мои действительно основные потребности, после новой установки Linux Mint 18.2 (Ubuntu 16.04 package base), было:

  1. Используйте Synaptic для установки QSynth и QJackCtl.

  2. Скопируйте необходимые звуковые шрифты в соответствующую папку, например /usr/share/sounds/sf2/

  3. В Настройка QSynth: под Аудио изменение вкладки Аудиодрайвер к pulseaudio.

  4. В Настройка QSynth: под Звуковые эффекты: Открыть... и выберите один из них по мере необходимости.

  5. В >>Дополнительные параметры настройки QJackCtl:

    Префикс сервера: pasuspsender -- /usr/bin/jackd

  6. В >Параметры настройки QJackCtl:

    Выполнение скрипта после запуска:

    pactl load-module module-jack-sink channels=2; pactl load-module module-jack-source; pacmd set-default-sink jack_out
  7. В QJackCtl Connect: ALSA: присоединитесь к вводу с клавиатуры слева, чтобы ЖИДКИЙ Синтезатор справа.

  8. В основном Системные настройки для звука выберите необходимое устройство вывода.

Теперь я могу играть на клавиатуре во время просмотра видео (например, на YouTube, например, с помощью Firefox) - раньше я мог делать только одно из них за раз без множества настроек, за которыми я редко мог уследить.

Надеюсь, это кому-то поможет или побудит их попробовать еще раз :-).

Есть два способа ответить на этот вопрос.

  1. Либо попробуйте заставить jack работать с pulseaudio ... остальная часть этого вопроса объяснит, как это сделать.
  2. Или... не пытайтесь использовать как pulseaudio, так и jack, просто замените их на трубопроводную проволоку: предполагается, что pipewire будет "новым pulseaudio" (я думаю, в некоторых моментах он должен заменить pulseaudio, и он уже гораздо менее глючный, чем pulseaudio, и поддерживает больше опций Bluetooth). Pipewire эмулирует как pulseaudio, так и jack одновременно и может легко использоваться с pulseaudio/ qjackctl/... для соединения приложений pulseaudio и jack вместе (в принципе, pipewire не делает большой разницы между приложениями pulseaudio и jack ... большую часть времени я даже не уверен, работает ли приложение, которое я использую, под управлением jack или pulseaudio). Если вы действительно хотите испытать боль и использовать pulseaudio + jack... остальная часть этого вопроса для вас.

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

  • Я могу запустить / остановить jack, просто нажав кнопку start / stop, и переключение между pulseaudio и pavucontrol происходит автоматически.
  • он автоматически подключает все текущие игровые программы к разъему (вот почему существует этот уродливый grep, дайте мне знать, если у вас есть лучшее решение).
  • это также гарантирует, что приложение pulseaudio также может использовать микрофоны

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

Обратите также внимание, что я даю довольно подробные инструкции о том, как отлаживать такие проблемы.

Мое решение (см. теорию ниже, чтобы понять, почему оно работает / терпит неудачу, и отладить любую потенциальную проблему)

Устанавливать:

$ sudo apt install jack2 pavucontrol qjackctl pulseaudio-module-jack. 

Запустите qjackctl:

$ qjackctl

enter image description here

Нажмите на Setup, и убедитесь, что выходной интерфейс правильный (например, если у вас есть выход HDMI, эта проверка может быть важна). В моем случае я просто использую значение по умолчанию и вернусь сюда, если у меня возникнут какие-то проблемы позже.enter image description here

Затем на вкладке дополнительно я заменил префикс сервера jackd с pasuspender -- jackd. Предполагается, что это говорит pulseaudio временно разрешить Джеку управлять звуковой картой. Я не уверен, действительно ли это необходимо, но, думаю, это не повредит:enter image description here

Затем на вкладке "Параметры" введите 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, которые указывают на jack, чтобы включить этот новый приемник по умолчанию (все вновь открытые приложения будут записывать в jack), а также изменить выходные данные всех существующих приложений, чтобы убедиться, что они указывают на jack.

Затем, чтобы убедиться, что pulseaudio перезапускается при закрытом разъеме, я также добавил в поле Execute script after Shutdown :

pacmd suspend false

enter image description here

Вот и все! Теперь вам просто нужно сохранить, нажав на Apply и нажать на Start для начала Джек:

enter image description hereВы должны увидеть что-то подобное, если это работает (и, конечно, никаких ошибок):enter image description here

Немного теории, чтобы понять, почему это работает или почему это терпит неудачу

Таким образом, по сути, вы не можете воспроизводить звук, потому что только одна программа может воспроизводить звук одновременно на одной и той же звуковой карте. Поэтому, когда Джек играет, pulseaudio блокируется. Теперь также выясняется, что большинство настольных приложений могут взаимодействовать с pulseaudio, но не с Jack. Так что, когда Джек включен, у вас просто больше нет звука. Хитрость заключается в том, чтобы направить трафик pulseaudio на разъем с помощью чего-то подобного:

application -> pulseaudio -> Jack -> sound card

Обратите внимание, что все ссылки должны быть правильно настроены. Теперь мы увидим, как они настроены и как проверить, правильно ли они настроены.

Итак, чтобы создать ссылку pulseaudio -> Jack мы собираемся загрузить модуль, который создает новый приемник pulseaudio (т.Е. виртуальное устройство вывода), называемый Jack sink: таким образом, любые приложения, записываемые в этот приемник, будут перенаправлены на Jack. У вас может быть несколько уже существующих приемников, например, один для внутреннего аудио, а если у вас есть Bluetooth-гарнитура, у вас может быть и один приемник для нее. Чтобы проверить, на каком приемнике на самом деле воспроизводится приложение, установите и запустите pavucontrol (pavucontrol в любом случае это очень полезно для всех вещей, связанных со звуком, поскольку вы можете управлять практически всем с его помощью). Вы можете просмотреть список приемников на вкладке с именем like Input devices (извините, если перевод плохой), в моем случае у меня сейчас есть 2 раковины (разъем еще не загружен):enter image description here

Если у вас только один приемник, вы можете не увидеть ничего интересного, но если у вас несколько приемников, вы можете проверить на первой вкладке, какое приложение воспроизводится на каком приемнике (здесь вы видите, что firefox воспроизводится на моей bluetooth-гарнитуре), и вы можете изменить его, если это необходимо:

enter image description here

Так что, если у вас есть какие-то проблемы, вы можете:

  1. ссылка pulseaudio -> jack: убедитесь, что у вас есть приемник, соответствующий разъему (если нет, попробуйте выполнить команду вручную pactl load-module module-jack-sink это должно было выполняться автоматически. Если это не удастся, убедитесь, что вы установили pulseaudio-module-jack, и в конечном итоге перезапустить pulseaudio, просто убив его killall pulseaudio. Не беспокойтесь, не нужно перезапускать pulseaudio, он возрождается автоматически.). Также убедитесь, что громкость не равна 0% и что канал не отключен:enter image description here
  2. ссылка application -> pulseaudio: убедитесь, что ваши приложения записываются на этот приемник. Если нет, вы можете вручную изменить приемник (но сценарий запуска должен был автоматически изменять приемник) таким образом:enter image description here
  3. ссылка jack -> sound card: Если у вас все еще есть проблемы (эта часть также может касаться проблем, возникающих у вас с программным обеспечением, которое записывает на jack напрямую, например zynaddsubfx), ознакомьтесь с Graph часть Джека:

enter image description here

Вы должны начать с того, что все узлы будут упакованы вместе, но вы можете переместить их, чтобы их было легче увидеть. Затем убедитесь, что все приложения, которые вы хотите использовать, подключены к system (в моем случае zynaddsubfx не был подключен автоматически). ПРИМЕЧАНИЕ: если у вас более старая версия QJackctl, то вместо этого у вас могут быть вкладки. Но это то же самое: у вас будут зеленые входы / выходы на вкладке "Разъем", которые вы можете подключить вручную, фиолетовые будут на вкладке "Alsa", а красные - на вкладке "MIDI" ... но на самом деле все внешние MIDI-устройства, которые вы подключаете, появятся на вкладке Alsa: причина в том, что существует два вида "MIDI": устаревший Alsa Midi (порты являются глобальными для системы) и более поздний Jack Midi (каждое приложение может иметь свой собственный midi-входы/выходы).

enter image description here

  1. Проблемы с MIDI: Теоретически, чтобы получить midi, вы можете просто подключить фиолетовые входы к фиолетовым входам (или на вкладке Alsa в более старой версии, да, я знаю, это странно, что вам нужно перейти на вкладку Alsa, а не Midi, чтобы получить Midi (!!!), но это из-за разницы между Alsa MIDI и более поздним, но менее используемым Jack Midi). Однако оказывается, что по каким-то странным причинам, zynaddsubfx имеет некоторые странные значения по умолчанию и будет отображаться как "Midi /red" вместо "Alsa /green", что делает невозможным подключение к внешнему midi-устройству. Точнее, если вы запустите zynaddsubfx из командной строки без какой-либо опции или с:
zynaddsubfx -I alsa -O jack

(что означает ввод с Alsa MIDI, вывод на разъем) это не должно быть проблемой, вы сможете подключить MIDI-устройства:

enter image description here

Однако, если вы запустите его графическим способом, автоматически запустится запись Jack по умолчанию zynaddsubfx -I jack -O jack вместо... И у него будет проблема с тем, что zynaddsubfx ввод будет создан на вкладке red/MIDI, в то время как фактическое внешнее MIDI-устройство находится на вкладке violet/Alsa. Таким образом, это означает, что вы не сможете сопоставить свою внешнюю midi-клавиатуру с zynaddsubfx:

enter image description here

Поэтому решение состоит в том, чтобы запустить zynaddsubfx использование командной строки без параметров или с zynaddsubfx -I alsa -O midi и все должно работать!

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

Я продолжал видеть предложение о том, чтобы одновременно запускать только один из них, что кажется мне таким ужасным компромиссом. На мой взгляд, немного трагично, что эти два сервиса, то есть jack и pulseaudio, хотя оба функционируют сами по себе, так плохо управляются kxstudio, по крайней мере, это то, что я использую.

Итак, что происходит, так это:

  • jack не может запуститься во время работы pulseaudio (и с использованием драйвера звуковой карты, который он хочет использовать, что достаточно справедливо), поэтому его необходимо запустить сначала

  • pulseaudio необходимо указать на разъем, как только он будет запущен и запущен

Довольно просто.. да? По определенным причинам у меня было бесконечное горе из-за этого, потому что..

Сначала я думаю, потому что pulseaudio 4.0, похоже, глючит и портит драйвер alsa, так что в некоторых ситуациях он оставляет его заблокированным, и поэтому jack не может запуститься, даже если pulseaudio не запущен. (Говорит, что не удалось установить параметры захвата или что-то в этом роде)

То, что я сделал в конце концов, было

  • полностью удалены оба разъема и pulseaudio (с помощью find и rm -rf :D после очистки apt-get)
  • установлен pulseaudio 11 (из источников)
  • установлен jack и его библиотеки (libjack-dev)

в таком порядке, а затем я, наконец, заставил их нормально работать через qjackctl, который гарантирует, что они запускаются правильным образом (загружает приемник разъема в pulseaudio и устанавливает его по умолчанию).

Кстати, я видел, что вместо этого рекомендуется использовать каденцию, и я не понимаю, почему, на мой взгляд, это кажется ерундой по сравнению с qjackctl.

В любом случае, проблема в том, что запуск jack с помощью qjackctl занимает некоторое время, и чтобы избежать времени ожидания при каждой загрузке, вы можете использовать эту функцию экономии времени в kde, которая заключается в загрузке предыдущего сеанса. Убедитесь, что у вас нет qjackctl в автозапуске, так как при каждой перезагрузке у вас будет еще один экземпляр, независимо от настройки singleton = true (глючит, глючит всю ночь напролет).

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

В противном случае полагаться на ОС для правильного запуска демонов и загрузки конфигурации было бы нормальным (здоровым) сценарием, однако, похоже, этого не происходит.

Повеселиться..

После дополнительных исследований, похоже, есть несколько способов заставить это работать, см. Здесь: WalkThrough_User_PulseOnJack · jackaudio/jackaudio.github.com Wiki · GitHub
Однако в моем случае все это навсегда уничтожает весь аудиовыход.