NECのノートパソコンLaVie LS350/AにLinux Mint 20.3をインストールしました。しかし、OSのインストール直後、ヘッドホンから音が出ませんでした。バンドルされていたWindows7では普通にでていたのでLinuxの初期設定に問題があるようでした。そこで$alsamixerコマンドを使うと音を出すことができました。
短く言うと
Linux Mint 20.3をインストールしたらスピーカーからは音が出るのに、ヘッドホンからは出ませんでした。
アプリ、PulseAudio、ALSAのすべての音声出力がONであることを確認します。今回は、ALSAがヘッドホンをミュートしていました。
$alsamixer コマンドでヘッドホンの音量調節をしたら音がでました。
<<前の記事 【Linuxで音ゲーを実行#0】MIDI音を出す設定に苦労したらサウンドシステム全体が見えてきた話
[【Linuxで音ゲーを実行#2】] 次の記事>>
はじめに
MIDIキーボードを使って音ゲーで遊びたいと思いました。都合よく使っていないノートPCがありましたし、中古のMIDIキーボードも手に入れました。しかし、Linux MintをインストールしたらMIDIうんぬんのまえに、そもそもヘッドホンから音が出ませんでした。
※この記事は【Linuxで音ゲーを実行】 の1番目の記事です。
今回の環境
- NEC LaVie LS350/A(音声出力デバイスとして「スピーカー」と「アナログヘッドフォン」)
- Linux Mint 20.3 Cinnamon
ぱっと見では原因の切り分けができない
直前のWindows7がインストールされていた状態では普通にヘッドホンから音が出ていたのでハードウェアの問題ではなく、Linuxの設定に問題があることは想像がつきました。そこで、デスクトップのパネルの「サウンドの設定」をみてみますがよくわかりません。どこから手を付けてよいかわからずとりあえず「Linux 音が出ない」などとweb検索しました。するとえんでぃさんのブログ「Linuxで音が出ないときの対処法」をみつけました。
「デバイスは認識されているんだけど、何故か音が出ない。デスクトップの音量設定もミュートじゃないのに。」「ALSAがミュート、または音量ゼロになっていないか?PulseAudioでミュート、または音量ゼロになっていないか?」3
まさにこれで、PusleAudioでは音が出ているのにALSAがヘッドホンをミュートしていたことがわかりました。これにたどり着くにはLinuxで音を出す仕組みがわかっていたほうが良さそうです。
ユーザーインターフェイスの奥で何かが起こっている
ここではALSAとPulseAudioをアプリとして扱います(本来は「カーネルモジュール/ライブラリ」と「サウンドサーバ」)。
Linuxのサウンドシステムはアプリの数珠つなぎで構成されています。
PulseAudioはサウンドシステムのフロントエンドとしてとても優秀です。※そのためバックグラウンドでなにが起こっているのか気づきにくい。
Linuxでは次のようなサウンドシステムとなっています。このシステムはアプリケーションの数珠つなぎとなっていることがわかります。
「プレイヤーアプリ→PulseAudio→ALSA→スピーカー/ヘッドホン」 4
プレイヤーアプリ/PulseAudio/ALSAのいずれでも音量の調節が可能です。
そのなかでも PulseAudioの音量調節は、デスクトップのパネルにある「スピーカーのマーク」やキーボードショートカットでできる ので普段はそれがメインになります。一方、ALSAはOSの機能を拡張するソフトウェア(カーネルモジュール)でもあるので表からは見えないように常駐しています。
そこでALSAの状態を確認するとヘッドホンをミュートにしていることがわかりました。ぱっと見で気づけないのは、ALSAがサウンドシステムの深いレイヤーにあり私のような初心者ではその動作を意識しないからでした。
alsamixerコマンドでALSAの状態を確認する
ALSAの音量調節にはalsamixerコマンドを使います。
PulsuAudioの音量調節のために「PulseEffects」をインストールすると便利です。
ALSAとそれにまつわるunitがインストールされているか確認します。ついでにPulseAudioがインストールされているかも確認します。
apt list --installed | grep alsa
apt list --installed | grep pulseaudio
※ほぼ例外なくインストールされているはずです。
ALSAの状態を確認するにはターミナルで以下のコマンドを入力します。ミュートの切り替えは「m」キーを使います。
alsamixer
今回はアプリの数珠つなぎの途中にミュートがあったのでALSAとPulseAudioともに出力があることを確認すれば解決です。
おわりに
Linuxのサウンドシステムはアプリの数珠つなぎで構成されています。
例:(音声データ)→「PulseAudio」→「ALSA」→(物理サウンドデバイス)
デフォルトでは、ユーザーはPulseAudioのフロントエンドが便利に使えるように設定されています。
PulseAudioについても「PulseEffects」をインストールしておくと確認しやすくなると思います。
apt list --installed | grep pulseeffects
sudo apt install pulseeffects
<<前の記事 【Linuxで音ゲーを実行#0】MIDI音を出す設定には手間がかかる【概論】
[【Linuxで音ゲーを実行#2】] 次の記事>>
参考サイト
-
Linuxカーネルコンポーネントのひとつ。カーネルモジュール/ライブラリーで構成されている。バックグラウンドで動作しサウンドカードハードウェアの自動設定や複数のサウンドデバイスの取扱いを行うアプリケーション群。 ↩
-
サウンドサーバのひとつ。バックグラウンドで動作し異なる音声データをミキシングして出力装置(ここではALSA)へ単一の統一された音声を送る。 ↩
-
https://endy-tech.hatenablog.jp/entry/linux_sound_troubleshooting ↩
-
簡略化してあります。たとえば、「データストリーム→PulseAudio→ALSA→サウンドカード→音声出力デバイス」とすればより正確かもしれません。詳しくは参考サイトを参照してください。 ↩