「JACK Audio Connection Kit」の版間の差分
(同期) |
Kusanaginoturugi (トーク | 投稿記録) (校正(でき・出来)) |
||
(7人の利用者による、間の16版が非表示) | |||
1行目: | 1行目: | ||
− | [[Category: |
+ | [[Category:マルチメディア]] |
[[en:JACK Audio Connection Kit]] |
[[en:JACK Audio Connection Kit]] |
||
[[fr:Jack]] |
[[fr:Jack]] |
||
10行目: | 10行目: | ||
{{Note|logind を使っている場合でも、logind はハードウェアへの直接アクセスしか対応しないため、ユーザーを手動で {{ic|audio}} グループに追加する必要があります。}} |
{{Note|logind を使っている場合でも、logind はハードウェアへの直接アクセスしか対応しないため、ユーザーを手動で {{ic|audio}} グループに追加する必要があります。}} |
||
− | JACK の実装は2つあります。違いについては [https://github.com/jackaudio/jackaudio.github.com/wiki/ |
+ | JACK の実装は2つあります。違いについては [https://github.com/jackaudio/jackaudio.github.com/wiki/Differences-between-jack1-and-jack2 この比較] を見て下さい。簡単に説明すると、Jack 1 と Jack 2 はどちらも同じプロトコルの実装です。Jack 1 でコンパイルされたプログラムは特に修正を加えなくても Jack 2 で動作します (逆もしかり)。 |
===JACK2=== |
===JACK2=== |
||
− | '''JACK2''' はマルチプロセッサハードウェア向けに書きなおされています。 |
+ | '''JACK2''' はマルチプロセッサハードウェア向けに書きなおされています。{{Pkg|jack2}} パッケージでインストールしてください。環境が64ビットで JACK が必要な32ビットのアプリケーションを動かす必要がある場合は、[[multilib]] リポジトリから {{Pkg|lib32-jack2}} もインストールしてください。''jack_controll'' コマンド を使用するには、{{Pkg|python-dbus}} パッケージもインストールします。 |
− | |||
− | ====JACK2 D-Bus==== |
||
− | [[D-Bus]] を使う JACK2 は {{Pkg|jack2-dbus}} でインストールできます。jack2 パッケージと同じものですが、レガシーな "jackd" サーバーは入っていません。 |
||
− | |||
− | {{ic|jack_control}} ユーティリティを使って操作します。重要なコマンドは以下の通り: |
||
− | jack_control start - jack サーバーを起動する |
||
− | jack_control stop - jack サーバーを停止する |
||
− | jack_control ds alsa - ドライバー(バックエンド)として alsa を選択する |
||
− | jack_control eps realtime True - エンジンのパラメータを realtime などに設定する |
||
− | jack_control dps period 256 - ドライバーパラメータを 256 に設定する |
||
===JACK=== |
===JACK=== |
||
− | また、 |
+ | また、{{pkg|jack}} パッケージでインストールできる、旧式の '''JACK''' も存在します。環境が64ビットで JACK が必要な32ビットのアプリケーションを動かす必要がある場合は、[[multilib]] リポジトリから {{Pkg|lib32-jack}} もインストールしてください。 |
===GUI=== |
===GUI=== |
||
− | GUI のコントロールアプリケーションが使いたい場合は、[[公式リポジトリ]]にある {{Pkg|qjackctl}} が広く使われています。 |
||
+ | * {{App|Cadence|オーディオプロダクション向けの便利なツールのセット。システムチェックや JACK の管理、他のツールの呼び出しなどの設定を行います。|https://kxstudio.linuxaudio.org/Applications:Cadence|{{Pkg|cadence}}}} |
||
− | また、[http://kxstudio.linuxaudio.org/Applications:Cadence cadence] は高度な jack の設定を簡単にするアプリケーションのセットを提供します。AUR の {{AUR|cadence}} パッケージをインストールしてください。 |
||
+ | * {{App|Patchage|JACK と ALSA ベースのオーディオ・MIDI 環境向けのモジュール式パッチベイ。|https://drobilla.net/software/patchage|{{Pkg|patchage}}}} |
||
+ | * {{App|PatchMatrix|マトリックス方式の JACK パッチベイ。|https://git.open-music-kontrollers.ch/lad/patchmatrix/about/|{{Pkg|patchmatrix}}}} |
||
+ | * {{App|[[Wikipedia:Qjackctl|QjackCtl]]|JACK サウンドサーバーデーモンを制御するシンプルな Qt アプリケーション。|https://qjackctl.sourceforge.io/|{{Pkg|qjackctl}}}} |
||
==基本設定== |
==基本設定== |
||
37行目: | 29行目: | ||
===概要=== |
===概要=== |
||
+ | ハードウェアやアプリケーションの適切な設定は様々な要因によって決まります。JACK を使用する場合、サウンドカードと CPU が遅延に強い影響を与えます。 |
||
− | [http://www.linux-magazine.com/content/download/63041/486886/version/1/file/JACK_Audio_Server.pdf Linux Magazine の記事] がとてもよくまとまっています。JACK を正しく設定すれば、手動でコンパイルすることを心配しなくても、ほとんどの JACKのツールはすぐに動作します。 |
||
− | |||
− | 多くのチュートリアルではリアルタイムカーネルを喧伝しています。このカーネルは live synthesis や FX ではとても訳に立ちますが、録音や編集を目的としているのなら必須ではありません。そのような場合は非リアルタイムのレイテンシ 10-40+ ms (古いハードウェアなら 100-500+ ms) を気にする必要がありません。 |
||
+ | メインライン Linux カーネルはリアルタイムスケジューリングをサポートしているため、カーネルにパッチを適用することは必ずしも必須ではありません。{{AUR|linux-rt}} パッケージは遅延をさらに少なくするためのパッチが複数適用されています。 |
||
− | 各種要因にあわせて、ハードウェアやアプリケーションが必要な設定を適切に行なって下さい。 |
||
===シェルを使った設定の例=== |
===シェルを使った設定の例=== |
||
+ | JACK2 は 実行可能ファイル ''jackd'' から直接起動することも、D-Busベースの ''jack_control'' バイナリで制御することもできます。 |
||
− | JACK2 の D-Bus 版はとても簡単に始めることができます。以前は、QjackCtl や daemonizer などを使う必要がありました。{{Pkg|jack2-dbus}} を使うことで、シェルスクリプトで簡単に起動・設定が可能です。 |
||
+ | ''jack_control'' を使用すると、シェルスクリプトを介して、JACK2 を簡単に起動および設定できます。''Jack_control'' を使用するには、{{Pkg|python-dbus}} パッケージをインストールする必要があることに注意してください。 |
||
− | シェルスクリプトを作成して X のログイン時に起動するように |
+ | シェルスクリプトを作成して X のログイン時に起動するようにできます: |
{{hc|start_jack.sh| |
{{hc|start_jack.sh| |
||
53行目: | 44行目: | ||
jack_control start |
jack_control start |
||
− | sudo schedtool -R -p 20 `pidof jackdbus` |
||
− | jack_control eps realtime true |
||
jack_control ds alsa |
jack_control ds alsa |
||
jack_control dps device hw:HD2 |
jack_control dps device hw:HD2 |
||
61行目: | 50行目: | ||
jack_control dps period 64 |
jack_control dps period 64 |
||
sleep 10 |
sleep 10 |
||
− | + | a2jmidid -e & |
|
sleep 10 |
sleep 10 |
||
qjackctl & |
qjackctl & |
||
− | sleep 10 |
||
− | qmidiroute ~/All2MIDI1.qmr & |
||
− | sleep 10 |
||
− | yoshimi -S & |
||
− | sleep 10 |
||
}} |
}} |
||
− | これ |
+ | これにより、他のプログラムが利用できる動作中のJACKインスタンスを開始します。各行の詳細は次のとおりです。最適な設定を探す際には、D-Bus を使わないバージョンの JACK2 で QJackCtl の GUI を使って色々と試すと良いでしょう。 |
====シェルを使った設定の例の概要==== |
====シェルを使った設定の例の概要==== |
||
77行目: | 61行目: | ||
jack_control start |
jack_control start |
||
JACK を起動します (起動していない場合)。 |
JACK を起動します (起動していない場合)。 |
||
− | sudo schedtool -R -p 20 `pidof jackdbus` |
||
− | Linux カーネルでリアルタイムモードに JACK を設定します、priority 20 (オプションの範囲は 1-99)。 |
||
− | jack_control eps realtime true |
||
− | 内部設定でリアルタイムモードに JACK を設定します。 |
||
jack_control ds alsa |
jack_control ds alsa |
||
ALSA ドライバーを使うように JACK を設定します。 |
ALSA ドライバーを使うように JACK を設定します。 |
||
90行目: | 70行目: | ||
2周期を使うように JACK を設定します。マザーボード, PCI, PCI-X などでは2が適切で USB には3が適切です。 |
2周期を使うように JACK を設定します。マザーボード, PCI, PCI-X などでは2が適切で USB には3が適切です。 |
||
jack_control dps period 64 |
jack_control dps period 64 |
||
− | 1フレームあたり64周期を使うように JACK を設定します。低いほうが遅延が少なくなりますが、このスクリプトの設定では 2.67 ms の遅延になり、ある程度低いわりにはこの例で使うハードウェアにあまり負担をかけません。USB サウンドシステムを使う場合は32にすると良いでしょう。リアルタイムシンセサイズや FX には 3-4 ms 以下なら問題ありません。人間が認識できる限界は 5ms です。CPU に負担をかけずに 1 ms の遅延を処理できる高級なハードウェアもありますが、必ずしも必須とは限りません。QjackCtl は負担を知らせてくれます。負担がない(クライアントが動いていない)とき、最大でも 3-5% の CPU 使用量で、xruns がないと |
+ | 1フレームあたり64周期を使うように JACK を設定します。低いほうが遅延が少なくなりますが、このスクリプトの設定では 2.67 ms の遅延になり、ある程度低いわりにはこの例で使うハードウェアにあまり負担をかけません。USB サウンドシステムを使う場合は32にすると良いでしょう。リアルタイムシンセサイズや FX には 3-4 ms 以下なら問題ありません。人間が認識できる限界は 5ms です。CPU に負担をかけずに 1 ms の遅延を処理できる高級なハードウェアもありますが、必ずしも必須とは限りません。QjackCtl は負担を知らせてくれます。負担がない(クライアントが動いていない)とき、最大でも 3-5% の CPU 使用量で、xruns がないとできない場合は (赤い数字はシステムが要求に答えられていないことを示しています)、ハードウェアを良くする必要があります。 |
sleep 10 |
sleep 10 |
||
利用できるようになるまで待って下さい。 |
利用できるようになるまで待って下さい。 |
||
− | + | a2jmidid -e & |
|
ALSA-to-JACK MIDI ブリッジを起動します。JACK ではなく ALSA を使って MIDI 入力を受け取るアプリケーションのミキシングに使えます。 |
ALSA-to-JACK MIDI ブリッジを起動します。JACK ではなく ALSA を使って MIDI 入力を受け取るアプリケーションのミキシングに使えます。 |
||
sleep 10 |
sleep 10 |
||
99行目: | 79行目: | ||
qjackctl & |
qjackctl & |
||
QjackCtl をロードします。システムトレイに GUI の設定が表示されます。D-Bus によって起動した JACK セッションをスムーズに拾うはずです。手動で起動した JACK アプリケーション間のパッチベイ・接続を管理します。パッチベイは手動の GUI を使って設定しますが、パッチベイの設定済み接続は QjackCtl によってアプリが起動したときに自動で作成されます。 |
QjackCtl をロードします。システムトレイに GUI の設定が表示されます。D-Bus によって起動した JACK セッションをスムーズに拾うはずです。手動で起動した JACK アプリケーション間のパッチベイ・接続を管理します。パッチベイは手動の GUI を使って設定しますが、パッチベイの設定済み接続は QjackCtl によってアプリが起動したときに自動で作成されます。 |
||
− | sleep 10 |
||
− | 利用できるようになるまで待って下さい。 |
||
− | qmidiroute ~/All2MIDI1.qmr & |
||
− | qmidiroute をロードし、全てのチャンネルの MIDI イベントをチャンネル1に書き換えるカスタム設定ファイルを読み込みます。これは PC をキーボードに接続するときに便利です -- デフォルトのキーボードのチャンネルに関係なく、qmidiroute は信号をチャンネル1のシンセに送信します。多数の同時転移や転調、信号タイプの書き換えなど、qmidiroute は多種多様な複雑で便利な設定をすることが可能です。 |
||
− | sleep 10 |
||
− | 利用できるようになるまで待って下さい。 |
||
− | yoshimi -S & |
||
− | Yoshimi シンセサイザーをロードします、保存されているデフォルト状態を使います。 |
||
− | sleep 10 |
||
− | 利用できるようになるまで待って下さい。 |
||
− | |||
− | ログイン時に上記全てをスクリプトで実行し、QjackCtl パッチベイを正しく設定すれば、PC/ノートパソコンに USB-to-MIDI アダプタを使って (もしくは最近のキーボードにある USB-in MIDI を使って)、MIDI キーボードを繋ぐだけで、演奏することができます。 |
||
− | |||
− | QJackCtl の大事なところは [http://www.linuxjournal.com/article/8354 この記事] でほとんど説明されています。 |
||
===GUI を使った設定の例=== |
===GUI を使った設定の例=== |
||
+ | 以下は GUI を使って JACK を設定・管理する例です: |
||
− | 上のシェルを使った例では、たくさんのことを細かく決めて十分に知る必要があります。そうしないと動作しません。GUI を使って設定したい場合は、以下を行なって下さい: |
||
− | * {{Pkg| |
+ | * {{Pkg|python2-dbus}} をインストールしてください。 |
− | |||
− | * {{ic|/etc/asound.conf}} を {{ic|/etc/asound.conf.ORIGINAL}} にコピーして、以下のように置き換えて下さい: |
||
− | |||
− | pcm.pulse { |
||
− | type pulse |
||
− | } |
||
− | ctl.pulse { |
||
− | type pulse |
||
− | } |
||
− | pcm.!default { |
||
− | type pulse |
||
− | } |
||
− | ctl.!default { |
||
− | type pulse |
||
− | } |
||
− | |||
− | * {{Pkg|pulseaudio}} をインストールしてください。 |
||
− | * {{Pkg|pulseaudio-alsa}} をインストールしてください。 |
||
* {{Pkg|qjackctl}} をインストールして、ブート時に起動するように GUI のウィンドウ・デスクトップシステムを設定してください。 |
* {{Pkg|qjackctl}} をインストールして、ブート時に起動するように GUI のウィンドウ・デスクトップシステムを設定してください。 |
||
* QjackCtl が以下のようになっているか確認してください: |
* QjackCtl が以下のようになっているか確認してください: |
||
147行目: | 95行目: | ||
* 再起動してください。 |
* 再起動してください。 |
||
* ログインした後、システムトレイに QjackCtl が表示されるはずです。左クリックしてください。 |
* ログインした後、システムトレイに QjackCtl が表示されるはずです。左クリックしてください。 |
||
− | * QjackCtl GUI で設定を行 |
+ | * QjackCtl GUI で遅延を少なくするように設定を行ってください。遅延に影響を与えるのは Frame Size, Frame Buffer, Bitrate の設定です。フレームサイズを大きくしたり、フレームバッファを少なくしたり、ビットレートの設定を高くすれば遅延が小さくなりますが、サウンドカードや CPU の負担が大きくなります。ライブ音声生成や何らかのフィルタを通すときは遅延を 5ms 以下に抑える必要があります。そうしないとプレイヤーと聞こえてくる音の遅延がはっきりとわかるくらいになっていまいます。 |
+ | |||
− | * [[AUR]] から {{AUR|non-daw}} をインストールしてください。このパッケージのコンポーネントに non-session-manager と呼ばれるものがあり、"セッション"を設定する機能があります: セッションとは Jack が (QjackCtl の patchbay などで) 互いに接続するオーディオソフトウェアのアイテムのセットです。NSM は好きなだけセッションを管理することができ、全てを GUI で設定できます。 |
||
+ | === 別の GUI ベースのセットアップ === |
||
+ | |||
+ | 要求の厳しいタスクに JACK を使用している場合でも、 QjackCtl を使用しているときにだけ、 QjackCtl で実行中の pulseaudio セッションを中断することができます。未使用の設定で、 "Settings" > "Advanced" サブメニューの "Server prefix" オプションを次のように変更します。 |
||
+ | |||
+ | pasuspender -- jackd |
||
+ | |||
+ | QjackCtl を閉じると、 pulseaudio セッションは正常に再開します。ヒントは [https://bbs.archlinux.org/viewtopic.php?pid=1163340#p1163340 こちら] にあります。 |
||
===ALSA を使って再生する=== |
===ALSA を使って再生する=== |
||
− | jack の実行中に Alsa のプログラムが再生できるようにするには alsa の jack プラグインが入っている {{Pkg|alsa-plugins}} をインストールする必要があります。 |
||
+ | {{Note|1={{Pkg|alsa-lib}} と {{Pkg|alsa-plugins}} 1.1.9-2 には、この設定でオーディオが再生されない、またはバッファに関するエラーが発生するいくつかのバグがあります。回避策と解決策については、 [https://bbs.archlinux.org/viewtopic.php?id=250116] を参照してください。}} |
||
− | {{ic|/etc/asound.conf}} (システム全体の設定) に以下の行を含めるように編集 (もしくは作成) して有効にしてください: |
||
+ | ジャックの実行中に alsa プログラムを再生できるようにするには、 {{Pkg|alsa-plugins}}} を使用して alsa のジャックプラグインをインストールする必要があります。 |
||
+ | |||
+ | 単純な2チャンネル設定の場合は、/etc/asound.conf (システム全体の設定) を編集 (または作成) して有効にし、以下の行を追加します。 |
||
{{bc|<nowiki> |
{{bc|<nowiki> |
||
# convert alsa API over jack API |
# convert alsa API over jack API |
||
162行目: | 119行目: | ||
pcm.!default { |
pcm.!default { |
||
type plug |
type plug |
||
− | slave |
+ | slave.pcm "jack" |
+ | hint.description "Jack Audio" |
||
− | } |
||
+ | }</nowiki>}} |
||
+ | 出力/入力チャネルの数が異なる場合、または最初の2つのチャネルがオーディオのルーティング先ではない場合は、 {{ic|/etc/alsa/conf.d/50-jack.conf}} に用意されている定義済みの jack pcm ソースを使用することはできません。 |
||
− | ctl.mixer0 { |
||
+ | {{bc|<nowiki> |
||
− | type hw |
||
+ | # the first jack port goes to an output we do not use and there are no recording devices |
||
− | card 1 |
||
+ | pcm.!jack { |
||
+ | type jack |
||
+ | playback_ports { |
||
+ | 0 system:playback_2 |
||
+ | 1 system:playback_3 |
||
+ | } |
||
} |
} |
||
+ | pcm.!default { |
||
− | # pcm type jack |
||
+ | type plug |
||
− | pcm.jack { |
||
− | + | slave.pcm "jack" |
|
+ | hint.description "Jack Audio" |
||
− | playback_ports { |
||
− | 0 system:playback_1 |
||
− | 1 system:playback_2 |
||
− | } |
||
− | capture_ports { |
||
− | 0 system:capture_1 |
||
− | 1 system:capture_2 |
||
− | } |
||
}</nowiki>}} |
}</nowiki>}} |
||
− | コン |
+ | パソコンなどを再起動する必要はありません。 alsa の設定ファイルを編集して、 jack を起動して下さい。 |
− | ''' |
+ | '''user''' として起動することを忘れないでください。ユーザーX として {{ic|jackd-d alsa}} で起動した場合、ユーザーYに対しては機能しません。 |
− | + | ALSA ループバックデバイス (より複雑ですが、おそらくより堅牢) を使用する別のアプローチは、 [https://alsa.opensrc.org/Jack_and_Loopback_device_as_Alsa-to-Jack_bridge この記事] で説明されています。 |
|
=== gstreamer === |
=== gstreamer === |
||
+ | gstreamer で JACK を使うには {{pkg|gst-plugins-good}} パッケージが必要です。JACK のサポートを追加するプラグインが含まれています。 |
||
− | 例: gconf を使わずにライブストリーミングを視聴する |
||
+ | |||
− | {{bc|<nowiki>gst-launch-0.10 playbin2 uri=http://streamer.stackingdwarves.net/bewerungeroom.ogv audio-sink="jackaudiosink"</nowiki>}} |
||
+ | 適当な GNOME アプリケーションの設定マネージャを使用してください (gconf2, gconf-editor, gstreamer-properties など)。 |
||
+ | |||
+ | 以下のパラメータの値を: |
||
+ | /system/gstreamer/0.12/audio/default/musicaudiosink |
||
+ | /system/gstreamer/0.12/audio/default/audiosink |
||
+ | 以下のように変更してください: |
||
+ | jackaudiosink buffer-time=2000000 |
||
+ | バッファ時間の値はあまり重要ではありませんが、高い値にすることで音が割れにくくなります。 |
||
− | gconftool-2 を使って jack を利用するように gstreamer を設定する |
||
− | gconftool-2 --type string --set /system/gstreamer/0.10/audio/default/audiosink "jackaudiosink buffer-time=2000000" |
||
− | gconftool-2 --type string --set /system/gstreamer/0.10/audio/default/musicaudiosink "jackaudiosink buffer-time=2000000" |
||
− | gconftool-2 --type string --set /system/gstreamer/0.10/audio/default/chataudiosink "jackaudiosink buffer-time=2000000" |
||
− | 参照: http://jackaudio.org/gstreamer_via_jack |
+ | 参照: http://jackaudio.org/faq/gstreamer_via_jack.html |
=== PulseAudio === |
=== PulseAudio === |
||
212行目: | 173行目: | ||
ALSA が firewire デバイスを触らないように、firewire に関連するカーネルモジュールは全てブラックリスト化してください。また、PulseAudio も firewire が使えなくなります。以下のファイルを作成: |
ALSA が firewire デバイスを触らないように、firewire に関連するカーネルモジュールは全てブラックリスト化してください。また、PulseAudio も firewire が使えなくなります。以下のファイルを作成: |
||
− | {{hc|/etc/ |
+ | {{hc|/etc/modprobe.d/alsa-no-jack.conf| |
blacklist snd-fireworks |
blacklist snd-fireworks |
||
blacklist snd-bebob |
blacklist snd-bebob |
||
228行目: | 189行目: | ||
ロードした firewire モジュールをアンロードするか再起動してください。 |
ロードした firewire モジュールをアンロードするか再起動してください。 |
||
+ | |||
+ | === ネットワーク / リモートオーディオ === |
||
+ | |||
+ | JACK は、ネットワーク経由で ''マスター'' マシンにオーディオデータを送信するように設定できます。このマシンは、オーディオを物理デバイスに出力します。これは、追加のケーブルやハードウェアミキサーを必要とせずに、多数の ''スレーブ'' コンピューターからのオーディオをミキシングし、オーディオパスを可能な限りデジタルに保つ場合に便利です (デジタル入力を備えたハードウェアミキサーは非常に稀です) |
||
+ | |||
+ | 構成は非常に単純ですが、マルチキャスト・トラフィックをサポートするネットワーク (つまり、管理対象ネットワークスイッチで IGMP スヌーピングを有効にする必要があります) が必要で、プロトコルはバージョン間で相互運用できないため、すべてのマシンで同じ JACK メジャー・バージョン (JACK1 または JACK2) が実行されている必要があります。JACK2 の場合は、{{ic|netmanager}} モジュールをロードする必要があります。 |
||
+ | |||
+ | {{bc|<nowiki> |
||
+ | master$ jack_load netmanager -i -c |
||
+ | </nowiki>}} |
||
+ | |||
+ | {{ic|-i-c}} オプションは、着信接続をデフォルトのオーディオデバイスに自動的にマッピングするようにネットマネージャに指示します。これがないと、各着信接続を各接続に手動でマッピングする必要があります。代わりに {{ic|-i-h}} を使用して、使用可能なすべてのオプションを表示できます。ただし、オプションは {{ic|jackd}} サーバ出力に出力されるため、 {{ic|jack_load}} コマンドでは何も表示されません。 |
||
+ | |||
+ | クライアントでは、JACK をネットワーク・モードで起動する必要があります。 |
||
+ | |||
+ | {{bc|<nowiki> |
||
+ | slave$ jackd -d net |
||
+ | </nowiki>}} |
||
+ | |||
+ | 2台のマシンが接続され、マスター上に新しいオーディオソースが表示されます。 |
||
+ | |||
+ | {{bc|<nowiki> |
||
+ | master$ jack_lsp |
||
+ | system:playback_1 |
||
+ | system:playback_2 |
||
+ | remotehost:from_slave_1 |
||
+ | remotehost:from_slave_2 |
||
+ | </nowiki>}} |
||
+ | |||
+ | 上記のように {{ic|-c}} オプションを {{ic|jack_load}} に渡すと、リモートシステムはオーディオを再生できるようになります。 |
||
==MIDI== |
==MIDI== |
||
243行目: | 234行目: | ||
QjackCtl では ''MIDI'' タブに "a2j" クライアントとして表示されます。 |
QjackCtl では ''MIDI'' タブに "a2j" クライアントとして表示されます。 |
||
QjackCtl の ''Setup > Options > Execute script after Startup'' に追加することで a2jmidid を自動で起動させることが可能です: {{ic|/usr/bin/a2jmidid -e &}} |
QjackCtl の ''Setup > Options > Execute script after Startup'' に追加することで a2jmidid を自動で起動させることが可能です: {{ic|/usr/bin/a2jmidid -e &}} |
||
+ | {{note|QjackCtl で MIDI キーボードコントローラに接続するときは、最初に ''Expand All'' を押してから適当な ''Output Ports'' (''Readable Clients'') を ''Input Ports'' (''Writable Clients'') に接続してください。ショートカットとして、接続先として個々のポートを選択する代わりに書き換え可能なクライアントを選択することで、表示されている全ての出力端子に接続することができます。}} |
||
− | {{note|When connecting MIDI keyboard controllers in QjackCtl, make sure to ''Expand All'' first and connect the desired ''Output Ports'' (below the ''Readable Clients'') to the ''Input Ports'' (below the ''Writable Clients''). As a shortcut, if you select a writable client instead of individual ports as your destination, it should connect all its currently displayed output ports underneath.}} |
||
*'''Q:''' JACK-MIDI と ALSA-MIDI の違いは何ですか? |
*'''Q:''' JACK-MIDI と ALSA-MIDI の違いは何ですか? |
||
*'''A:''' 前者は MIDI イベント処理のタイミングとサンプルの正確性が良くなっています。後者を置き換えることもできますが、今のところ共存しています。 |
*'''A:''' 前者は MIDI イベント処理のタイミングとサンプルの正確性が良くなっています。後者を置き換えることもできますが、今のところ共存しています。 |
||
− | M-Audio MIDI キーボードをインストールするには、 |
+ | M-Audio MIDI キーボードをインストールするには、ファームウェアパッケージ {{AUR|midisport-firmware}} が必要になります。また、snd_usb_audio モジュールを使えるようにしてください。 |
個別の USB MIDI デバイスに関する情報は http://alsa.opensrc.org/USBMidiDevices を見て下さい。 |
個別の USB MIDI デバイスに関する情報は http://alsa.opensrc.org/USBMidiDevices を見て下さい。 |
||
265行目: | 256行目: | ||
$ ps ax | grep [PID here] |
$ ps ax | grep [PID here] |
||
上記のコマンドで衝突しているプログラムが表示されることがあります。 |
上記のコマンドで衝突しているプログラムが表示されることがあります。 |
||
+ | |||
+ | ===ログに "ALSA: cannot set channel count to 1 for capture" エラー=== |
||
+ | ALSA の入出力チャンネルを 1 から 2 に変更してください。 |
||
+ | |||
+ | ===クラックノイズ・ポップノイズが音に混じる=== |
||
+ | あなたの JACK の設定を処理するには CPU やサウンドカードの能力が不足しています。ノイズが止むまでビットレートやフレームサイズを下げるか、フレーム間隔を少しずつ上げてみてください。 |
||
===特定のアプリケーションの問題=== |
===特定のアプリケーションの問題=== |
||
273行目: | 270行目: | ||
* オーディオ > 出力モジュール > オーディオ出力モジュール: JACK オーディオ出力 |
* オーディオ > 出力モジュール > オーディオ出力モジュール: JACK オーディオ出力 |
||
* オーディオ > 出力モジュール > JACK: 書き込み可能なクライアントに自動的に接続 (有効にする) |
* オーディオ > 出力モジュール > JACK: 書き込み可能なクライアントに自動的に接続 (有効にする) |
||
+ | |||
+ | ==参照== |
||
+ | |||
+ | * [https://github.com/jackaudio/jackaudio.github.com/wiki/Differences-between-jack1-and-jack2 JACK 1 と JACK2 の違い] |
||
+ | * [http://jackaudio.org/faq/ JACK FAQ] |
2024年7月10日 (水) 21:09時点における最新版
関連記事
インストール
JACK を動かすには、/etc/security/limits.d/99-audio.conf
で ulimit を高く定義 (音声をリアルタイム処理するのに必須) できるようにユーザーを audio
グループに追加する必要があります。
JACK の実装は2つあります。違いについては この比較 を見て下さい。簡単に説明すると、Jack 1 と Jack 2 はどちらも同じプロトコルの実装です。Jack 1 でコンパイルされたプログラムは特に修正を加えなくても Jack 2 で動作します (逆もしかり)。
JACK2
JACK2 はマルチプロセッサハードウェア向けに書きなおされています。jack2 パッケージでインストールしてください。環境が64ビットで JACK が必要な32ビットのアプリケーションを動かす必要がある場合は、multilib リポジトリから lib32-jack2 もインストールしてください。jack_controll コマンド を使用するには、python-dbus パッケージもインストールします。
JACK
また、jack パッケージでインストールできる、旧式の JACK も存在します。環境が64ビットで JACK が必要な32ビットのアプリケーションを動かす必要がある場合は、multilib リポジトリから lib32-jack もインストールしてください。
GUI
- Cadence — オーディオプロダクション向けの便利なツールのセット。システムチェックや JACK の管理、他のツールの呼び出しなどの設定を行います。
- Patchage — JACK と ALSA ベースのオーディオ・MIDI 環境向けのモジュール式パッチベイ。
- PatchMatrix — マトリックス方式の JACK パッチベイ。
- QjackCtl — JACK サウンドサーバーデーモンを制御するシンプルな Qt アプリケーション。
基本設定
概要
ハードウェアやアプリケーションの適切な設定は様々な要因によって決まります。JACK を使用する場合、サウンドカードと CPU が遅延に強い影響を与えます。
メインライン Linux カーネルはリアルタイムスケジューリングをサポートしているため、カーネルにパッチを適用することは必ずしも必須ではありません。linux-rtAUR パッケージは遅延をさらに少なくするためのパッチが複数適用されています。
シェルを使った設定の例
JACK2 は 実行可能ファイル jackd から直接起動することも、D-Busベースの jack_control バイナリで制御することもできます。 jack_control を使用すると、シェルスクリプトを介して、JACK2 を簡単に起動および設定できます。Jack_control を使用するには、python-dbus パッケージをインストールする必要があることに注意してください。
シェルスクリプトを作成して X のログイン時に起動するようにできます:
start_jack.sh
#!/bin/bash jack_control start jack_control ds alsa jack_control dps device hw:HD2 jack_control dps rate 48000 jack_control dps nperiods 2 jack_control dps period 64 sleep 10 a2jmidid -e & sleep 10 qjackctl &
これにより、他のプログラムが利用できる動作中のJACKインスタンスを開始します。各行の詳細は次のとおりです。最適な設定を探す際には、D-Bus を使わないバージョンの JACK2 で QJackCtl の GUI を使って色々と試すと良いでしょう。
シェルを使った設定の例の概要
jack_control start
JACK を起動します (起動していない場合)。
jack_control ds alsa
ALSA ドライバーを使うように JACK を設定します。
jack_control dps device hw:HD2
HD2 という名前の ALSA 対応のサウンドカードを使うように JACK を設定します。cat /proc/asound/cards
で名前を見つけることができます。ALSA チュートリアルやデフォルト設定ではカードの番号を使っていますが、外部 MIDI デバイスを使うときに混乱のもとになるので、名前を使うほうが楽です。
jack_control dps rate 48000
48000 khz サンプリングを使うように JACK を設定します。このハードではこれで上手く動きます。カードによっては 44100 だったり、もっと高い数値を使ったりします。数値を上げれば上げるだけ、レイテンシが少なくなりますが、カードや CPU を良い物にする必要があり、ソフトウェアもサポートしている必要があります。
jack_control dps nperiods 2
2周期を使うように JACK を設定します。マザーボード, PCI, PCI-X などでは2が適切で USB には3が適切です。
jack_control dps period 64
1フレームあたり64周期を使うように JACK を設定します。低いほうが遅延が少なくなりますが、このスクリプトの設定では 2.67 ms の遅延になり、ある程度低いわりにはこの例で使うハードウェアにあまり負担をかけません。USB サウンドシステムを使う場合は32にすると良いでしょう。リアルタイムシンセサイズや FX には 3-4 ms 以下なら問題ありません。人間が認識できる限界は 5ms です。CPU に負担をかけずに 1 ms の遅延を処理できる高級なハードウェアもありますが、必ずしも必須とは限りません。QjackCtl は負担を知らせてくれます。負担がない(クライアントが動いていない)とき、最大でも 3-5% の CPU 使用量で、xruns がないとできない場合は (赤い数字はシステムが要求に答えられていないことを示しています)、ハードウェアを良くする必要があります。
sleep 10
利用できるようになるまで待って下さい。
a2jmidid -e &
ALSA-to-JACK MIDI ブリッジを起動します。JACK ではなく ALSA を使って MIDI 入力を受け取るアプリケーションのミキシングに使えます。
sleep 10
利用できるようになるまで待って下さい。
qjackctl &
QjackCtl をロードします。システムトレイに GUI の設定が表示されます。D-Bus によって起動した JACK セッションをスムーズに拾うはずです。手動で起動した JACK アプリケーション間のパッチベイ・接続を管理します。パッチベイは手動の GUI を使って設定しますが、パッチベイの設定済み接続は QjackCtl によってアプリが起動したときに自動で作成されます。
GUI を使った設定の例
以下は GUI を使って JACK を設定・管理する例です:
- python2-dbus をインストールしてください。
- qjackctl をインストールして、ブート時に起動するように GUI のウィンドウ・デスクトップシステムを設定してください。
- QjackCtl が以下のようになっているか確認してください:
- D-Bus インターフェイスを使用する
- ブート時に起動する
- 設定をデフォルトの場所に保存する
- アプリケーションの起動時に JACK オーディオサーバーを起動する
- システムトレイアイコンを有効にする
- システムトレイに最小化された状態で起動する
- 再起動してください。
- ログインした後、システムトレイに QjackCtl が表示されるはずです。左クリックしてください。
- QjackCtl GUI で遅延を少なくするように設定を行ってください。遅延に影響を与えるのは Frame Size, Frame Buffer, Bitrate の設定です。フレームサイズを大きくしたり、フレームバッファを少なくしたり、ビットレートの設定を高くすれば遅延が小さくなりますが、サウンドカードや CPU の負担が大きくなります。ライブ音声生成や何らかのフィルタを通すときは遅延を 5ms 以下に抑える必要があります。そうしないとプレイヤーと聞こえてくる音の遅延がはっきりとわかるくらいになっていまいます。
別の GUI ベースのセットアップ
要求の厳しいタスクに JACK を使用している場合でも、 QjackCtl を使用しているときにだけ、 QjackCtl で実行中の pulseaudio セッションを中断することができます。未使用の設定で、 "Settings" > "Advanced" サブメニューの "Server prefix" オプションを次のように変更します。
pasuspender -- jackd
QjackCtl を閉じると、 pulseaudio セッションは正常に再開します。ヒントは こちら にあります。
ALSA を使って再生する
ジャックの実行中に alsa プログラムを再生できるようにするには、 alsa-plugins} を使用して alsa のジャックプラグインをインストールする必要があります。
単純な2チャンネル設定の場合は、/etc/asound.conf (システム全体の設定) を編集 (または作成) して有効にし、以下の行を追加します。
# convert alsa API over jack API # use it with # % aplay foo.wav # use this as default pcm.!default { type plug slave.pcm "jack" hint.description "Jack Audio" }
出力/入力チャネルの数が異なる場合、または最初の2つのチャネルがオーディオのルーティング先ではない場合は、 /etc/alsa/conf.d/50-jack.conf
に用意されている定義済みの jack pcm ソースを使用することはできません。
# the first jack port goes to an output we do not use and there are no recording devices pcm.!jack { type jack playback_ports { 0 system:playback_2 1 system:playback_3 } } pcm.!default { type plug slave.pcm "jack" hint.description "Jack Audio" }
パソコンなどを再起動する必要はありません。 alsa の設定ファイルを編集して、 jack を起動して下さい。
user として起動することを忘れないでください。ユーザーX として jackd-d alsa
で起動した場合、ユーザーYに対しては機能しません。
ALSA ループバックデバイス (より複雑ですが、おそらくより堅牢) を使用する別のアプローチは、 この記事 で説明されています。
gstreamer
gstreamer で JACK を使うには gst-plugins-good パッケージが必要です。JACK のサポートを追加するプラグインが含まれています。
適当な GNOME アプリケーションの設定マネージャを使用してください (gconf2, gconf-editor, gstreamer-properties など)。
以下のパラメータの値を:
/system/gstreamer/0.12/audio/default/musicaudiosink /system/gstreamer/0.12/audio/default/audiosink
以下のように変更してください:
jackaudiosink buffer-time=2000000
バッファ時間の値はあまり重要ではありませんが、高い値にすることで音が割れにくくなります。
参照: http://jackaudio.org/faq/gstreamer_via_jack.html
PulseAudio
pulseaudio をインストールしたままにしたい場合 (gnome-settings-daemon など他のパッケージによって必要なときなど)、PulseAudio が X と一緒に自動で起動して JACK を乗っ取ってしまうのを防ぐ必要があります。
/etc/pulse/client.conf
を編集して "autospawn" をアンコメントして "no" に設定してください:
;autospawn = yes autospawn = no
JACK と PulseAudio 両方で再生したい場合、次を参照: PulseAudio/サンプル#PulseAudio と JACK
Firewire
ALSA が firewire デバイスを触らないように、firewire に関連するカーネルモジュールは全てブラックリスト化してください。また、PulseAudio も firewire が使えなくなります。以下のファイルを作成:
/etc/modprobe.d/alsa-no-jack.conf
blacklist snd-fireworks blacklist snd-bebob blacklist snd-oxfw blacklist snd-dice blacklist snd-firewire-digi00x blacklist snd-firewire-tascam blacklist snd-firewire-lib blacklist snd-firewire-transceiver blacklist snd-fireface blacklist snd-firewire-motu
モジュールのリストは Alsa Firewire Improve Repository に書かれているのが最新です。
ロードした firewire モジュールをアンロードするか再起動してください。
ネットワーク / リモートオーディオ
JACK は、ネットワーク経由で マスター マシンにオーディオデータを送信するように設定できます。このマシンは、オーディオを物理デバイスに出力します。これは、追加のケーブルやハードウェアミキサーを必要とせずに、多数の スレーブ コンピューターからのオーディオをミキシングし、オーディオパスを可能な限りデジタルに保つ場合に便利です (デジタル入力を備えたハードウェアミキサーは非常に稀です)
構成は非常に単純ですが、マルチキャスト・トラフィックをサポートするネットワーク (つまり、管理対象ネットワークスイッチで IGMP スヌーピングを有効にする必要があります) が必要で、プロトコルはバージョン間で相互運用できないため、すべてのマシンで同じ JACK メジャー・バージョン (JACK1 または JACK2) が実行されている必要があります。JACK2 の場合は、netmanager
モジュールをロードする必要があります。
master$ jack_load netmanager -i -c
-i-c
オプションは、着信接続をデフォルトのオーディオデバイスに自動的にマッピングするようにネットマネージャに指示します。これがないと、各着信接続を各接続に手動でマッピングする必要があります。代わりに -i-h
を使用して、使用可能なすべてのオプションを表示できます。ただし、オプションは jackd
サーバ出力に出力されるため、 jack_load
コマンドでは何も表示されません。
クライアントでは、JACK をネットワーク・モードで起動する必要があります。
slave$ jackd -d net
2台のマシンが接続され、マスター上に新しいオーディオソースが表示されます。
master$ jack_lsp system:playback_1 system:playback_2 remotehost:from_slave_1 remotehost:from_slave_2
上記のように -c
オプションを jack_load
に渡すと、リモートシステムはオーディオを再生できるようになります。
MIDI
JACK は1つのサウンドカードと、(USB などで接続された) 任意の数の MIDI デバイスを扱うことができます。 JACK を起動して、MIDI キーボードやシンセサイザーやその他のピュア MIDI デバイスを使用したい場合、適当なサウンドカードを使って JACK を起動する必要があります (PCM 音源を入出力するサウンドカード)。 そうすればすぐに、MIDI デバイスを接続して QjackCtl (qjackctl) などで接続ボタンをクリックすれば、(ドライバーによって) JACK-MIDI か ALSA-MIDI の下にデバイスが表示されます。
JACK-MIDI の場合、QjackCtl の Setup > Settings で MIDI Driver を seq または raw に設定してください。これで MIDI デバイスが MIDI タブに表示されるはずです。また、Setup > Display > Enable client/port aliases と Enable client/port aliases editing (rename) を有効にすれば、クライアントの名前を (共通の "midi_capture_1" という名前から意味のある名前に) 変更することができます
ALSA-MIDI の場合、QjackCtl の Setup > Misc で Enable ALSA Sequencer support をオンにしてください。これで QjackCtl の Connect ウィンドウに ALSA タブが追加され MIDI コントローラーがそこに表示されます。
ALSA-MIDI を JACK-MIDI にブリッジするには、a2jmidid (a2jmidid) を使って下さい。次のコマンドは全ての ALSA MIDI ポートを JACK MIDI ポートに伝えます:
$ a2jmidid -e
QjackCtl では MIDI タブに "a2j" クライアントとして表示されます。
QjackCtl の Setup > Options > Execute script after Startup に追加することで a2jmidid を自動で起動させることが可能です: /usr/bin/a2jmidid -e &
- Q: JACK-MIDI と ALSA-MIDI の違いは何ですか?
- A: 前者は MIDI イベント処理のタイミングとサンプルの正確性が良くなっています。後者を置き換えることもできますが、今のところ共存しています。
M-Audio MIDI キーボードをインストールするには、ファームウェアパッケージ midisport-firmwareAUR が必要になります。また、snd_usb_audio モジュールを使えるようにしてください。 個別の USB MIDI デバイスに関する情報は http://alsa.opensrc.org/USBMidiDevices を見て下さい。
トラブルシューティング
起動時に "Cannot lock down memory area (Cannot allocate memory)" というメッセージが表示される
リアルタイムプロセス管理#PAM の設定を見て下さい。そしてユーザーが audio
グループに属していることを確認してください。
jack2-dbus と qjackctl のエラー
(jack2-dbus パッケージをインストールしていて) qjackctl の start ボタンを押すと "Cannot allocate memory" や "Cannot connect to server socket err = No such file or directory" などのエラーが発生する場合 ~/.jackdrc
, ~/.config/jack/conf.xml
, ~/.config/rncbc.org/QjackCtl.conf
を削除してください。jackdbus を終了し、初めから再起動してください。
(Thanks to nedko)
以下も試して下さい:
$ fuser /dev/snd/*
PID で確認するには:
$ ps ax | grep [PID here]
上記のコマンドで衝突しているプログラムが表示されることがあります。
ログに "ALSA: cannot set channel count to 1 for capture" エラー
ALSA の入出力チャンネルを 1 から 2 に変更してください。
クラックノイズ・ポップノイズが音に混じる
あなたの JACK の設定を処理するには CPU やサウンドカードの能力が不足しています。ノイズが止むまでビットレートやフレームサイズを下げるか、フレーム間隔を少しずつ上げてみてください。
特定のアプリケーションの問題
VLC - JACK を起動した後に音が鳴らない
VLC を起動して以下のメニューオプションを変更してください:
- ツール > 設定
- 設定の表示: 全て
- オーディオ > 出力モジュール > オーディオ出力モジュール: JACK オーディオ出力
- オーディオ > 出力モジュール > JACK: 書き込み可能なクライアントに自動的に接続 (有効にする)