Soundの設定

Raspberry piにスピーカやヘッドフォンをつないでそれを有効にする手順の説明です。

大抵の設定は raspi-config で

大抵の設定は raspi-configで出来ます。何も接続されていないrasperry pi zero Wで モニター画面からsudo raspi-config と入力し 1 System Options ー> S2 Audio と進むと現在のAudio outputのリストが表示されます。

VC4-hdmiのみ表示されます。スピーカーを持ったHDMIインターフェイスのディスプレーに接続すればそこから音が出る状態になってます。

次にUSBハブを使ってUSBスピーカー、ヘッドフォンの2つを同時に接続し同様にAudio outputリストを見ると下記の様にリストアップされます。

この画面で矢印キーを使って音を出したい機器を選択すればその機器がアクティブになります。ここでは仮に0のヘッドフォンを選択します。

確認

Raspberry piは音声入出力管理モジュールとして ALSAがデフォルトでインストールされます。このコマンドを使用して機器の確認が出来ます。先ずは選択した機器からサンプル音源を出力して見ます。サンプル音源は、/usr/share/sounds/alsa/に保存されています。その中の1つをaplayコマンドを使って再生して見ます。音声が聞こえたと思います。

aplay

pi@ras:~ $ ls /usr/share/sounds/alsa/
Front_Center.wav  Noise.wav        Rear_Right.wav
Front_Left.wav    Rear_Center.wav  Side_Left.wav
Front_Right.wav   Rear_Left.wav    Side_Right.wav
pi@ras:~ $ 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
pi@ras:~ $ 

聞こえなかった場合、機器のリュームが小さいからかもしれません。モニターに alsamixerコマンドを入力すると下記のボリュウム設定画面が表示されます。

ヘッドフォンのボリュームは45(左右)となっているのでしっかり聞こえました。

ボリュームはコマンドラインからも調整出来ます。モニターに amixer と入力すると現在の状態が表示されます

amixer

i@ras:~ $ amixer 
Simple mixer control 'Headphone',0
  Capabilities: pvolume pswitch pswitch-joined
  Playback channels: Front Left - Front Right
  Limits: Playback 0 - 38
  Mono:
  Front Left: Playback 30 [79%] [-20.00dB] [on]
  Front Right: Playback 30 [79%] [-20.00dB] [on]
Simple mixer control 'Mic',0
  Capabilities: pvolume pvolume-joined cvolume cvolume-joined pswitch pswitch-joined cswitch cswitch-joined
  Playback channels: Mono
  Capture channels: Mono
  Limits: Playback 0 - 127 Capture 0 - 16
  Mono: Playback 64 [50%] [11.99dB] [off] Capture 8 [50%] [11.90dB] [on]
Simple mixer control 'Auto Gain Control',0
  Capabilities: pswitch pswitch-joined
  Playback channels: Mono
  Mono: Playback [on]
pi@ras:~ $ 

Simple mixer control ‘Headphone’,0の’Headphone’を使ってボリュームを調整します。例えば、ボリュームを50%にしたければ amixer sset Headphone 50% と入力します(最大:100% 最小:0%)

amixer sset

pi@ras:~ $ amixer sset Headphone 50%
Simple mixer control 'Headphone',0
  Capabilities: pvolume pswitch pswitch-joined
  Playback channels: Front Left - Front Right
  Limits: Playback 0 - 38
  Mono:
  Front Left: Playback 19 [50%] [-47.50dB] [on]
  Front Right: Playback 19 [50%] [-47.50dB] [on]
pi@ras:~ $ 

確かにヘッドフォンの音量が変化しました。

実は

raspi-config で音声出力機器を選択するとホームディレクトリに .asoundrc というファイルが出来ます

ls -al

pi@ras:~ $ ls -al
total 36
drwxr-xr-x 4 pi   pi   4096 Feb 10 19:23 .
drwxr-xr-x 3 root root 4096 Dec  5 11:39 ..
-rw-r--r-- 1 root root  215 Feb 11 08:59 .asoundrc
-rw-r--r-- 1 pi   pi    220 Dec  5 11:39 .bash_logout
-rw-r--r-- 1 pi   pi   3523 Dec  5 11:39 .bashrc
-rw-r--r-- 1 pi   pi    807 Dec  5 11:39 .profile
pi@ras:~ $

内容は以下の通り

.asoundrc

