Chienomi

Manjaro LinuxでJACK (JACK Audio Connection Kit)

manjaro

Mimir Yokohamaの授業で必要になったので、ちゃんとJACK試すことにした。

割と大変だったので共有しておく。

なお、私の環境ではオーディオデバイスは4つある。

  • Intel HDA
  • AMD Radeon Ellesmere HDMI Audio
  • Audio4DJ
  • US-366

ただし、このうちUS-366はLinux上で動作しない。

ここでの目標はAudio4DJのチャンネルBで鳴らすこと。 Audio4DJはチャンネルを2つ持っていて、チャンネルBはスピーカーとヘッドフォンの両方から出るようになっている。

また、Manjaro Linuxなので最初からJACKもPulseAudioも入っている前提。

JACKって?

PulseAudioが世界1を支配する以前の混沌世界において燦然と輝くプロフェッショナル仕様のサウンドサーバである。

ESDやaRtsと違ってルーティングを中心に考えられていた、ソフトウェアパッチベイだったのが特徴。MIDIにも対応している。

「高機能、故に複雑」の典型であり、しかもその高機能というのがものすごく限られた人にしか求められていないものなので、大抵の人にとっては関心の外。限られた人というのは

  • レイテンシ大事 (音楽制作するとか、PCにつないで演奏するとか、音ゲーするとか)
  • ハイレゾ派

である。

現在に至ってはPulseAudioがあって、だいたいPulseAudio使っていれば欲しい結果に至るため、なおさら使われない。

実作業

qjackctlを入れる

Jackをコマンドラインで操作するのは非人道的なので、qjackctlを入れておく。

サウンドデバイスを確認

aplay -lが見やすい。

% aplay -l
**** ハードウェアデバイス PLAYBACK のリスト ****
カード 0: Audio4DJ [Audio 4 DJ], デバイス 0: Audio 4 DJ [Audio 4 DJ]
  サブデバイス: 0/2
  サブデバイス #0: subdevice #0
  サブデバイス #1: subdevice #1
カード 1: PCH [HDA Intel PCH], デバイス 0: ALC662 rev3 Analog [ALC662 rev3 Analog]
  サブデバイス: 0/1
  サブデバイス #0: subdevice #0
カード 2: HDMI [HDA ATI HDMI], デバイス 3: HDMI 0 [HDMI 0]
  サブデバイス: 1/1
  サブデバイス #0: subdevice #0
カード 2: HDMI [HDA ATI HDMI], デバイス 7: HDMI 1 [HDMI 1]
  サブデバイス: 1/1
  サブデバイス #0: subdevice #0
カード 2: HDMI [HDA ATI HDMI], デバイス 8: HDMI 2 [HDMI 2]
  サブデバイス: 1/1
  サブデバイス #0: subdevice #0
カード 2: HDMI [HDA ATI HDMI], デバイス 9: HDMI 3 [HDMI 3]
  サブデバイス: 1/1
  サブデバイス #0: subdevice #0
カード 2: HDMI [HDA ATI HDMI], デバイス 10: HDMI 4 [HDMI 4]
  サブデバイス: 1/1
  サブデバイス #0: subdevice #0
カード 2: HDMI [HDA ATI HDMI], デバイス 11: HDMI 5 [HDMI 5]
  サブデバイス: 0/1
  サブデバイス #0: subdevice #0

RX580、HDMIとDP全部足しても5つしかないのに、サウンドデバイスが5つもあるな…

PAMをいじる

/etc/security/limits.confに次の内容を追加。

@realtime        -       rtprio          99
@realtime        -       memlock         unlimited

グループの追加

audioグループとrealtimeグループに当該ユーザーを追加する。

このあとリログすればいいはずなのだけど、なぜかリログしても反映されなかったのでリブートすることになった。(それに気づかずちょっとハマった)

PulseAudioから除外する

pavucontrolでミキサーを開いたら、「設定」から当該デバイスを「オフ」にする。

これでPulseAudioはデバイスを手放す。

CPU GovernerをPerformanceに

sudo cpupower freqency-set -g performance

qjackctlを起動して設定

qjackctlを起動したら「設定」から必要な設定を行う。

インターフェイスはaplay -lで確認したものと同じ。

ドライバーはalsaで良い(恐らく最初からそうなっている)。

