水曜日, 7月 22, 2020

JACK2の日常的な使用

ちょっと前にPulseAudioをアンインしたらかえってスッキリしたとどっかに書いた気がするけど、ALSAだけでは録画時に音声をキャプチャできないということになり、かといってPulseAudioは微妙にビービー鳴ったりブツブツ言ったりしていて嫌なので、JACKを使うようにした。(と言っても結局Pulse限定アプリはPulseが必要なんだけどね…)

ArchWiki - JACK Audio Connection Kit
大抵はこれが役に立つ。
QjackctlでStartを押すと程なくして起動した設定がこれ。



コマンドライン起動

ログイン時に起動してほしい!と思いつつ、デスクトップ起動時などにQjackctlなどを自動起動させるようにすると設定ウィンドウが常駐してしまい邪魔なので、コマンドで起動させたい。
とりわけi3WMみたいにタスクトレイがないとか浮かせたウィンドウが常に前に来るというときはかなり邪魔。

systemdでリアルタイムプロセスを動かす https://qiita.com/abtc/items/0793efcc8c73764a689f 
調べつつやったらこれ↓がすぐに開始できた。
jackd -R -dalsa
-Rでリアルタイム処理、-dでドライバ?かバックエンドの指定っぽい。
-Rをつけないとmocなどで音楽再生するとスローモーションのような音になるうえに再生中にエラーログが延々と出る。


下のjack_controlではFailed to open server と言われてしまい起動しなかった(DBus関係のエラーだった)。Archwikiにある起動スクリプトでも同様。
jack_control start

JACK Audio(略)にはバージョンが1と2があって、jack_controlなどが1用のコマンドで、jackdが2用と思われる。2の方が起動した。

PulseAudioといっしょ

Vivaldiブラウザとか大抵のブラウザはJACKをサポートしていないのでTwitterやYoutubeにある動画は再生すら出来なくなる。
あとSimpleScreenRecorderもJACKのみだとフリーズしてしまうなどの不具合が多かった。

なので、PulseAudioを起動してブラウザから音を受け取ってJACKに横流しをさせる。

上の設定画面スクショでExecute script after startupに pactl set-default-sink jack_out と入れているコレがPulseをJACKに横流しする設定なんだけど、
Qjackctlを介さないコマンド起動では多分機能しない。

/etc/pulse/client.conf
default-sink = jack_out
; default-source =
; default-server =
; default-dbus-server =
autospawn = no
; daemon-binary = /usr/bin/pulseaudio
; extra-arguments = --log-target=syslog
; cookie-file =
; enable-shm = yes
; shm-size-bytes = 0 # setting this 0 will use the system-default, usually 64 MiB
; auto-connect-localhost = no
; auto-connect-display = no
Pulseの設定で似たような設定があるので、こっちに設定をつける。
autospawnはPulseをkillしたら死んだままにしておく設定。(大抵これがJACKの居場所を横取りする)

↓追記: ずいぶん昔にモジュールを入れたせいで書き足していたのを忘れてました。
pulseaudio-module-jack をインストールし、

/etc/pulse/default.pa に、
load-module module-jack-sink
load-module module-jack-source
を書き足す。追記おわり。(参考


で、これがPulseとJACKを同時起動するスクリプト。
#!/bin/bash

pulseaudio --start
sleep 10
jackd -R -dalsa&
sleep 10
pulseaudio -k
sleep 2
pulseaudio --start

これでたぶんJACK2とPulseAudioが一緒になったものが起動する……はず。

ボリュームコントロール

i3のキーバインドに以下の音量上下ショートカットをつけている。
bindsym XF86AudioRaiseVolume exec amixer sset Master 5%+
bindsym XF86AudioLowerVolume exec amixer sset Master 5%-
AlsamixerでデフォルトMasterを上下させたりこのキー使ってみると分かるけど、上のコマンドではPulseAudioが持つMasterボリュームの上下しかできない。つまりJACKに対応したアプリの音量が下げられない。

ので、これにした。↓ -cオプションで扱うカードを選択できる。
bindsym XF86AudioLowerVolume exec amixer -c 0 sset Master 5%-
bindsym XF86AudioRaiseVolume exec amixer -c 0 sset Master 5%+
カードが複数あるとかどれがカード名かというのはAlsamixerの左上に書かれているのを見て使った。AlsamixerではF6を押して切り替えでき、DefaultはPulseAudioが作ったと思われる仮想サウンドカード(だと思う)、0番のHDA Intel PCHが自機に刺さってるカード。

PulseAudio
JACKが扱う部分

 

元からPulseAudioの方は100%にし、0番カードの方もHeadphoneやPCM等を100%にしておく。

アプリケーションごとの音量設定

Pulseaudio経由のアプリはPavucontrolで音量の一括調整ができるが、JACKにはそれらしき一括制御ツールがないみたいでもっぱらアプリ内のボリュームコントローラを使用するしかない。
Pulseaudioには
 ・アプリ(サイト)ごとの音量コントローラ
 ・Pavucontrol
 ・Jack sinkの音量コントローラ

が揃っているのに対して、JACKには
 ・アプリ(サイト)ごとの音量コントローラ
 ・JACK(サウンドカード)の音量設定

しかない。(Jack Rackというのがいるらしいが省略)

これのどっちが使いやすいかというのは人それぞれだと思うけど、これは録音に対する音量も同じで、OBSにはキャプチャ音量を調整するバーがあるもののSimpleScreenRecorderはそれが無く常に100%録音だったりして、
そこらへんJACKには若干柔軟性がないように見える。

ちなみにJACKに対応する変態メディアアプリは大抵PulseAudioに対応しているので、PulseAudioしか起動していなかったとしてもDTMとかやらない限りほとんど問題はない。
そうなると↓こう。
超単純!

じゃあ何で面倒なJACK使ってるの?

PulseAudioだけだと音が出なくなってしまったからです(血涙)
でも音響の中身についてちょっと詳しくなったからこれでもいっか!という気持ち。

0 件のコメント:

コメントを投稿