試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

JACK Audio Connection Kitの概要

JACK Audio Connection Kit(JACK)はサウンドデーモン(サーバ)の1つで、対応したアプリケーション間でPCM音声*1を渡すことができる。
具体的には、あるソフトウェアから出る音声に別のソフト(複数可)でエフェクトを通すことや、複数のアプリケーションからの音声の合成(自動的に行われる)、音声のファイルへの書き出し(録音)などが可能となる。
他のサウンドデーモンと比べて、音声の遅延/ずれを可能な限り短くするという設計/実装になっていて、業務用途にも耐えうるというのを売りにしているようだ。
オーディオの録音*2を行ったり、色々な音声編集ソフトやエフェクタなどを使用したり、音声付きのデスクトップ録画(スクリーンキャスト)を行う*3などの用途においては有用だが、再生することがメインの用途においては必要のないものとも言える。音声にエフェクトを通して再生したいという場合においても、ALSA標準のプラグインがLADSPAに対応していることもあり、${HOME}/.asoundrcに設定を作ってしまえば*4そちらのほうが簡単に扱える。
関連URL:

関連記事:

使い方

ユーザの視点からどのように扱うのかについて。

jackd

まず、ユーザはjackdデーモンを起動する。ALSAバイス(hw)に直接アクセスする(ことが望ましい)ため、ALSAプラグイン(softvol*5やdmix*6、ladspa*7など)は使用できず、ALSAアプリケーションやOSSアプリケーションなどは、基本的にはjackdと同時に使用できない(JACK経由で使用する方法はあるが、今回は扱わない)。
(2008/12/1)hwプラグインは既定の出力プラグインであるに過ぎず、「JACK Audio Connection KitをALSAのdmixとdsnoopから使用する」のように設定することで他のALSAアプリケーションとの併用はできる。しかし、リアルタイム性は落ちる上、突然音声が切れてデーモンを再起動するまで鳴らなくなったりすることもあるため、注意が必要。用途によってhwプラグインへの出力と使い分けるのがよいかもしれない。
関連記事:

コマンドによる起動例(最も基本的な形)は

$ jackd -d alsa &

となり、この他に、各種オプションを付ける形になる。オプションは

$ jackd -h
$ jackd -d alsa -h

で調べることが可能。後述のQjackCtlを使うことで、GUI上での起動/停止もできる。

ポート

JACK対応アプリケーション(クライアント)は出力ポートと入力ポートを持ち(片方のみを持つものと両方持つものがある)、音声データは出力ポートから入力ポートへと流れる。QjackCtlの「Connections」ダイアログでは左から右の向きとなる。
ALSAドライバを使用している場合、「system*8:playback_[チャンネル番号]」という入力ポートに入れると、ALSAドライバを経由してサウンドカードから音が出ることになる。
(2008/12/1)また、外部からの入力は「system:capture_[番号]」から入力ポートにつなぐことが可能。
エフェクタのJACKクライアント(JACK Rackなど)を通す場合、音声を出力するアプリの出力ポートからエフェクタの入力につなぎ、最終的にはalsa_pcm(playback)の入力に入れる。あるエフェクタの出力ポートから別のエフェクタの入力ポートにつないで複数のエフェクタを通すようにもできる。
コマンドでのポート一覧はjack_lspで行う。
(2008/1/9)-pオプションを付けるとポートの種類に関してが、-cオプションを付けると接続されているポートが表示される。両方同時に指定することもできる。

$ jack_lsp -pc
JACK tmpdir identified as [/dev/shm]
alsa_pcm:capture_1
        properties: output,physical,terminal,
alsa_pcm:capture_2
        properties: output,physical,terminal,
alsa_pcm:playback_1
   Hydrogen-1:out_L
        properties: input,physical,terminal,
alsa_pcm:playback_2
   Hydrogen-1:out_R
        properties: input,physical,terminal,
(中略)
Hydrogen-1:out_L
   alsa_pcm:playback_1
        properties: output,
Hydrogen-1:out_R
   alsa_pcm:playback_2
        properties: output,

上は、Hydrogenの出力ポートからALSAの再生ポートへ接続している状態。

QjackCtl

QjackCtl(http://qjackctl.sourceforge.net/)を使用することで、GUIによる設定やjackdデーモン管理(開始/停止)、ポート接続管理*9ができる。
音切れ(xrun)の検出/回数記録*10ができたり、QjackCtl起動時にjackd自動起動させたり*11もできる。
(2008/1/7)Setupダイアログで「Enable system tray icon」をチェックし、システムトレイに入れておくと、邪魔なときにすぐに隠せて便利。

  • Start/Stop: jackdの開始/終了
  • Messages: メッセージを表示
  • Status: 各種状態の表示
  • Connect: ポートの接続と切断を行う
  • Patchbay: ポート接続のプロファイルを管理/切り替え(Connectで手動で接続しなくても、プロファイル作成・選択後「Activate」で全ての接続を自動的に*12行ってくれる)

使用したバージョン:

  • JACK Audio Connection Kit 0.103.0
  • QjackCtl 0.3.1a

*1:新しめのバージョンでは、MIDIサポートも追加されている

*2:アプリケーション間のオーディオだけでなく、外部からの入力も扱える

*3:現在最も使えそうなのはrecordmydesktopで、JACKに対応している

*4:パラメータが固定となる上、その調整は大変

*5:ソフトウェアによるボリューム変更

*6:複数の音声を合成

*7:LADSPAのプラグインで音声に効果をかける

*8:古いバージョンでは「alsa_pcm」となっている

*9:ALSA Patch Bayの中に含まれるJack Patch Bayでもできる

*10:ディスプレイ表示部の中段左に表示される他、ステータスダイアログで詳細も見られる。カウントリセットも可能

*11:Setupダイアログの「Misc」タブ内

*12:クライアントの名前にはプロセスIDの文字列が含まれるが、数字部分もパターンマッチングでうまく扱ってくれる上、リストから選ぶこともできて使いやすい