2014年4月27日日曜日

jack & rakarrack & pulseaudio

jackとpulseaudioを使い、マイク入力はrakarrackを使いつつ
line入力はarecordでラジオ録音に使うためのメモ

○前準備
apt-get install linux-lowlatency
apt-get install qjackctl jackd
apt-get install pulseaudio-module-jack

まず、物理的にスピーカ、マイク入力を司っているのはALSAである。
そしてpulseaudioがそのALSAを握っている。

 ALSA(スピーカ) <== pulseaudio <== mplayerなど

line入力の方はarecordは直接ALSAを使うっぽい

 ALSA(マイク) ==> arecordなど

○とりあえず、ALSAがpulseaudioに握られていてはjackが使えないのでunloadする。

pactl unload-module module-alsa-sink
pactl unload-module module-alsa-card

○qjackctlでjackdを開始する。
qjackctlの設定はドライバをalsaにして、以下のように設定。
・出力デバイスhw:0
・入力デバイスhw:0,2
  入力デバイスの1つ目はline入力で、ラジオ録音に使うので、
 jackとしては2つ目のマイク入力を使うようにする。
 (arecord -Lで、hw:CARD=PCH,DEV=0と hw:CARD=PCH,DEV=2がある)

とりあえずjackが使われるようになるが、
このままだと、pulseaudioをぶった切ってjackをつなげただけなので、
jackが使える代わりに色んな音が鳴らなくなる。

ALSA(スピーカ) <== jack <== rakarrack
                          ×<== pulseaudio


○pulseaudioでjackを使うようにする。

pulseaudioのjackモジュールをロード

pactl load-module module-jack-source channels=2
pactl load-module module-jack-sink

多分以下のような感じになる。

ALSA(スピーカ) <== jack <== rakarrack
                          ↑<== pulseaudio(module-jack-sink) <== mplayerなど

ALSA(マイク入力) ==> jack ==> rakarrack
                          ==> pulseaudio(module-jack-source) ==> 何につかわれるのやら?

とりあえずこれで、jack経由でpulseaudioを鳴らすことができる。

○rakarrack

jackも使えるようになったはずだが、
マイク入力に何かつないで、rakarrackを動かしてみても反応なし。
ここでしばらく悩んだけど、
ALSAのマイク入力がキャプチャモードになってないからということに気づいた。

alsamixerで、 CaptureとCapture 1があるが、Captureの方はラジオ録音に使うので、
Capture 1を録音に設定、 Input Source 1をマイク入力に設定する。
コマンドでやるなら amixer -- sset なんとかかんとか で行けるはず。

これで動いた。

○終わらせ方

1.qjackctlでjackdを終わらせる。
2.pulseaudioのjackモジュールをunload
 pactl unload-module module-jack-sink
 pactl unload-module module-jack-source
3.pulseaudioのダミーがロードされるのでunload
 pactl unload-module module-null-sink
4.pulseaudioのalsaモジュールをload
 pactl load-module module-alsa-card
 pactl load-module module-alsa-sink

○結論

とりあえずは上記をやればいいっぽいので、
qjackctlに以下のように設定

・スタートアップ時にスクリプトを実行
 pactl unload-module module-alsa-sink; pactl unload-module module-alsa-card
・スタートアップ後にスクリプトを実行
 pactl load-module module-jack-source channels=2; pactl load-module module-jack-sink
・シャットダウン時にスクリプトを実行(追記: シャットダウン後じゃなくて前にやる。)
 pactl unload-module module-jack-sink; pactl unload-module module-jack-source
・シャットダウン後にスクリプトを実行
 pactl unload-module module-null-sink; pactl load-module module-alsa-card; pactl load-module module-alsa-sink

alsaのキャプチャは使わない場合はノイズがうるさいので、
使う時だけalsamixerでONにする。

・D-BUSインターフェース
jackを開始すると、jackdbusというのが走りっぱなしになるので、
jackを停止したら使わないようにしたい。
よって、qjackctlの設定:その他のD-Busインターフェースの有効化をやめる。

0 件のコメント:

コメントを投稿