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

NECのノートパソコンLaVie LS350/AにLinux Mint 20.3をインストールしました。しかし、OSのインストール直後、ヘッドホンから音が出ませんでした。バンドルされていたWindows7では普通にでていたのでLinuxの初期設定に問題があるようでした。そこで$alsamixerコマンドを使うと音を出すことができました。

# 短く言うと

:::note warn
Linux Mint 20.3をインストールしたらスピーカーからは音が出るのに、ヘッドホンからは出ませんでした。
:::
:::note info
アプリ、PulseAudio、ALSAのすべての音声出力がONであることを確認します。今回は、ALSAがヘッドホンをミュートしていました。
:::

:::note info
$alsamixer コマンドでヘッドホンの音量調節をしたら音がでました。
:::

＜＜前の記事　[【Linuxで音ゲーを実行#0】MIDI音を出す設定に苦労したらサウンドシステム全体が見えてきた話][21]

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

[【Linuxで音ゲーを実行#2】]　次の記事＞＞

# はじめに

MIDIキーボードを使って音ゲーで遊びたいと思いました。都合よく使っていないノートPCがありましたし、中古のMIDIキーボードも手に入れました。しかし、Linux MintをインストールしたらMIDIうんぬんのまえに、そもそもヘッドホンから音が出ませんでした。

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

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

# 今回の環境

- NEC LaVie LS350/A(音声出力デバイスとして「スピーカー」と「アナログヘッドフォン」)
- Linux Mint 20.3 Cinnamon
    - ALSA[^41] (初期状態でインストール済み)
    - PulseAudio[^42] (初期状態でインストール済み)

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

[^42]: サウンドサーバのひとつ。バックグラウンドで動作し異なる音声データをミキシングして出力装置(ここではALSA)へ単一の統一された音声を送る。
 
# ぱっと見では原因の切り分けができない

直前のWindows7がインストールされていた状態では普通にヘッドホンから音が出ていたのでハードウェアの問題ではなく、Linuxの設定に問題があることは想像がつきました。そこで、デスクトップのパネルの「サウンドの設定」をみてみますがよくわかりません。どこから手を付けてよいかわからずとりあえず「Linux 音が出ない」などとweb検索しました。するとえんでぃさんのブログ「Linuxで音が出ないときの対処法」をみつけました。

__「デバイスは認識されているんだけど、何故か音が出ない。デスクトップの音量設定もミュートじゃないのに。」「ALSAがミュート、または音量ゼロになっていないか？PulseAudioでミュート、または音量ゼロになっていないか？」__[^51]

[^51]: https://endy-tech.hatenablog.jp/entry/linux_sound_troubleshooting

まさにこれで、PusleAudioでは音が出ているのにALSAがヘッドホンをミュートしていたことがわかりました。これにたどり着くにはLinuxで音を出す仕組みがわかっていたほうが良さそうです。

# ユーザーインターフェイスの奥で何かが起こっている

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

:::note info
Linuxのサウンドシステムはアプリの数珠つなぎで構成されています。
:::

:::note info
PulseAudioはサウンドシステムのフロントエンドとしてとても優秀です。※そのためバックグラウンドでなにが起こっているのか気づきにくい。
:::

Linuxでは次のようなサウンドシステムとなっています。このシステムはアプリケーションの数珠つなぎとなっていることがわかります。

__「プレイヤーアプリ→PulseAudio→ALSA→スピーカー/ヘッドホン」__ [^61]

[^61]: 簡略化してあります。たとえば、「データストリーム→PulseAudio→ALSA→サウンドカード→音声出力デバイス」とすればより正確かもしれません。詳しくは参考サイトを参照してください。

プレイヤーアプリ/PulseAudio/ALSAのいずれでも音量の調節が可能です。
そのなかでも __PulseAudioの音量調節は、デスクトップのパネルにある「スピーカーのマーク」やキーボードショートカットでできる__ ので普段はそれがメインになります。一方、ALSAはOSの機能を拡張するソフトウェア(カーネルモジュール)でもあるので表からは見えないように常駐しています。

そこでALSAの状態を確認するとヘッドホンをミュートにしていることがわかりました。ぱっと見で気づけないのは、ALSAがサウンドシステムの深いレイヤーにあり私のような初心者ではその動作を意識しないからでした。

# alsamixerコマンドでALSAの状態を確認する

:::note info
ALSAの音量調節にはalsamixerコマンドを使います。
:::

:::note info
PulsuAudioの音量調節のために「PulseEffects」をインストールすると便利です。
:::

ALSAとそれにまつわるunitがインストールされているか確認します。ついでにPulseAudioがインストールされているかも確認します。

```:Terminal
apt list --installed | grep alsa
```
```:Terminal
apt list --installed | grep pulseaudio
```
__※ほぼ例外なくインストールされているはずです。__

ALSAの状態を確認するにはターミナルで以下のコマンドを入力します。ミュートの切り替えは「m」キーを使います。

```:Terminal
alsamixer
```

今回はアプリの数珠つなぎの途中にミュートがあったのでALSAとPulseAudioともに出力があることを確認すれば解決です。

# おわりに

:::note info
Linuxのサウンドシステムはアプリの数珠つなぎで構成されています。
例：（音声データ）→「PulseAudio」→「ALSA」→（物理サウンドデバイス）
:::

:::note info
デフォルトでは、ユーザーはPulseAudioのフロントエンドが便利に使えるように設定されています。
:::

PulseAudioについても「PulseEffects」をインストールしておくと確認しやすくなると思います。

```:Terminal
apt list --installed | grep pulseeffects
```

```:Terminal
sudo apt install pulseeffects
```

＜＜前の記事　[【Linuxで音ゲーを実行#0】MIDI音を出す設定には手間がかかる【概論】][51]

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

[【Linuxで音ゲーを実行#2】]　次の記事＞＞

# 参考サイト

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

https://endy-tech.hatenablog.jp/entry/linux_sound_troubleshooting

https://mickey-happygolucky.hatenablog.com/entry/2015/04/04/105512