pi@ras:~ $ cat .asoundrc
pcm.!default {
  type asym
  playback.pcm {
    type plug
    slave.pcm "output"
  }
  capture.pcm {
    type plug
    slave.pcm "input"
  }
}

pcm.output {
  type hw
  card 0
}

ctl.!default {
  type hw
  card 0
}
pi@ras:~ $ 

16,21行に card 0 という項目が有り、これが現在選択されたいる音声カードの様です。card 0の”0”は raspi-configのAudio outputリストの番号に対応している様です。現在0のヘッドフォンを選択しているので ”0”となります。

ちなにみ1のスピーカをraspi-configで選べば、16,21行は card 1 となります。ALSAは起動時にこのファイルを読み込んで機器の状態を判断している様です。root権限で .asoundrc を編集すれば(0を1に又は 1を0に)raspi-configを起動しないでデフォルトの機器を変更出来ます。

PulseAudioのインストール

raspi-configで1のUSBスピーカを選択すると音は出るのですが音量の調整が出来ない事が分かりました。ALSAではこのスピーカを設定出来ないようです。そこで PulseAudioを試してみる事にしました。

インストールは sudo apt-get install pulseaudio pulseaudio-module-zeroconf avahi-daemon

自動起動させるには、

  • pulseaudio の設定ファイル /etc/pulse/daemon.confで
    • local-server-type = userの行がコメントになっている事を確認
  • /systemd 用の設定ファイル /lib/systemd/system/pulseaudio.serviceを製作し保存
    • 内容は以下の通り。
lib/systemd/system/pulseaudio.service

[Unit]
Description=pulseaudio sound server
[Service]
Type=forking
PIDFile=/var/run/pulse/pid
ExecStart=/usr/bin/pulseaudio --system --daemonize
[Install]
WantedBy = multi-user.target
  • 設定の有効
    • sudo systemctl enable pulseaudio.service
    • sudo systemctl start pulseaudio
    • pulseaudio -D

pulseaudoが起動したので機器の設定を行います。

  • pulseaudioが認識している機器を表示
    • pacmd list-sinks | grep name: を実行
    • スピーカーとヘッドフォンが認識されている事が分かります。
pacmd list-sinks | grep name:

pi@ras:~ $ pacmd list-sinks  | grep name:
	name: <alsa_output.usb-C-Media_INC._USB_Sound_Device-00.analog-stereo>
	name: <alsa_output.usb-Sennheiser_Communications_Sennheiser_USB_headset-00.analog-stereo>
pi@ras:~ $ 
  • デフォルト機器の設定
    • pacmd set-default-sink を使用。
    • 今回はUSBスピーカを指定したいので
    • pacmd set-default-sink alsa_output.usb-C-Media_INC._USB_Sound_Device-00.analog-stereo
  • ボリュームの設定
    • pacmd set-sink-volume @DEFAULT_SINK@ XXXXX を使用
    • XXXXXはボリュームの大きさで 最大値:0x10000 最小値:0

pulseaudioではヘッドフォンもスピーカもボリュームの設定が出来ました。

この状態でホームディレクトリをみると

ls -al

pi@ras:~ $ ls -al
total 28
drwxr-xr-x 3 pi   pi   4096 Feb 11 14:45 .
drwxr-xr-x 3 root root 4096 Dec  5 11:39 ..
-rw-r--r-- 1 root root  215 Feb 11 14:27 .asoundrc
-rw-r--r-- 1 pi   pi    220 Dec  5 11:39 .bash_logout
-rw-r--r-- 1 pi   pi   3523 Dec  5 11:39 .bashrc
drwx------ 3 pi   pi   4096 Feb 11 14:45 .config
-rw-r--r-- 1 pi   pi    807 Dec  5 11:39 .profile
pi@ras:~ $ 

新しく、.configフォルダ が作製されその下に pulseフォルダ が有りその中には以下のファイルが有りました。

~/.config/pulse ls

pi@ras:~/.config/pulse $ ls
9de95719478749a3b320703beb1ccb8e-card-database.tdb  9de95719478749a3b320703beb1ccb8e-device-volumes.tdb
9de95719478749a3b320703beb1ccb8e-default-sink       9de95719478749a3b320703beb1ccb8e-stream-volumes.tdb
9de95719478749a3b320703beb1ccb8e-default-source     cookie
pi@ras:~/.config/pulse $ 

最後に

音声出力の選択は raspi-config で行えば良い。コマンドラインからボリュームを調整しようとすると機器に合わせてALSA か Pulseaudioを使用する。でしょうか。