【Ubuntu】PCのリアとフロントから音を同時に出力する方法【alsamixer】

PCで動画や音楽を楽しむ際には、ヘッドホンかスピーカーのどちらかが必要になります。
私の場合、普段はスピーカーを使うのですが、音声通話のときにはヘッドセットに切り替える必要が出てきました。

しかし、オーディオのジャックをUSBに変換するパーツを捨ててしまったため、出力を切り替える方法は使えません。
その状態で、PCのリアとフロントから同時に音を出力することが実現できたので、書き残します。

で、答えは?

alsamixerコマンドでデバイスのミュートを解除し、音量を上げることで同時に出力することができます。
(未だにUbuntu16.04だけど、17系・18系でもできそう)

環境

マザー:Asus H170Pro
ケース:Thermaltake CoreV31

ヘッドセット:ELECOMの安物
スピーカー:ELECOMの安物

OS:Ubuntu 16.04 64bit LTS
デスクトップ環境:Cinnamon
AlsaMixer:バージョン1.1.0

状況とデバイス構成

5.1chのサラウンドみたいな特別なものはなく、緑とピンクの端子しか使ってません。

ミドルタワーの据え置きデスクトップが今のメインマシン。
通話などの状況に合わせてリアのジャックを差し替えていた。
常用はスピーカー。

通話があらかじめわかっていればいいのだが、突然かかってくるため、Skypeの呼び出し音がうるさい。
PCが机の裏にあるため、すぐにはヘッドセット用に差し替えることが出来ない。
これが相手を待たせるし、うるさいしで結構ストレスだった。

何が目的か

緑とピンクの端子をUSBに変換するパーツを持っていたが、どうやら大掃除のときに捨ててしまったらしい。
類似品は見つけたが、音量調節機能がついたせいか、値段が¥1,800と以前のものより高かった。

なので、「リアとフロントはどちらもマザーボード直轄なんだから、同時に出力できたりしねぇかな」と思ったのが始まり。
同時に出力できれば、Skypeがかかってきたときにスピーカーをオフにして、ヘッドセットを装着すればいい。

解決方法

と言っても、フロントにはジャックを挿しても反応がない。
(これに関しては故障ではないという結論に至った。
ヘッドセットしか使っていなかった頃、同時ではなかったものの、リアとフロントの両方は生きていた。
また、マザーボードへの接続も問題なし。
極めつけは、中途半端に挿すとノイズが出力されたこと。故障ならまったく音が出ないハズだ)

タスクバーにある「サウンド」の設定を覗いてみるも、デバイスの表示は3つのまま(Fig1)。
GNOME3ではなくCinnamonなので少し項目が違うようだが、モニタースピーカーと、デジタル出力(5.1chなど)、ライン出力(アナログ?)しかない。

デバイスに対してプロパティとか、詳細設定とか、そういうものが一切ないのも困りどころ。

Fig1.Cinnamonのサウンド設定画面
Fig1.Cinnamonのサウンド設定画面

alsamixerコマンドがカギ

どうやら、LinuxにはALSAという名前の機能群があるようだ。
その中に音量の調節を担う「alsamixerコマンド」存在するという。

Advanced Linux Sound Architecture (ALSA) は、サウンドカードのデバイスドライバを提供するOpen Sound System (OSS)を置き換えるために開発されたLinuxカーネルコンポーネントである。
ALSAプロジェクトの初期の目標は、サウンドカードハードウェアの自動設定や、複数のサウンドデバイスのスマートな取扱いなどであったが、それらは概ね達成された。

Advanced Linux Sound Architecture – Wikipedia

ググってみたところ、おおよそALSAを導入するために「インストールがどうの」「音が出なくてこうの」とコマンド操作をしている記事が多い。

私はピンポイントで解決につながりそうな記事を見つけたので、そのまま突っ走ることになった。
【参考】Ubuntu 16.04 LTS でフロントパネルの音声出力端子から音が出ない – Qiita

リア(背面)とフロントパネルの端子から音を出力しようとしている状況は理想的だ。
異なる部分といえば、
1)デバイスを切り替える旨がない(同時出力?)
2)一瞬だけ音が出たり、一時的にサウンドデバイスを認識することはなかった点。

