Elsaの技術日記(徒然なるままに)

主に自分で作ったアプリとかの報告・日記を記載

MENU

rasperry PiでUSBオーディオ認識

前回、ラズパイでのpythonで音声出力の方法を記載しました。
elsammit-beginnerblg.hatenablog.com



しかしながらこちらの手順だけでは、
装着されたオーディオの識別順とかを考慮していなかったために
イヤホンジャックやHDMIUSBオーディオ
と複数デバイスが装着された状態だと、意図しないデバイスから音声が出力される場合があります。

。。。すっかり抜けていた。。。泣




今回はオーディオデバイスの指定方法やデフォルトとなるデバイスの入れ替え方法などを書いていきたいと思います!!
f:id:Elsammit:20200803204450j:plain




■オーディオデバイスの指定方法
まず識別しているデバイス情報を確認します。
確認のコマンドはこちらです。

aplay -l

こちらを実行すると

**** ハードウェアデバイス PLAYBACK のリスト ****
カード 0: ALSA [bcm2835 ALSA], デバイス 0: bcm2835 ALSA [bcm2835 ALSA]
  サブデバイス: 7/7
  サブデバイス #0: subdevice #0
  サブデバイス #1: subdevice #1
  サブデバイス #2: subdevice #2
  サブデバイス #3: subdevice #3
  サブデバイス #4: subdevice #4
  サブデバイス #5: subdevice #5
  サブデバイス #6: subdevice #6
カード 0: ALSA [bcm2835 ALSA], デバイス 1: bcm2835 IEC958/HDMI [bcm2835 IEC958/HDMI]
  サブデバイス: 1/1
  サブデバイス #0: subdevice #0
カード 0: ALSA [bcm2835 ALSA], デバイス 2: bcm2835 IEC958/HDMI1 [bcm2835 IEC958/HDMI1]
  サブデバイス: 1/1
  サブデバイス #0: subdevice #0
カード 1: MicroII [Audio Advantage MicroII], デバイス 0: USB Audio [USB Audio]
  サブデバイス: 1/1
  サブデバイス #0: subdevice #0

というように、カード番号とサブデバイス番号が取得できます。

上記結果の場合には、USBオーディオバイスは、
・カード:1
・サブデバイス:0
となります。


カード番号とサブデバイス番号がわかったら、音声コマンド実行時にオプションとしてデバイス情報を付与すればOK!!
付与の仕方はコマンドによりそれぞれだが、大体は

hw:カード番号,サブデバイス番号

でOKかと。

例えば、aplayコマンドやmpg321コマンドの場合には、

aplay -D hw:1,0 音声ファイル名.wav
mpg321 -a hw:1,0 音声ファイル名.mp3

とすればよいです。


■デフォルトデバイス切り替え方法

まずはデフォルトで設定されているデバイスの確認ですが、こちらのコマンドを実行すると確認できます。

cat /proc/asound/modules

今回実施してみたところ、

 0 snd_bcm2835
 1 snd_usb_audio

となりましたので、USBオーディオは2番目に認識することになります。


snd_usb_audioを1番に変更したい場合には、
/etc/modprobe.d/alsa-base.conf
を修正(もしくは新規作成して)

options snd slots=snd_usb_audio,snd_bcm2835
options snd_usb_audio index=0
options snd_bcm2835 index=1

とすればOKです。


■最後に

alsa-base.conf修正時に文字入力ミスをしてしまい、結構ハマってしまいました。。。
急にaplayコマンドを使用しても、USBオーディオが認識しなくなってしまい、かなり焦った。。。

入力ミスには気を付けていきたいです。