【Raspberry Pi 4】音声を他の端末に転送する方法【PulseAudio】

【Raspberry Pi 4】音声を他の端末に転送する方法【PulseAudio】

# はじめに

この記事はRaspberry Pi4(以下、ラズパイと表記)の音声を、sshを用いて他の端末(PCやサーバ)に転送して再生する記事です。

# ラズパイの運用方法

筆者のラズパイの運用方法は、ラズパイ自体には、キーボードやマウスを始めモニターやスピーカーを接続せず、macから一元管理する運用を行っており、sshとVNCを使い分けています。
VNC接続に関しては別途記事にしているので興味がある方は是非読んでみてください。


あえてmacから出力する理由としては、ラズパイに合わせて諸々の備品を用意するのは億劫なので、それならmacから管理できれば時間もスペースも活用できるからです。

# 悩み

ここでお悩みポイントとなるのは、VNCでは音声転送できないということです。
音声合成などのプログラムを作成しているのですが、その結果をmacとペアリングしているBluetoothスピーカーから再生させます。
ラズパイ4はBluetooth接続ができるのでスピーカーに繋げばいいじゃんというツッコミもありますが、いちいち接続するの面倒なのでmacに音声転送し、その上macとペアリングしているbluetoothスピーカーに音声を飛ばします。



# 解決方法

解決方法として、コマンドライン上からmacとラズパイをssh接続し、pulseaudioを使用して音声転送します。 実際のイメージは以下のような感じです。サンプル音声を再生しています。


# 環境

環境はこちら。

# mac

macOS Catalina version 10.15.6

# ラズパイ

No LSB modules are available.
Distributor ID:	Raspbian
Description:	Raspbian GNU/Linux 10 (buster)
Release:	10
Codename:	buster

Linux raspberrypi 5.4.51-v7l+ #1327 SMP Thu Jul 23 11:04:39 BST 2020 armv7l GNU/Linux

ちなみに我が家のラズパイはLABISTSの入門用のキットです。



# PulseAudioを導入する

まずはPulseAudioとは、音声を複数の端末で伝送、再生するサーバーのようなものです。
詳しくはwikipediaのリンクにて。
👉PulseAudio - Wikipedia

# 構成

mac側にPulseAudioのサーバーを立て、ラズパイをクライアントとして接続します。

イメージは以下。

クライアント[ラズパイ] 
👇
PulseAudioサービス🎵
👇
サーバー[mac]
👇
Bluetoothスピーカー🔉

# mac側での導入

PulseAudioのインストールを行います。 基本的な流れは以下のサイトが参考になります。 dockerとmacの間での音声の転送ですが、macのインストールは一緒です。
👉Running a Docker Soundbox on Mac

流れとしては、

brew install pulseaudio

にてインストール。

以下のコマンドでサービスの起動・停止です。

brew services start pulseaudio
brew services stop pulseaudio

# エラーへの対応

この環境では以下のようなエラーが出ました。

ddyld: Library not loaded: /usr/local/opt/gdbm/lib/libgdbm.6.dylib
Referenced from: /usr/local/opt/pulseaudio/lib/libpulse.0.dylib
Reason: image not found
Abort trap: 6

見ての通り、ライブラリが不足しているエラーですので、追加で入れてあげましょう。 この場合はgdbmbrew installしたら解決です。

# ラズパイ側

ラズパイ側もPulseAudioをインストールします。 こちらは少し設定は必要です。 インストールはmacからssh接続して行います。

sudo apt install pulseaudio

インストール後、サーバーのIPアドレスを設定します。

$ cp /etc/pulse/client.conf ~/.config/pulse
$ nano ~/.config/pulse/client.conf

以下のコメントアウトを外して、macのローカルIPアドレスを入力すればOKです。
ちなみに;がコメントアウトです。

; default-sink =
; default-source =
default-server = 192.168.10.66
; default-dbus-server =

ここまでの処理が完了したら以下のコマンドを叩き、メッセージが出れば完了です。

$ pulseaudio --start
N: [pulseaudio] main.c: ユーザーが設定したサーバー 192.168.10.66 は start/autospawn を拒否しています。

これにて設定は完了。 あとは実際に音が出ればOK。

# いざテスト

テストは以下のコマンドをterminalに入力してみましょう。

aplay /usr/share/sounds/alsa/Rear_Center.wav

mac側がすでにBluetoothスピーカーとペアリングしている場合は、スピーカーからテスト音声が出力されます。
もし出ない場合は、configファイルの設定を見直してみましょう。

あとはpythonなりで音声を生成してあげればラズパイが読み上げてくれます。

以上。 良きラズパイライフを😊



デジタル分野やビジネス関連で学んだことを記事にしています。
Read moreやTagから他記事を検索できますので合わせてどうぞ😊

Philipp
Read more