Jackを使うだけなら、PAMをいじってグループを追加する作業を省略して、「リアルタイム」というのをオフにすれば機能する。

サンプルレートはデバイスが対応しているものを指定する。 一応、/proc/asound/card*/codec#0というファイルに書いてあるのだけど、Audio4DJはそもそもこのファイルがなかった。 (もっとも、私はAudio4DJが44100,44800,96000なのは知っているので問題ない)

高くすれば音質がいい、みたいに思うかもしれないが、音源と等しいのが最も良い。 CDなら44100だし、44100は大体サポートされているから、44100が多分一番いい。 逆に、ハイレゾを再生するのに44100にしているとハイレゾの意味がほぼない(ビット深度はまた別だから意味があるかもしれない)。 44100と48000のどちらかしかサポートされていないカードというのも、まぁまぁある。

なお、何度も何度も言うけれど、音楽制作では普通、20kHzより上(というより大体16kHzより上)なんてただのノイズなのでばっさり切っているからハイサンプリングレートなんてライブ音源でもない限り意味がない。だって、フォーマット的に鳴るようになっていたって、データ的に消してあるんだから。

フレーム/ピリオドは小さくすればリアルタイム性は上がるけど、それは動くのを確認してから。 詰め過ぎ注意。

あとは「その他」はお好みで。この状態ではD-Busは使えない。

ここまでやったら、「メッセージ」を開いておき、「開始」をクリック。 うまくいったらおめでとう。

Jackを試す

mpvを使うのが楽。

mpv --ao=jack some-sound-file.mp3

鳴らなかったらなぜ鳴らないかを考える。

Audio4DJ Channel-B

Audio4DJのデバイス指定自体はhw:Audio4DJでいいのだけど、これだとhw:Audio4DJ,0,0なのでChannel Aで鳴る。

Channel Bで鳴らしたい場合、選択肢にないので、インターフェイスを編集してhw:Audio4DJ,0,1と書く必要がある(デバイス0, サブデバイス1)。

私の場合、HDMIもデバイス指定が見つからなかった。

Jack2を使う

jack2パッケージもある(デフォルトで入ってはいない)。

Jack2を使う場合は、D-Busが使えるので、jack2にパッケージを置き換えるだけでqjackctlでのD-Busオンが効く。

ただ、D-Busなしで確かめてからにしないと混乱することになる。

リアルタイムカーネルはいらない

普通のカーネルでも十分レイテンシは詰められたし、リアルタイムカーネルの必要性は感じなかった。

(現在のカーネルは低遅延に対応している)

PulseAudio経由

pulseaudio-jackパッケージを入れると、PulseAudio側でJackに対応してくれる。

「アプリケーションがPulseAudioで鳴らした音をJackに渡したい」という場合、

pacmd load-module module-jack-sink

でOK。 この方法を使ってJackで鳴らすメリットがほとんど見つからないけれど、Jackで使っているオーディオデバイスがPulseAudioで鳴らせないので、Jack非対応アプリケーションでもそのサウンドデバイスから鳴らしたい場合に有効。

Pro Audioしましょ?

pro-audioグループに音楽制作系のパッケージがごっそり入っている。

ぶっちゃけ、音楽制作環境としてはニコニコに上げる程度の話だとしても、Linux Pro Audioってまるで話にならないのだけど、「音楽制作体験したい」程度のレベルであればWindowsでフリー音源揃えたりするよりは、色々と整った状態で始められる。

でも現実問題として、Studio OneとかCakewalk by Bandlab.とかは無料でDAW自体は手に入るわけで(特にCakewalk by Bandlab.は最新の完全なSONAR)、操作性とか機能性とか圧倒的にそっちのほうがいいし、本格的にやろうってなったときにも繋がりやすい。 音源も、KOMPLETE Startとか、UVI Workstationとか入れると普通に使えてしまうし。

そうだからつまり、音楽制作者だからといって、別にLinuxでJack使うわけじゃないのが現実。 一応、パッとでもしたい時などのためにPro Audioは入れてはいるけれども。

※ 私はプロの音楽家であり、音楽作る仕事している。

Linux Musicianとか色々とだいぶ特殊すぎる。


  1. 真面目にいうと、Linuxのサウンドシステムの世界である。↩︎