とりあえずalsamixerコマンドを実行したところ、端末(ターミナル)上に音量やデバイスの一覧が表示された(Fig2)。
知らないデバイスも含まれているようで、ウィンドウサイズを横に広くしないと、すべてを表示できない。
(この画像はフルHDの横幅いっぱいのもので、原寸は1900px近くもある。)

Fig2.AlsaMixerのスクリーンショット
Fig2.AlsaMixerのスクリーンショット(クリックで原寸表示)

alsamixerの操作方法

alsamixerは、コマンドで実行する。(後述の「注意点4」も参照してください)

$ alsamixer

操作方法は、十字キーの左右でデバイスを選択し、「Mキー」でミュートのON/OFFが切り替えられる。
ミュート状態は「MM」で、ミュートが解除されていれば「OO」(オー?ゼロ?)になる。

十字キーの上下で音量・ボリュームが変えられる。
下はゼロから100まで。

とりあえず「Auto-Mute」の項を「Disabled(無効)」に変更。
左側にある項(後述)でミュートになっているものを解除して、音量を上げてやる。

Escキーで保存を兼ねた終了。これでターミナルに帰ってくる。

【操作の参考】
ubuntuでイヤホンを使う ( Linux ) – スローなPCライフ – Yahoo!ブログ

Linuxで音が出ないときに確認するポイント _ maidsphere

注意点(1)

alsamixerで設定さえすれば、ヘッドセットやスピーカーを挿しても動いてくれるだろうと思っていたが、どれが関係しているものか初見ではわからず、手応えがなかった。
確実にやりたければ、使いたい環境を用意してからalsamixerを操作した方がいい。
私の環境では、リアにヘッドセットの緑とピンク、フロントにスピーカーの緑のジャックを挿した状態で音を聞きながら操作した。

注意点(2)

最初に少し触った、タスクバーに常駐するサウンド設定がある。
ここでマイク(インプット)やスピーカー(アウトプット)のボリューム(%)をいじった場合、alsamixerの操作と同時に監視しておいた方がいい。
一部がここの数字と連動しており、常用している音量バランスが崩れる可能性がある。

注意点(3)

alsamixerには色んな項目があるが、左側にある「headphone」は必ずしもヘッドホンとは限らない。
つまり、「挿したデバイスを判別して名前を振っているわけではない」ということ。

私の環境では、リアにヘッドセットを挿しており、それは有効化されていた。
変更を加えたいフロントのスピーカー部分がalsamixer上で「headphone」となっており、ここをミュートを解除・音量を100にすることで同時に音を出力することを実現できた。
(一般的に、動かさないスピーカーはリアで、必要なときだけ使用するヘッドホンがフロントなのだろう……)

注意点(4)

OSを再起動したら、フロントのスピーカーの方が無効化されていた
これは、解決しようとした当初と同じで、システムのせいでフロント側がミュートにされたのだろう。

Auto-Muteを”Disabled”にしてあるから、設定は保持しているものだと思ったのだが。
(Win10とのデュアルブートなのが関係あるだろうか?
再起動する度に設定が必要なツールなんて、不便な。)

追記(2019年2月9日)

単純に「alsamixer_設定_保存」でググったら、解決策がありました。(なぜ気づかなかった……)

#AlsaMixerを起動して調整
$ alsamixer
#AlsaMixerの設定を保存する
$ sudo alsactl store

alsamixer では設定が保存されないため、再起動するともとの設定に戻ってしまう。
これを避けるためには、alsamixer で音量を設定したあとで、root 権限で下記を実行すればよい。

# alsactl store

音量設定固定 – linuxmint の記録

これでも不十分だったら、こちらの「asound.state」を読み込ませる方法を試します。
【参考】
let’s noteで音量調整ができない Ubuntu18.04編 – Kinaconの技術ブログ

Alsaの音量設定保存について – Debian de Linux

終わりに

USBならデバイスの切り替えで済んだかもしれない。
しかし、この問題を解決した今思えば、Skypeの着信があってからデバイスを切り替えるより、「同時に出力しておいて、その時だけスピーカーの電源を切る」方が圧倒的に楽だと思う。

また、あらかじめ色々と用意されているUbuntuだからこそ、コマンド操作をあれこれせずに済んだのだろう。
多分、面倒くさいと感じたらUSBに変換するパーツを買っていたかもしれない。

いずれはUSB接続のデバイスを買うかもしれないけれど、この方法も忘れずに書き残しておくことにする。