Raspberry Pi の VNC に音声を追加する　〜　Pulseaudio Wi-Fi Sound Stream の設定

　Raspberry Pi は、子どもたちの為の教育用 SBC(Single Board Computer)なので、インストールや設定についても分かりやすい説明が公式ウェブサイトにも、一般のウェブサイトにも用意されていて、何にも困ることはないとても便利なデヴァイスですよね。ここしばらく、半導体不足のために Raspberry Pi の最大の利点である「安価」なところが損なわれていて、2023年9月現在、Raspberry Pi 4B(2GB)が 10,000 円もしています。これでは、別のコンパクト PC と同じ価格帯なので、早く元の数千円で買える価格帯に戻って欲しいものです。

　ところで、Raspberry Pi に限らず、Unix/Linux を使用した OS の場合、X Window System を初め、何でも Network を利用して転送できるようになっていますが、音声についても例外ではありません。しかしなぜか、Raspberry Pi の音声を端末側に転送する設定にはなっていません。音声は、Raspberry Pi にスピーカー(或いは Bluetooth Speaker)をつなげれば「一番簡単」ということなのかも知れませんが、今回は、たまたま手元の ubuntu との間で必要があり、設定を行ったので記録として残しておこうと思います。
<BR>
<BR>
#### 1.Pulseaudio の設定
- - -

　最近の rpi の OS は、Pulseaudio が標準モジュールに採用されているので、次のウェブサイトなどを参考に設定を行うことで ubuntu との転送の設定は簡単に行うことができます。

https://blog.3qe.us/entry/2022/10/16/234520#PulseAudio%E3%81%A7%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%E3%82%92%E6%9C%89%E5%8A%B9%E5%8C%96%E3%81%99%E3%82%8B-1

少し前の Raspberry Pi の場合は、ALSA が標準モジュールになっていますので、Pulseaudio も apt で持ってくる必要があります。avahi-daemon も必要になってきますので、こちらも同じ様に apt で入れておく必要があります。

https://pyopyopyo.hatenablog.com/entry/2020/03/13/172510

ところで、上記２つのウェブサイトは、転送の向きが逆なのに気がつかれたでしょうか。

上は、「PC **←** rpi」
下は、「PC **→** rpi」

少しずつ説明されている内容が異なっていますので、気をつけて読むと、とても参考になります。

<BR>
<BR>

##### Raspberry Pi 側


最近の OS を前提に、一番簡単な設定を求めると、Raspberry Pi 側の /etc/pulse/default.pa の以下のコメントアウトを外します。

```shell-session:/etc/pulse/default.pa
load-module module-native-protocol-tcp
```

そして、すぐ下に "load-module module-zeroconf-discover" を**追加**します。

```shell-session:/etc/pulse/default.pa
load-module module-zeroconf-discover
```
:::note info
"zeroconf" がインストールされていない場合は、
```
sudo apt install pulseaudio-module-zeroconf
```
でインストールしておきます。
:::
<BR>
<BR>
<BR>
<BR>
<BR>

##### VNC で表示する PC 側

VNC で表示する PC 側では、/etc/pulse/default.pa の以下のコメントアウトを外し、"module-native-protocol-tcp" に **"auth-anonymous=1" を加え**ます。

```shell-session:/etc/pulse/default.pa
load-module module-native-protocol-tcp auth-anonymous=1
load-module module-zeroconf-publish
```

アクセス制限無しで、匿名接続を許可しています。

:::note info
アクセス制限が必要な場合は、このように ip address を指定します。
```
load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1;192.168.96.0/16
```
:::

つまり、Pulseaudio のスピーカーを公開する側では "**publish**"、使う側には "**discover**" を有効にするということです。

:::note info
"zeroconf" がインストールされていない場合は、
```
sudo apt install pulseaudio-module-zeroconf
```
で、どちらにもインストールしておきます。
:::

しばらくすると、Pulseaudio が設定を反映してくれますが、どちらも再起動してしまっても大丈夫です。


![Screenshot 2023-09-11 14:20:59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1486355/0621dea2-69d3-a04a-354d-bb14073b4c1b.png)

スクリーンショットの通り、PC 側のスピーカーが、Raspberry Pi に表示されてるので、PC 側のスピーカーを選択すると、PC 側で再生されるようになります。また、このコントロールは、Pulseaudio 用のコントロールなので、こちらも apt でインストールしておきます。

```shell-session
sudo apt install pavucontrol
```

![pulseaudio_rpi.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1486355/6cd25dcd-0c46-5ce9-f2c5-8524bd864165.jpeg)

:::note info
もし、音声に「ぷちっ、ぷちっ、」と断絶音が入る場合は、 /etc/pulse/daemon.conf から、以下のコメントアウトを外して Pulseaudio の処理の優先度を上げてやると、いいようです。

```shell-session:/etc/pulse/daemon.conf
high-priority = yes
nice-level = -11
```
2.4[GHz]帯 Wi-Fi は、チャンネルが少ないので思うように転送速度が出ないかも知れません。そういった場合は、5[GHz]を使用するか、**有線 LAN** を使用すると、安定します。
:::

<BR>
<BR>
<BR>

#### 2.送信側と受信側を反対にする場合
- - -

　先にも少し述べましたが、音声を鳴らす側と、送る側を反対にする場合は、"/etc/pulse/default.pa" の設定を反対にします。

![Screenshot 2023-09-11 14:27:09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1486355/6c317fb1-3c00-c069-f127-76a8b7baa644.png)

そうすると、PC 側に Raspberry Pi のスピーカーが表示されます。

![　pulseaudio_discover.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1486355/0ae2a8a4-162f-d41c-e035-7f63164c206f.jpeg)

<BR>
<BR>
<BR>

#### 3.最後に
- - -

　今回は、ubuntu を端末に説明していますが、Windows や Mac でも、Pulseaudio を設定すると使えるようになります。ところで、**双方向でどちらのスピーカーも使いたい場合**は、どうしたらいいのでしょうか。どちらの "default.pa" も "auth-anonymous=1" と "publish" を有効にして、"discover" を追加してやるならできそうですが、確かにできました。多少、表示がおかしくなっているのに目をつぶれば、大丈夫です。何かおかしい場合は、"pulseaudio -k" で一度、pulseaudio を再起動してやると使えるようになるようです。

<BR>
<BR>
<BR>

**以上**
<BR>
<BR>
<BR>
<BR>
<BR>