対象とするUbuntu Studioのバージョン
- これまでリリースされたすべてのバージョン
Ubuntu標準のサウンドサーバはPulseAudioですが、Ubuntu StudioではJACKサウンドサーバが標準でインストールされています。
基本的に、ひとつのサウンドデバイスはひとつのアプリケーションの音声データしか受けとることが出来ないため、サウンドサーバによるミックスがなければ、一度に一つのアプリケーションの音声を出すことしかできなくなります。
サウンドサーバというのは、様々なアプリケーションが出力する音声データを集めてそれをミックスし、サウンドデバイスに出力するソフトウェアのことです。また、アプリケーションからの音声出力と別なアプリケーションの音声入力を仲介することで、録音や放送をすることを可能にしています。
JACKサウンドサーバについて
JACKサウンドサーバは以下の特徴を持っています。
- バッファを任意の大きさに調整することが容易なため、レイテンシの低減が簡単です
- リアルタイム性能を高めて動作することが可能です
- アプリケーションもサウンドデバイスもポートを開くように設定され、それらの間を自由に接続することが可能です
- JACK Transport機能により、アプリケーションの演奏位置を同期することができます
- ドライバにFFADOライブラリを指定することで、ALSAやOSSでは使うことの出来ないFirewire接続のサウンドデバイスを使うことができる
- JACK対応のMIDIデバイス/アプリケーションが存在するが、ALSA対応のMIDIデバイスもJACK上のMIDIデバイスとして利用可能。
- 10.10で導入されたJACKのバージョン2では、ネットワークを経由して遠隔マシンとの音声同期が可能です
- そして上記すべての操作を、GUIアプリケーション「qjackctl」で可能です
JACKサウンドサーバの起動
JACKサウンドサーバの実体は「jackd」という名前の常駐ソフトウェアであり、端末などでコマンドラインを実行することで操作を行うことも出来ますが、qjackctlというGUIフロントエンドで操作することができます。Ubuntu Studioではメニューの「JACK Control」でqjackctlを起動することができます。
ボタン「Setup」で開くウィンドウで、接続するサウンドデバイスなどの設定を行います。
ボタン「Start」でサーバを起動します。
接続できるサウンドデバイスについて
サウンドデバイスは以下のものを扱うことができます。それぞれ、カーネルモジュールあるいはライブラリが対応している必要があります。
- PCI/PCI-Expressバス接続のもの
ALSAカーネルモジュールあるいはOpen Sound Systemが対応しているもの。ALSA SoundCard MatrixまたはOpen Sound System Supported Devicesを参照して下さい。
- USB接続のもの
ALSAカーネルモジュールあるいはOpen Sound Systemが対応しているもの。ALSA SoundCard MatrixまたはOpen Sound System Supported Devicesを参照して下さい。
- Firewire(IEEE1394)接続のもの
FFADOライブラリが対応しているもの。FFADO device support databaseを参照して下さい。
また、ネットワーク越しに他のマシンで稼働しているJACKサウンドサーバに接続することができます。
加えて、dummyデバイスに接続することで、サウンドデバイスを使わずにJACKサウンドサーバを起動することができます。レンダリングの際、不必要にマシンパワーを割くことがなくなります。
ドライバの選択は、JACK ControlのSetupウィンドウのプルダウンリスト「Driver」で行います。
DriverでALSAを選択している場合に限り、セレクトリスト「Interface」でシステムに認識されているデバイスを任意に選択することができます。
接続について
JACKサウンドサーバを起動すると、サウンド関連の全てのデバイス/アプリケーションの入出力はポートに仮想化されます。これは、音データだけではなく、MIDIに関しても同様です。ポート間の接続は、JACK Controlのボタン「connect」によって開くウィンドウで行います。
ウィンドウ「Connect」のAudioタブでは、音データの入出力を接続します。サウンドデバイスの入出力ポートは「system」というIDとなっています。
ウィンドウ「Connect」のMIDIタブでは、JACKシーケンサにMIDIの入出力ポートを開いているアプリケーション/サウンドデバイス間を接続します。Firewire(IEEE1394)接続のサウンドデバイスに設けられているMIDI機能は、こちらにポートを開きます。
ウィンドウ「Connect」のALSAタブでは、ALSAシーケンサにMIDIの入出力ポートを開いているアプリケーション/サウンドデバイス間を接続します。PCI/PCI-Expressバス接続やUSB接続のサウンドデバイスに設けられているMIDI機能は、こちらにポートを開きます。
JACK Transportについて
JACK Transportに対応しているアプリケーションのみ、演奏位置の同期をすることができます。アプリケーションによってはALSAシーケンサ機能で提供されるMTC (MIDI Time Code) と同期し、音声の入出力ポートのみJACKサウンドサーバに開くものもあります。
この画面では、左上にJACK Controlのトランスポートウィンドウ、左にRosegardenのトランスポートウィンドウ、左下にxjadeoのウィンドウ、右上にRenoiseのウィンドウが、右下にArdour GTK+のウィンドウが表示されています。それぞれ同じタイムコードを示しており、同期して動作している事がわかります。
レイテンシについて
サウンドサーバの主要機能であるミックスを行う際、各アプリケーションあるいはサウンドデバイスが発生させた音声データをいったん貯めておき、処理に必要な分量だけ読み出して処理を行います。これが原因で、発音タイミングの遅れ=レイテンシが発生します。なお、この貯めておく部分をバッファと呼びます。
再生のみ行う環境ではレイテンシを低減する必要はありませんが、サウンドデバイスから録音した音声を処理してサウンドデバイスで再生するとか、ソフトウェアシンセサイザをリアルタイムで演奏するなどの用途の場合、レイテンシは可能な限り小さな方がよいでしょう。
JACKサウンドサーバはこのバッファのサイズを柔軟に変更することができます。JACK ControlのSetupウィンドウで設定します。
- 「Frames/Period」オプションは、ピリオドひとつあたりに読み込むフレーム数を指定します
- 「Sample Rate」オプションは、1秒間のフレーム数(サンプリング周波数)を設定します
- 「Periods/Buffer」オプションは、1バッファをいくつのピリオドに分割するか指定します
- 「Latency」は、現在の設定値における、1バッファのサンプル時間を表示します
「Latency」に表示される値は、以下の計算式で計算されます。
「Periods/Buffer」値×「Frames/Period」値÷「Sample Rate」値×1000 (ミリ秒)
リアルタイム優先実行について
JACKサウンドサーバは、リアルタイム優先実行オプションを有効にすることで、更なるレイテンシの低減を期待できます。このオプションを有効にすると、Linuxカーネルのスケジューリングにおいて、優先的に処理されるグループに登録されるようになります。
- 「Realtime」オプションは、リアルタイム優先実行を有効にします
- 「No Memory Lock」はメモリー制限を解除します
- 「Priority」オプションは、「Realtime」オプションが有効になっている場合に限り、その優先度を設定します。
しかしこの設定は、PAM (Pluggable Authentication Modules) によってユーザによるリアルタイム優先実行が許可されている必要があります。jackdのインストール過程でリアルタイム実行優先を選択している場合に作成されるファイル「/etc/security/limits.conf.d/audio.conf」により設定されます。@audioはグループ「audio」に属するユーザを示します。
@audio - rtprio 99 @audio - memlock unlimited @audio - nice -19










