$ lsusb Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 001 Device 004: ID 8086:0808 Intel Corp. Bus 001 Device 002: ID 2109:3431 VIA Labs, Inc. Hub Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
$ 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
$ arecord -l **** ハードウェアデバイス CAPTURE のリスト **** カード 1: Device [USB PnP Sound Device], デバイス 0: USB Audio [USB Audio] サブデバイス: 1/1 サブデバイス #0: subdevice #0
オーディオデバイスをまとめると
カード番号をXとすると、plughw:Xと表す。カード番号X、デバイス番号Yを組み合わせてplughw:X,Y、さらにサブデバイス番号Zを追加したplughw:X,Y,Zと細かく指定することもできる。
$ cat /proc/asound/modules 0 snd_bcm2835 1 snd_usb_audio
再生時や録音時は、デバイスを指定しなければ優先度が高いものから利用る。予めデバイスそのものの優先度を変更しておくこともできる。
$ sudo vi /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
export ALSADEV="plughw:1,0"
$ speaker-test -c2 speaker-test 1.1.8 再生デバイス: default ストリームパラメータ: 48000Hz, S16_LE, 2 チャネル 16 オクターブのピンクノイズを使用 レート 48000Hz (要求値 48000Hz) バッファサイズ範囲 480 ? 32768 ピリオドサイズ範囲 480 ? 32768 最大バッファサイズ 32768 を使用 ピリオド数 = 4 period_size = 8192 で設定 buffer_size = 32768 で設定 0 - Front Left 1 - Front Right ピリオド時間 = 5.134241 0 - Front Left 1 - Front Right
Raspberry Pi 内のサンプル音源でスピーカーをテストする。
$ aplay -D plughw:0,0 /usr/share/sounds/alsa/Front_Center.wav 再生中 WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, レート 48000 Hz, モノラル女性の声で「フロント、センター」と聞こえたらOK。
amixer sset XXX YYY -cZZZで各カードの音量レベルを変更することができる。(XXXにはコントロール名。YYYに数値、ZZZにカード番号)
デフォールト設定の音量が小さいことがあるので、音量を設定してからテストした方がよい。
$ amixer -c0 Simple mixer control 'PCM',0 Capabilities: pvolume pvolume-joined pswitch pswitch-joined Playback channels: Mono Limits: Playback -10239 - 400 Mono: Playback -2000 [77%] [-20.00dB] [on] $ amixer -c1 Simple mixer control 'Mic',0 Capabilities: cvolume cvolume-joined cswitch cswitch-joined Capture channels: Mono Limits: Capture 0 - 16 Mono: Capture 0 [0%] [0.00dB] [on] Simple mixer control 'Auto Gain Control',0 Capabilities: pswitch pswitch-joined Playback channels: Mono Mono: Playback [on]
$ amixer sset PCM 0 -c0 Simple mixer control 'PCM',0 Capabilities: pvolume pvolume-joined pswitch pswitch-joined Playback channels: Mono Limits: Playback -10239 - 400 Mono: Playback 0 [96%] [0.00dB] [on] $ amixer sset Mic 50 -c1 Simple mixer control 'Mic',0 Capabilities: cvolume cvolume-joined cswitch cswitch-joined Capture channels: Mono Limits: Capture 0 - 16 Mono: Capture 16 [100%] [23.81dB] [on]% で指定
$ amixer sset PCM 80% Simple mixer control 'PCM',0 Capabilities: pvolume pvolume-joined pswitch pswitch-joined Playback channels: Mono Limits: Playback -10239 - 400 Mono: Playback -1727 [80%] [-17.27dB] [on] $ amixer sset Mic 80% -c 1 Simple mixer control 'Mic',0 Capabilities: cvolume cvolume-joined cswitch cswitch-joined Capture channels: Mono Limits: Capture 0 - 16 Mono: Capture 13 [81%] [19.34dB] [on]
$ arecord voice.wav arecord: main:828: audio open error: そのようなファイルやディレクトリはありませんオーディオデバイスを指定しないと、優先度が高いデバイスで再生/録音をする。録音デバイスの優先度が低いため、arecordを実行すると、優先度が高い再生用デバイスbcm2835が利用されてしまい、録音できないとエラーが発生。
$ arecord -D plughw:1 voice.wav 録音中 WAVE 'voice.wav' : Unsigned 8 bit, レート 8000 Hz, モノラル ^Cシグナル 割り込み で中断... arecord: pcm_read:2145: 読込エラー: システムコール割り込み
$ alsamixer