Raspberry PiでUSBヘッドセットを使う

はじめに

Raspberry PiでUSBヘッドセットを使いたいって相談を受けて試してみたのでメモ.
Raspberry Pi2で検証しましたが基本的にはどれでも同じはず.
Raspberry Pi2はクリーンインストールしたキレイな状態です.

環境

  • Raspberry Pi 2
    1pi@raspberrypi:~ $ cat /etc/debian_version
    29.3
    3pi@raspberrypi:~ $ lsb_release -a ※lsb-releaseパッケージ入れました
    4No LSB modules are available.
    5Distributor ID: Raspbian
    6Description:    Raspbian GNU/Linux 9.3 (stretch)
    7Release:        9.3
    8Codename:       stretch
    
  • ヘッドセット(バッファロー BUFFALO BSHSUH12BK)

環境構築

パッケージのアップデート

いつも通りアプデします.

1pi@raspberrypi:~ $ sudo apt-get update -y
2pi@raspberrypi:~ $ sudo apt-get upgrade -y

スピーカーで音を聞くまで

Raspberry Piを起動した状態でUSB接続します.
認識したか確認します.大体末尾の番号のやつがそうです.

1pi@raspberrypi:~ $ lsusb
2Bus 001 Device 005: ID 046d:c52b Logitech, Inc. Unifying Receiver ←USBキーボード
3Bus 001 Device 004: ID 0d8c:013c C-Media Electronics, Inc. CM108 Audio Controller ←認識された
4Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
5Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. SMC9514 Hub
6Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Alsa側に認識された確認します.

 1pi@raspberrypi:~ $ aplay -l
 2**** List of PLAYBACK Hardware Devices ****
 3card 0: ALSA [bcm2835 ALSA], device 0: bcm2835 ALSA [bcm2835 ALSA]
 4  Subdevices: 8/8
 5  Subdevice #0: subdevice #0
 6  Subdevice #1: subdevice #1
 7  Subdevice #2: subdevice #2
 8  Subdevice #3: subdevice #3
 9  Subdevice #4: subdevice #4
10  Subdevice #5: subdevice #5
11  Subdevice #6: subdevice #6
12  Subdevice #7: subdevice #7
13card 0: ALSA [bcm2835 ALSA], device 1: bcm2835 ALSA [bcm2835 IEC958/HDMI]
14  Subdevices: 1/1
15  Subdevice #0: subdevice #0
16card 1: Device [USB PnP Sound Device], device 0: USB Audio [USB Audio] ←認識されてる
17  Subdevices: 1/1
18  Subdevice #0: subdevice #0

デバイスの優先度を確認します.

1pi@raspberrypi:~ $ cat /proc/asound/modules
2 0 snd_bcm2835
3 1 snd_usb_audio

USBデバイスの優先度が低いので上にあげます.
デフォルトの状態であればファイルがないので作成します.

1pi@raspberrypi:~ $ sudo vi /etc/modprobe.d/alsa-base.conf
2options snd slots=snd_usb_audio,snd_bcm2835
3options snd_usb_audio index=0
4options snd_bcm2835 index=1

適用するために再起動します.

1pi@raspberrypi:~ $ sudo reboot

確認します.

1pi@raspberrypi:~ $ cat /proc/asound/modules
2 0 snd_usb_audio ←優先度があがった
3 1 snd_bcm2835

ここでusbが消えてる場合はconfig書き間違えてる可能性が高いです.
コメントアウトしたりして元に戻るようなら記述を見直しましょう.
音を流してみて聞こえるかテストします.

1pi@raspberrypi:~ $ aplay /usr/share/sounds/alsa/Front_Center.wav
2Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono

Front Centerで音声が聞こえたらOKです.

マイクを使う

多分スピーカーが鳴る状態まで来てると使えるはずです.
今回はヘッドセットだったからかもですけど.
録音はCtrl+Cで終了します.

1pi@raspberrypi:~ $ arecord -f S16_LE -r 44100 test.wav
2Recording WAVE 'test.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Mono
3[Ctrl+C]
4Aborted by signal Interrupt...
5arecord: pcm_read:2103: read error: Interrupted system call
6pi@raspberrypi:~ $ ls
7test.wav

再生してみます.

1pi@raspberrypi:~ $ aplay test.wav
2Playing WAVE 'test.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Mono

録音した音が入ってればおっけーです.

エラーあれこれ

/proc/asound/modulesからsnd_usb_audioが消えた!

多分alsa-base.confの記述が間違っています.
自分の場合はslotsの部分がslotになってました.

1- options snd slot=snd_usb_audio,snd_bcm2835
2+ options snd slots=snd_usb_audio,snd_bcm2835