完成直前でハマった原因と復旧まで
一連の作業でラズパイのUSB電源を頻繁に抜き差ししたせいで、ついに音が出ない事態が発生してしまいました。
でもSSHの無線通信は無事で、Windowsからコマンド入力はできてる状態です。
今回は、
突然、音が出なくなったトラブルを完全復旧させた記録を、順を追ってまとめました。
トラブル発生
先生……ラズパイ、
音がまったく出なくなりました……
無線では普通につながるんですけど、
そうですか、作業でだいぶ電源を抜き差ししましたからね。
まずは落ち着いて状況を整理しましょう。
ラズパイ自体は起動していますね?
はい。
ターミナルからSSH(無線)は入れますけど、
mpg123(音楽プレーヤー)を実行すると
エラーがでます。
分かりました。
こういうときは、
音の出口が存在しているかから確認するのが基本です
わかりました。
コマンドをいれていくわけですね。
まず結論から
今回の原因を先にまとめると、こうなります。
音声デバイスの3.5mmジャック(Headphones)=card 0 が消えていて
card 1(HDMI音声)」だけの状態になっていた。
つまりラズパイ側が
「アナログ音声の出口は存在しない」
と判断していた状態でした。
エープレイのリスト(aplay -l) というコードで音楽デバイスを確認
では、音声デバイスの状態を確認しましょう。
次のコマンドを入力してください
aplay -l
先生、この -l って……
数字の『1』ですか?
それともアルファベットですか?
いいところに気づきましたね。
ここは 小文字のエル(l) です
エープレイのリストと言って、
音声デバイスのリストを出してという意味ですね。
えっ、エルなんですね。
ずっと『1』だと思ってました……
よくある勘違いです。-l は list(一覧表示) の意味で、
音を出せる機器が認識されているかを確認するコマンドです。
わかりました!
リストのLですね。
本文② 実際の表示内容
エープレイのリスト(aplay -l )を実行した結果は、次のようになっていました。
card 1: vc4hdmi [vc4-hdmi], device 0: MAI PCM i2s-hifi-0
これはつまり、
- card1:HDMI(音声) → 存在している
- card0:3.5mmジャック → 存在していない
(本来あるはずの card0 が無い状態) - device 0:HDMI音声の再生デバイス → 存在している
という意味です。
device 0 の疑問
先生、この device 0 って何ですか?
電源が入ってるって意味なんですか?
いいえ、device 0 は電源ではありません
えっ、そうなんですか?
0って書いてあるから、
何かがONなのかと……
そう思いますよね。card はHDMIやUSBなど音を出す機器ですね。device はcardの中でどの端子をつかうか(スピーカーか、マイクかデジタル出力か)、
だと考えてください。
通常はdevice 0、メインの入出力端子しかつかわないことがほとんどですが。
むずかしいですね。
deviceはcardに付属するものってイメージでいいですか?…
はい、そんな感じで問題ありません。
3.5mmジャック(card 0)を復旧させるためにしたこと
raspi-config は、
ラズパイの基本設定をメニュー操作で変更できるツールです。
ここで確認したかったのは、
音声の出力先を 3.5mmジャックに切り替えられるか
という点でした。
しかし、結果はこうでした
- Audio を開いても
- 「No audio devices found」 と表示され
- 3.5mmジャックを選ぶことができませんでした。
ここで分かったこと
この時点で分かったのは、
raspi-config 以前の段階で、
3.5mmジャック自体が無効になっている
ということです。
つまり、
- 設定の切り替えで直る問題ではない
- もっと起動時の深い設定を確認する必要がある
と判断しました。
次に進むための判断材料
raspi-config で選べない
=
config.txt レベルの設定を確認する必要がある
そう切り分けて、
次のステップに進みました。
② 次の修正(直った)
そこで行ったのが、
config.txtで- 映像ドライバ(vc4-kms → fkms)の切り替え
dtparam=audio=onを明示
結果:3.5mmジャック(card0)が復活
この修正は、
「音声の出力先を変える」
ではなく
「そもそも 3.5mmジャックを
起動時に読み込むかどうか」
という、もっと根っこの設定に触れています。
分かりやすく言い換えると
- 1回目:
スイッチを切り替えようとした
(でも、電気が来ていなかった) - 2回目:
ブレーカーを入れ直した
(だからスイッチが効くようになった)
この違いです。
まとめ
映像ドライバと音声の初期設定を見直すことで、3.5mmジャックが再び認識され、音が出るようになりました。
① 設定ファイルを編集
sudo nano /boot/config.txt
② 次のように修正
#dtoverlay=vc4-kms-v3d
dtoverlay=vc4-fkms-v3d
dtparam=audio=on
これは、
- HDMI優先の設定をゆるめ
- 互換性の高い方式に切り替え
- 「アナログ音声を使う」と明示する
という意味です。
③ 保存して再起動
sudo reboot
消えたcard0 が復旧できた理由
先生、card 0が見つかってよかったですね。
そうですね。
config.txtの修正がうまくいってほっとしまいた。
config.txtはラズパイ起動時に自動的に読み込まれるファイルでしたね。
そうですね!修正したら起動時に
『3.5mmジャックを使う』
と再認識させることができました。
お疲れさまでした!
復旧確認で再び話エープレイのリストを入力
再起動後、再度確認すると、
aplay -l
card 0: Headphones [bcm2835 Headphones]
card 1: vc4hdmi
3.5mmジャック(card0)が復活しました。
再生テストも問題なし。
mpg123 -o alsa /home/ogita/sounds/zone_2020rain.mp3
無事、音が鳴りました。
おわりに
今回のトラブルは、
- OS:正常
- SSH:正常
- 音源ファイル:正常
- 再生コマンド:正常
という状態で起きた、
「音の出口設定だけが消えていた」ケースでした。
制作過程で電源を抜き差ししてしまうと、こういうことが起きやすくなります。
しかしひとつづつ確認をしてていけば必ず原因にたどり着けます。ぜひ参考にしていただければ幸いです。
第8回 コンデンサで安定させる
番外編2 ラズパイから音が出なくなった
番外編1 ラズパイに無線でつながらなくなった! 復旧までく
第7回 充電池からだと、3秒くらいで電源が落ちてしまう
第6回 充電池から音楽を鳴らす準備編、昇圧モジュールと充電モジュールをつなげるまで
第5回 nanoで自動機能のプログラムを書く
第4回 ボタンをはんだ付けしよう
第3回 ラズパイに再生ボタンを仮接続しよう
第2回 ラズパイに音楽を転送して音を鳴らしてみよう
第1回 Windowsからラズパイを操作する環境をつくろう