【Linuxで音ゲーを実行#4】楽譜作成アプリがMIDIキーボードを認識しなかった/音が出なかった

Linux Mint 20.3 で楽譜作成アプリMuseScoreを使って楽譜を作ろうと思いました。しかしMIDIキーボードを認識してくれませんでした。アプリのバージョンを変更し、「I/O」の「ALSAオーディオ」にチェックを入れることでMIDIキーボードを認識してくれて、音符入力が楽になりました。

__※この記事は2022年2月7日に作成したものです。__

## 短く言うと

Linux Mint 20.3 なPCで楽譜作成アプリMuseScoreを使おうと思ったら

:::note alert
MuseScore3.6.2ではMIDIキーボードを認識してくれませんでした。
:::

:::note info
MuseScore3.2.3ではMIDIキーボードを認識してくれました。
:::

3.2.3でもはじめは認識してくれないので __「I/O」の「ALSAオーディオ」にチェックを入れます。__
MuseScoreがMIDIキーボードを認識してくれれば音符の入力がとても楽になります。

※Ubuntu Studio 20.04 ではあらかじめMuseScore3.2.3 がインストールされています。

＜＜前の記事　[【Linuxで音ゲーを実行#1】Linux Mintをインストールしたらヘッドホンから音が出なかった][1]

[1]:https://qiita.com/johnnystg/items/62ea57bd2c487a17000f

[【Linuxで音ゲーを実行#5】WineHQでMIDI出力アプリがフリーズ/音が出なかった][2]　次の記事＞＞

[2]:https://qiita.com/johnnystg/items/891ad5e9d85627b37a8e

# はじめに

https://musescore.org/ja

LinuxにMIDIキーボードを接続して演奏練習をしようと思いました。音ゲーで遊びながら練習しようと思いましたがandroid版「Chordana Play」もWindows版「Synthesia」も初心者には難しすぎました。そこで、楽譜から作ってしまおうといろいろやってみたら準備にとても時間がかかりました。

※この記事は[【Linuxで音ゲーを実行】][3]の4番目の記事です。

[3]:https://qiita.com/johnnystg/items/b113e1794bfda040cd83

# 今回の環境

* NEC LaVie LS350/A
* Akai professional MPK mini mk2
* Linux mint 20.3 Xfce
* ALSA[^1](初期状態でインストール済み)
* PulseAudio[^2](初期状態でインストール済み)
* ~~JACK~~[^3]

[^1]: Linuxカーネルコンポーネントのひとつ。カーネルモジュール/ライブラリーで構成されている。バックグラウンドで動作しサウンドカードハードウェアの自動設定や複数のサウンドデバイスの取扱いを行うアプリケーション群。

[^2]: サウンドサーバのひとつ。バックグラウンドで動作し異なる音声データをミキシングして出力装置(ここではALSA)へ単一の統一された音声を送る。

[^3]: サウンドサーバのひとつ。低レイテンシーで呼び出されたJACK対応アプリケーション同士でのオーディオ、MIDIデータ両方の接続を提供する。　https://ja.wikipedia.org/wiki/JACK_Audio_Connection_Kit

:::note info
はじめはJACKをインストールして使おうと思ったのですがPulseAudioで足りました。JACKをインストールするとサウンドシステムのレイヤーがとても深くなってしまうので、より操作が簡単なPulseAudioを用います。
:::

# MuseScoreをインストールした

:::note info
過去のバージョンMuseScore 3.2.3をインストールすることでMIDIキーボードを接続することができました。
:::

Linux Mintでは「ソフトウェアの管理」から簡単にアプリケーションのインストールができます。そこで「MuseScore」を検索するといくつかの候補が上がります。今回は最新の安定版と思われる「MuseScore」をインストールしました。バージョンはMuseScore 3.6.2になります。

MIDIキーボードをUSBコネクタに接続してからこの3.6.2を起動しましたが、認識してくれませんでした。そもそも「MIDI入力を有効にする」の項目がグレーになっていて、有効にできません。また、パネルにMIDI接続を表す「I/Oコネクタのマーク」があるはずですが表示されません。理由はわかりませんがMIDIキーボードを受け付けてくれない仕様のようです[^4]。

[^4]: 受け付けてくれない理由を探しましたがわからないままです(2022/02/07)。

3.6.2をあっさり諦めて「ソフトウェアの管理」で削除しました。あらためて「MuseScore」を検索すると「MuseScore」のほかに「MuseScore3」も候補に上がります。今度は__「MuseScore3」__をインストールしました。こちらは過去のバージョンで3.2.3となります。

起動してみると「MIDI入力を有効にする」にチェックを入れることができ、パネルにMIDI接続を表す「I/Oコネクタのマーク」も表示されます。それでもMIDIキーボードを認識してくれませんでした。

# MIDIキーボードの接続にひとクセある

:::note info
MuseScore 3.2.3 はALSAオーディオに接続するとMIDIキーボードを認識します。
:::

MuseScore 3.2.3 の設定の既定値は

* 「編集」→「環境設定」→「音符入力モード」→「MIDI入力を有効にする」ON
* 「編集」→「環境設定」→「I/O」→ ~~「PulsuAudio」にチェック~~

となっていますが、これだとMIDIキーボードを認識してくれないし、音も出ません。

* 「編集」→「環境設定」→「音符入力モード」→「MIDI入力を有効にする」ON
* 「編集」→「環境設定」→「I/O」→ __「ALSAオーディオ」にチェック__

これでMIDIキーボードを使って音符入力が可能になります。

# PulseEffectsを使うとなんとなく仕組みがわかってくる

:::note warn
ここではALSAとPulseAudioをアプリとして扱います(本来は「カーネルモジュール/ライブラリ」と「サウンドサーバ」)。
:::

いろいろいじってみたところ、以下のサウンドシステム(≒アプリの数珠つなぎ)だとMuseScoreはMIDIキーボードを認識しません/音が出ません。

__×：「MIDIキーボード→MuseScore→×→PulseAudio→ALSA→」__

MuseScoreはALSAに接続することでMIDIが扱える(MIDI入力を認識する/MIDI音を出力する)仕様のようなので、

__○：「MIDIキーボード→MuseScore→(ALSAに偽装した)PulseAudio→ALSA→」__

となればよいようです。PulseAudioによる偽装は自動で行われるのでユーザーが設定する必要はありません。MuseScoreの「I/O」で「ALSAオーディオ」にチェックを入れる(ALSAに接続したと思わせる)だけです。

PulseAudioのGUIにあたる「PulseEffects」で確認してみました。「ソフトウェアの管理」で「pulseeffects」と検索し __「PulseEffects」__ をインストールします。私は、アイコンやイコライザーがかっこいいので、このアプリケーションをOSのインストール直後から使うようにしています。

PulseEffectsを起動してPulseAudioの振る舞いを見てみると以下のことがわかります。

* 前述のとおり[^5]MuseScoreを既定値のまま起動すると、PulseAudioはそれを認識しますが音声が入力されません。
* 設定を変更して[^6]MuseScoreのI/OをALSAオーディオにすると、MuseScoreとPulseAudioが「ALSAプラグイン」を介して接続され、音声が入力されます。同時にMIDIキーボードが使えるようになります。
* たとえばyoutubeなども同時に立ち上げてMuseScoreとyoutube両方から同時に音声が出力されたとき、__PulseAudioは2系統を入力しミキシングして(ALSAにMIDI音声をわたして)スピーカーから音を出します。__

[^5]: 【認識しない/音が出ない】MIDIキーボード→MuseScore→×→PulseAudio→ALSA
[^6]: 【認識する/音が出る】MIDIキーボード→MuseScore→(ALSAに偽装した)PulseAudio→ALSA

ALSAは、音声入力が1つしかないのでMuseScoreが本当にALSAを専有してしまうと、ほか(youtubeなど)からの音声を受け付けられません。PulseAudioは複数系統の音声入力を受け入れてミキシングすることができるのでALSAに偽装して接続を仲介する仕組みとなっています。


# おわりに

:::note info
LinuxのアプリにはALSAに接続することで機能を十分に活かせるものがあります。
:::

:::note info
PulseAudioには自動で複数系統の音声入力をミキシングして1系統にまとめる機能があります。
:::

:::note info
ALSAの音声入力は1系統しかありません。
:::

Linuxで楽譜を作ろうと思いたち、いろいろ調べたところ以下のようなサウンドシステム(≒アプリの数珠つなぎ)を構築すれば良いと考えました。

__MIDIキーボード→MuseScore→fluidsynth→JACK→ALSA→音声出力デバイス__

たぶんこれで良いと思うのですが、JACKはMIDIデータを扱える専門的なアプリケーション群を束ねるために必要なものなので、今回の「初心者がMIDIキーボードを使って音符入力をする」「初心者がMIDIキーボードを使って音ゲーで遊ぶ」といった限定的な目的ではJACKを使いこなせません。

JACKは専門的なアプリを扱えるメリットがある分、

* アプリの数珠つなぎをユーザーが行う必要がある。
* JACKがALSAの音声入力を占有するとPulseAudioが機能しなくなる。
* JACKとPulseAudioを共存させる方法はあるものの、結果、サウンドシステムが複雑になる。

以上のことから、ユーザーが複数のオーディオ/MIDIアプリを立ち上げるたびに数珠つなぎを見直す必要がある。といった初心者ならではのデメリットもあります。

今回は、繰り返しになりますが、以下のようなサウンドシステムが構築されました。

__MIDIキーボード→MuseScore→(ALSA?)PulseAudio→ALSA→音声出力デバイス__

こうなったのは

* MuseScoreはソフトウェア・シンセサイザーを内蔵しているので追加する必要がない。
* MuseScoreはALSAに接続することでMIDI機能を発揮する。
* PulseAudioは自動でALSAに偽装してMuseScoreのMIDI機能を発揮させる。

以上のことからMuseScoreの「I/O」を「ALSAオーディオ」にチェックすればあとはPulseAudioが自動でサウンドシステムを構築してくれた。からでした。

:::note info
PulseAudioは自動でいろいろ世話をしてくれるので、初心者はPulseAudioに頼ると良いようです。
:::


# 参考サイト

https://gihyo.jp/admin/serial/01/ubuntu-recipe/0137

＜＜前の記事　[【Linuxで音ゲーを実行#1】Linux Mintをインストールしたらヘッドホンから音が出なかった][51]

[51]:https://qiita.com/johnnystg/items/62ea57bd2c487a17000f

[【Linuxで音ゲーを実行#5】WineHQでMIDI出力アプリがフリーズ/音が出なかった][52]　次の記事＞＞

[52]:https://qiita.com/johnnystg/items/891ad5e9d85627b37a8e