raspberry pi とpcm5102をスマホでボリューム調節

# やりたい事
アンプのボリュームツマミを使わずに、スマホでボリューム調節をしたい！！
music player daemonつっこんで、スマホでmpcでボリュームコントロール！！

# ウチの環境
raspberry py3にpcm5102を接続してます。pcm5102の音声出力を中華製アンプlepyに繋げてlepyとスピーカーを繋げてます。

## pcm5102について
pcm5102は、ボリュームのハードウェア制御ができません。以前、volumioを使ってたので、アルバムからの選曲をスマホでカッコよく操作出来るのに、ボリュームは、アンプの場所まで行って、ツマミで調節してました。トホホホホ。

前は、もう、当然のようにあきらめたんです。でも、今回、なんか方法ありそうだよなぁって、見てたら、ありました、できました！！この喜びを共有して、書いてます。

# 設定
行き着くまで、試行して錯誤してメッチャ長い道のりでしたが、まとめてみると、ほんのチョチョイのチョイですね。


## raspberry pi にpcm5102を接続
pcm5102を使うための設定です。
```txt:/boot/config.txt
hifiberry-dac
```
## music player daemon インストール
このソフトはスグレモノですね。mp4も連続再生してくれます。
```
hottool@music:~$ sudo apt update
hottool@music:~$ sudo apt install mpd
```

## サウンドカードの確認
全てのサウンドカードとデジタルオーディオデバイスのリストを確認します。
```
hottool@music:~ $ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: Headphones [bcm2835 Headphones], device 0: bcm2835 Headphones [bcm2835 Headphones]
  Subdevices: 8/8
  Subdevice #0: subdevice #0
  Subdevice #1: subdevice #1
  Subdevice #2: subdevice #2
  Subdevice #3: subdevice #3
  Subdevice #4: subdevice #4
  Subdevice #5: subdevice #5
  Subdevice #6: subdevice #6
  Subdevice #7: subdevice #7
card 1: sndrpihifiberry [snd_rpi_hifiberry_dac], device 0: HifiBerry DAC HiFi pcm5102a-hifi-0 [HifiBerry DAC HiFi pcm5102a-hifi-0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 2: vc4hdmi [vc4-hdmi], device 0: MAI PCM i2s-hifi-0 [MAI PCM i2s-hifi-0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
hottool@music:~ $  
```

## alsaのソフトウェアボリューム設定
alsamixser で音声制御がこの設定をするまでは、できなかったのですが、この設定をしたらできるようになりました。

```text:/etc/asound.conf
pcm.hifivol {
    type            softvol
    slave {
        pcm         "plughw:sndrpihifiberry"
    }
    control {
        name        "Softmaster"
        card        1
    }
}
```

## 音声出力確認
これで、スピーカーの右、左に音が出るといいんですが、

```
hottool@music:~ $ speaker-test -Dhifivol -c 2 -twav

speaker-test 1.2.4

Playback device is hifivol
Stream parameters are 48000Hz, S16_LE, 2 channels
WAV file(s)
Rate set to 48000Hz (requested 48000Hz)
Buffer size range from 8 to 131072
Period size range from 4 to 65536
Using max buffer size 131072
Periods = 4
was set period_size = 32768
was set buffer_size = 131072
 0 - Front Left
 1 - Front Right
Time per period = 0.727501
 0 - Front Left
 1 - Front Right
Time per period = 2.737099
 0 - Front Left
 1 - Front Right
Time per period = 3.407165
 0 - Front Left

```


## ボリュームコントロール確認

alsamixer
F6キーでサウンドカードを選択したら、ボリュームコントロールできましたか？

## mpdの音声出力先設定
これで、ソフトウェアでのボリュームコントロールができるようになったはずですが、mpd の設定でも、ソフトウェアで制御するようにしないといけません。audio_outputを以下のように指定しました。
```text:/etc/mpd.conf
audio_output {
        type            "alsa"
        name            "My ALSA Device"
        device          "hifivol"   
        mixer_type      "software"  
}
```

# mpdの再起動
設定を変えたあとに、mpd を止めて、再起動です。
```
hottool@music:~$ sudo systemctl stop mpd
hottool@music:~$ sudo systemctl start mpd
```
これでできました。


# おすすめandroid mpc クライアント
私は、android で、M.A.L.P. を使ってます。MPDroidも使ってみましたが、バージョンが古いせいか、強制終了を繰り返してしまいます。

# 参考
https://alsa.opensrc.org/Softvol

https://alsa.opensrc.org/How_to_use_softvol_to_control_the_master_volume

ALSAとはAdvanced Linux Sound Architectureの略称で、Linuxにおける高機能なサウンドシステムを提供するためのソフトウェア群

# 最後に
途中まで、自身満々で記事を書いていたのですが、なんか、alsaって難しいですね。途中挙動がわからなくなり、この記事、少し自信がないです。詳しい方、ご指摘いただければ嬉しいです。そんな中途半端な記事ですが、どなたかの参考になれば嬉しいです。

次は、mpc でのプレイリストの操作など、クライアントの使い方をマスターしたら書きたいなって思っています^^;