トホホな疑問(5) aplay -L、返ってこない

JosephHalfmoon

Jetson Nanoに、音声ファイルを食わせたいと思ったのであります。音から判定するようなAIも多いしね。既にRaspberry Pi上でテスト済のUSBオーディオインタフェース(大特価ウン百円)をつなげれば即OKと考えたのですが、あれれ

aplay -L

aplay -l

も戻ってきません。無限ループでもしている感じ。でも意外な所に原因がありました。1箇所直したら再生、録音問題なし。

結論から言えば、普通の設定のJetson Nano上では、aplay -Lでも -lでも、実行すればサウンドデバイスの一覧(内容は違うけれど)を確かめることに何の問題もない筈です。USBオーディオインタフェースを接続後、一覧を確かめて、該当デバイスを指定すれば、オーディオの再生でも録音でもきっとできます。ところが、私の手元のJetson Nanoでは、

$ aplay -L (aplay -lでも同じ)

すると、じっと黙ったまま戻ってこなくなりました。コントロールCで中断はできるので、暴走、ということではなく、ただただ何かを待っている感じ。無限ループに入っているのでしょうか。そこで思い当たるフシというやつが。Jetson nanoにUSBオーディオつける前に、Raspberry Piでもオーディオデバイスをいじっていたのですが、その折

  • Raspberry Pi 参号機、Pi Zero W、音声入出力問題なし
  • Raspberry Pi 弐号機、Pi 3 model B+、音声入出力問題なし
  • Raspberry Pi 初号機、Pi 1 model B+、Jetson Nanoとクリソツの問題あり

だったんであります。弐号機、参号機は最近OSインストールした新しい環境、初号機はアップデート、アップグレードは繰り返しているものの元はかなり前のOS環境です。その辺になにかあるんじゃね、という程度の軽いノリでそのときは原因追及もせず、流してしまいました。しかし、今回、Jetson Nanoでも問題発生、これはイケない、追及しないと。

Raspberry Pi 初号機問題の方が、比較できる相手(弐号、参号)がある分、解決しやすそうじゃね。。。

という考えで、調べ始めました。ALSAとか、オーディオ関係の設定などをしらべていく内に発見しました。

pulseaudioをアンインストールしておくと aplay -L が返ってくる

のです。pulseaudioが無ければ音が鳴りませんが、pulseaudio内のどこかで誰かを待っているようなのです。こういうときに使えるコマンドあったな~

strace

プログラムを引数にとって、そのプログラムがシステムコールを発行する度に知らせてくれるプログラム。この引数にaplayを与えて実行してみました。

止まったところはCONNECTでした。見ればなんと、sshでリモートログインしている手元のパソコンのIPアドレスに接続しようとして止まっているようです。ポートアドレスは6000番。逃げも隠れもできないWellKnownポート。どうも、pulseaudioは、このパソコンの上のXサーバに接続しようとしているようです。これで原因は分かった気がしました。でも、CONNECTであれば、きっとタイムアウトする筈。そう思って、戻ってこない aplay -l に「放置プレイ」を仕掛けてみました。勿論、timeコマンド使って時間計測の上です。

 

どうでしょう、2分ちょっとの後には、タイムアウトで戻ってきて、後は普通にオーディオデバイスのリストを返してくるではありませんか。ただその前に、

xcb_connection_as_error()

が真を返したとエラーメッセージがあるところこそ、パソコンのXサーバにコネクトしようとして、しかし、Xサーバ立ち上がっていないので待ち続け、タイムアウトしている部分なのでした。ここでGUIを使いたいとき

  • Raspberry Pi 参号機、VNC利用
  • Raspberry Pi 弐号機、VNC利用
  • Raspberry Pi 初号機、パソコン上のXサーバにリダイレクト
  • Jetson Nano、パソコン上のXサーバにリダイレクト

という設定になってました。何のことはない、

DISPLAY環境変数

をセットしてあった、2台に共通の問題だったようです。推測するに、pulseaudioはDISPLAY変数がセットされていると、x11の接続先を調べにいくようです。UIの接続先なので、Audioも送ろうとするのではないかしらん。そこで、Xサーバが動いていればよし、今回のように動かしていないとそこでタイムアウト待ちとなると。まあ、パソコン上でX動かすのは、Raspbery PiやJetson Nanoに仮想端末でログインしていて、画像ファイルやらを見たくなった時だけです。普段はDISPLAY環境変数はexportしないことにしました。すると、何の問題もなく、Jetson Nano上で aplay -l が戻ってきます。取り付けたUSBオーディオ(ノーブランド)の情報はこんな感じ。

早速、録音を試みます。こんな感じ。

 

録音したものを再生。

聞こえないのは残念ですが、ちゃんと動作いたしました。

しかし、オーディオデバイスの問題は DISPLAY であったと、トホホであります。

トホホな疑問(4) Raspberry Pi、Google Home mini 音を出す小ネタ に戻る

トホホな疑問(6) なぜハング、cuda-gdb に進む