LinuxでMIDIキーボード環境を作る with REAPER
はじめに
こんにちは。calloc134 です。
最近 MIDI キーボードを購入し、これを Manjaro Linux 上の DAW で利用したいと思い試したところいくつかの問題に遭遇したため、解決方法についてまとめてみました。
環境
- OS: Linux Manjaro Cinnamon Edition
- DAW: REAPER v7.16-2
- MIDI キーボード: Roland A-49
Manjaro Linux の環境については以下にまとめてあります。
事前知識
Linux の音声環境は歴史的経緯が存在し、少し複雑です。
ALSA, PulseAudio, JACK などがあり、それぞれの役割が異なります。
以下のサイトを参考に、軽くまとめていきます。
ALSA
ALSA とは、Advanced Linux Sound Architecture の略で、Linux における音声デバイスのドライバを提供するサブシステムです。
基本的にはサウンドデバイスに近い部分を担当しているとイメージすると良いでしょう。
PulseAudio
PulseAudio とは、ALSA の上位に位置するオーディオサーバです。
Manjaro Linux にはデフォルトでこれがインストールされています。
複数のアプリケーションからの音声をうまくミキシングし、出力することができます。
DAW などの低遅延が求められるソフトウェアにはあまり向きませんが、普段使いの音楽再生などには適しています。
- 操作方法
-
pavucontrol
コマンドで GUI が起動します。 - ここで、音声デバイスの設定を行うことができます。
- Manjaro Linux にはデフォルトでインストールされているため、特に設定は必要ありません。
-
JACK
JACK とは、Jack Audio Connection Kit の略で、Linux におけるオーディオサーバです。
JACK の特徴として、低遅延・リアルタイムで高品質なオーディオ処理が可能であることが挙げられます。ただし、設定が少し複雑であり、普段使いには向いていないところがあります。
Manjaro Linux にはデフォルトでインストールされていませんが、インストールすることができます。
- 操作方法
-
qjackctl
コマンドで GUI が起動します。 - ここで、音声デバイスの設定を行うことができます。
-
イメージとしては、以下のような想像をすると良いでしょう。
https://gihyo.jp/admin/serial/01/ubuntu-recipe/0177 より引用
今回の問題
REAPER で MIDI キーボードを利用しようと思い接続したのですが、REAPER 側で MIDI キーボードを認識してくれませんでした。
この原因として、REAPER の MIDI 入力は JACK MIDI のみをサポートしており、ALSA MIDI はサポートされていないためであると考えられます。
(ここについては自分も詳しく理解できていなかったので調査が必要です)
これの解決策として、以下の二点を設定する必要があるようでした。
- REAPER のオーディオデバイスを PulseAudio から JACK に変更
- a2jmidid を利用して ALSA MIDI デバイスを JACK MIDI デバイスへブリッジ
また、これに伴って以下の変更が必要になります。
- オーディオデバイスを JACK に管理させるように変更
- PulseAudio から JACK への音声の送信
調査した結果、JACK は低遅延で高品質なオーディオ処理が可能であることがわかったため、挑戦してみることにしました。
最終的な理想像は以下のようになります。
- PulseAudio は通常の音声再生に利用し、音声データを JACK に送信
- REAPER は直接 JACK に接続
- オーディオデバイスは a2jmidid を利用して JACK MIDI デバイスとしてブリッジし JACK に接続
- JACK がオーディオデバイスを利用して音声を再生
解決方法
JACK のインストール
Manjaro Linux には JACK はデフォルトでインストールされていないため、インストールする必要があります。
sudo pacman -S jack2 jack2-dbus qjackctl pulseaudio-jack
それぞれのパッケージについて簡単に説明します。
jack2
jack の本体です。
jack2-dbus
jack の dbus インターフェースを提供するためのパッケージです。
jack_control コマンドを利用するために必要です。
qjackctl
jack を GUI で設定するためのツールです。
今回は利用しませんでした。
pulseaudio-jack
PulseAudio と JACK を連携させるためのパッケージです。
これにより、Jack Sink と Jack Source という名前の PulseAudio デバイスが作成されます。
Jack Sink は、PulseAudio の音声を JACK に送信するためのデバイスです。
Jack Source は、JACK の音声を PulseAudio で受信するためのデバイスです。
それぞれ PulseAudio からは入力と出力として認識されます。
今回は Jack Source は利用しません。
JACK の起動
jack_control start
JACK の設定
JACK のドライバーを ALSA に設定します。
jack_control ds alsa
JACK のデバイスを設定します。まず、デバイスの一覧を表示します。
cat /proc/asound/cards
ここで、現在接続しているオーディオデバイスの番号を確認します。
例を以下に示します。
0 [PCH ]: HDA-Intel - HDA Intel PCH
HDA Intel PCH at 0xf7e10000 irq 31
1 [NVidia ]: HDA-Intel - HDA NVidia
HDA NVidia at 0xf7080000 irq 17
今回は、hw:0
がオーディオデバイスであると仮定します。
jack_control dps device hw:0
jack_control dps capture hw:0
jack_control dps playback hw:0
それぞれのオプションについて簡単に説明します。
-
dps device
: オーディオデバイスを設定します。 -
dps capture
: キャプチャ(入力)デバイスを設定します。 -
dps playback
: 再生(出力)デバイスを設定します。
これにより、指定したデバイスで音声が入出力されるようになります。
最後に、レートを設定します。
jack_control dps rate 48000
基本的には ArchLinux Wiki に沿って記述を行うことにしています。
PulseAudio から JACK への音声の送信
PulseAudio から JACK への音声の送信を行うために、以下のコマンドを実行します。
pavucontrol
起動した画面から再生タブを選択し、アプリケーションのデフォルト音声デバイスを Jack Sink
に変更します。
これにより、PulseAudio から JACK への音声の送信が行われるようになります。
a2jmidid のインストール
sudo pacman -S a2jmidid
a2jmidid の起動
JACK が起動している状態で以下のコマンドを実行します。
a2jmidid -e
これにより、ALSA MIDI デバイスが JACK MIDI デバイスにブリッジされます。
MIDI キーボードが接続された際、コンソールにメッセージが表示されます。
REAPER の設定
REAPER を起動し、オーディオデバイスを設定します。
- Options -> Preferences -> Audio -> Device
ここで、Audio system
を JACK
に変更します。
ここまでで正常に音声の設定が完了していれば、音声が再生され、更に MIDI キーボードが認識されます。
認識されたキーボードを右クリックし、Enable input for track record input
とinclude input in all MIDI inputs
を選択します。
このようにして、REAPER で MIDI キーボードを利用することができるようになります。
なお、入力の受け付けは、トラックを作成し、トラックの録音モードを有効にしてからインプットを MIDI キーボードに設定することで行うことができます。
以上で、Linux 上の REAPER で MIDI キーボードを利用するための設定が完了しました。
自分の環境では、Vital というシンセサイザーを利用して音を出してみましたが、非常に快適に演奏することができました。
Linux にも対応している、非常にできることの多いシンセサイザーですので、興味がある方はぜひ試してみてください。
おまけ: 起動時に jack を自動起動&MIDI デバイスブリッジを行う
.xprofile に以下のコマンドを追加することで、ログイン時に自動で JACK を起動することができます。
jack_control start && a2jmidid -e &
このコマンドでは、JACK を起動し、a2jmidid をバックグラウンドで起動しています。
このようにすることで、ログイン時に自動で JACK が起動され、MIDI デバイスが JACK MIDI デバイスにブリッジされるようになります。
終わりに
今回は、Linux 上で MIDI キーボードを利用するための設定についてまとめてみました。
参考になれば幸いです。
Discussion