Armadilloフォーラム

接続している音声再生デバイスの番号が入れ替わることがある

h-yuusuke

2022年7月29日 11時04分

お世話になっております。

Armadillo-IoT G4にUSBスピーカーを接続し、"aplay -l"コマンドで音声再生デバイスのリストを表示すると、通常下記の通りcard0がaudio-hdmi、card1がUSBスピーカーとなっています。

**** List of PLAYBACK Hardware Devices ****
card 0: audiohdmi [audio-hdmi], device 0: imx8 hdmi i2s-hifi-0 [imx8 hdmi i2s-hifi-0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: Speaker [Foster USB Speaker], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

しかし、時々ですが下記の様にcard0にUSBスピーカー、card1にaudio-hdmiが割り当たる場合がありました。

**** List of PLAYBACK Hardware Devices ****
card 0: Speaker [Foster USB Speaker], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: audiohdmi [audio-hdmi], device 0: imx8 hdmi i2s-hifi-0 [imx8 hdmi i2s-hifi-0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

お聞きしたいことは下記2点です。
①上記の様に音声再生デバイスのcard番号が入れ替わる要因として何がありますでしょうか。
②音声再生デバイスのcard番号が入れ替わることを防ぐ方法はありますでしょうか。

以上、よろしくお願いいたします。

コメント

at_akihito.irie

2022年8月1日 16時56分

入江です。

> ①上記の様に音声再生デバイスのcard番号が入れ替わる要因として何がありますでしょうか。

サウンドモジュールの認識順です。

> ②音声再生デバイスのcard番号が入れ替わることを防ぐ方法はありますでしょうか。

card番号が入れ替わるのを防ぐ目的は、必ずUSBスピーカーの方から音が出る
ようにしたい、ということでしょうか?

その前提でお話しますと、コンテナ内の/etc/asound.conf(なければ作成して
ください)を以下のように設定することで、デフォルトの再生デバイスを
Speakerに固定できます。

pcm.!default {
    type hw
    card Speaker
}
 
ctl.!default {
    type hw           
    card Speaker
}

例えばこの状態で、以下のコマンドのようにデバイスを指定せずに適当な音声
ファイルを再生すると、USBスピーカーがcard0であってもcard1であっても、
USBスピーカーに音が出力されます。

[container]# aplay test.wav

ご回答ありがとうございます。

教えて頂いた/etc/asound.confを設定してaplayコマンドで音声ファイルを再生した所、下記のエラーが表示されて音声が出力されませんでした。

# aplay /usr/share/sounds/alsa/Front_Center.wav
Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono
aplay: set_params:1358: Channels count non available

上記エラーについてどのようにすれば解消できるでしょうか。

上記に追加致します。
ステレオ音声ファイルをaplayコマンドで再生したときは、エラーが出ずにスピーカーから音声出力ができました。
その確認ののち、Firefoxブラウザで画面操作した時の音声出力を確認したところ、スピーカーから音声が出力されませんでした。

※aplayコマンドの実行とfirefox起動は同じコンテナで行っております。
※firefox上の画面を操作すると音声ファイル(ステレオ音声)が再生されるようになっています。

何が原因かわかりますでしょうか。

at_akihito.irie

2022年8月3日 17時18分

入江です。

仰るとおり、モノラル音声を再生する際に当該のエラーが発生するようですね。

ひとつの案ですが、hwではなくplughwで再生することで、チャンネル数やサン
プリングレートをよしなに変換してから再生してくれるので、そちらで回避し
てみるというのはいかがでしょうか。

/etc/asound.confを以下のように書き換えてください。

pcm.!default {
    type plug
    slave {
        pcm spk
    }
}
 
ctl.!default {
    type hw
    card Speaker
}
 
pcm.spk {
    type hw
    card Speaker
}

この状態でaplayで音声を再生してみてください。

[container]# aplay /usr/share/sounds/alsa/Front_Center.wav

入江様
ご回答ありがとうございます。

展開して頂いた設定内容でスピーカーから音声出力することを確認できました。

サウンドカード番号が入れ替わった状態でもスピーカーから音声出力できるか確認を行いたいと考えておりますが、手動でサウンドカード番号を入れ替える手段はありますでしょうか。もしありましたらご教授願います。
※Card0:audio-hdmi、Card1:USBスピーカーとなっているものをCard0:USBスピーカー、Card1:audio-hdmiとなった状態で確認を行いたいと考えております。

at_akihito.irie

2022年8月4日 19時01分

入江です。

> サウンドカード番号が入れ替わった状態でもスピーカーから音声出力できるか確認を行いたいと考えておりますが、手動でサウンドカード番号を入れ替える手段はありますでしょうか。もしありましたらご教授願います。

申し訳ございませんが、難しいと思います。

dtbでHDMIを無効にすればUSBスピーカーがcard0になると思いますが、HDMI
audioは認識されないので、「サウンドカード番号が入れ替わった状態」は作
れませんね…。

申し訳ございませんが、偶発的に入れ替わる現象を再現していただいた上で動
作確認をお願いします。