🎹

LinuxでMIDIキーボード環境を作る with REAPER

2024/06/14に公開

はじめに

こんにちは。calloc134 です。
最近 MIDI キーボードを購入し、これを Manjaro Linux 上の DAW で利用したいと思い試したところいくつかの問題に遭遇したため、解決方法についてまとめてみました。

環境

  • OS: Linux Manjaro Cinnamon Edition
  • DAW: REAPER v7.16-2
  • MIDI キーボード: Roland A-49

Manjaro Linux の環境については以下にまとめてあります。

https://zenn.dev/calloc134/articles/0a9eae7c8df0d3

事前知識

Linux の音声環境は歴史的経緯が存在し、少し複雑です。
ALSA, PulseAudio, JACK などがあり、それぞれの役割が異なります。

以下のサイトを参考に、軽くまとめていきます。
https://gihyo.jp/admin/serial/01/ubuntu-recipe/0177

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 に沿って記述を行うことにしています。
https://wiki.archlinux.org/title/JACK_Audio_Connection_Kit

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 systemJACK に変更します。

ここまでで正常に音声の設定が完了していれば、音声が再生され、更に MIDI キーボードが認識されます。

認識されたキーボードを右クリックし、Enable input for track record inputinclude input in all MIDI inputsを選択します。

このようにして、REAPER で MIDI キーボードを利用することができるようになります。

なお、入力の受け付けは、トラックを作成し、トラックの録音モードを有効にしてからインプットを MIDI キーボードに設定することで行うことができます。

以上で、Linux 上の REAPER で MIDI キーボードを利用するための設定が完了しました。

自分の環境では、Vital というシンセサイザーを利用して音を出してみましたが、非常に快適に演奏することができました。
Linux にも対応している、非常にできることの多いシンセサイザーですので、興味がある方はぜひ試してみてください。

https://vital.audio/#getvital

おまけ: 起動時に jack を自動起動&MIDI デバイスブリッジを行う

.xprofile に以下のコマンドを追加することで、ログイン時に自動で JACK を起動することができます。

jack_control start && a2jmidid -e &

このコマンドでは、JACK を起動し、a2jmidid をバックグラウンドで起動しています。
このようにすることで、ログイン時に自動で JACK が起動され、MIDI デバイスが JACK MIDI デバイスにブリッジされるようになります。

終わりに

今回は、Linux 上で MIDI キーボードを利用するための設定についてまとめてみました。
参考になれば幸いです。

GitHubで編集を提案

Discussion