RaspberryPiをBluetoothレシーバー兼USB Audio Gadget化し、USBオーディオとしてMacBookに入力し、MacBook上で音を鳴らしてみました。
MacBook Proの内蔵スピーカーで鳴らしているのですが、一般的なノートPCの内蔵スピーカーとは思えないほどに音が良いため、有効活用したくて作ってみました。
1. 筆者の環境
- RaspberryPi 4 modelB 4GB
- MacBook Pro 14inch 2021 @ macOS Tahoe
2. USB Audio Gadget化する
Linuxには自身をUSB接続のデバイスだと認識させられる機能が存在します。
まずはそれを用いて、RaspberryPiをMacBookからUSBマイクだと認識させます。
しかし、RaspberryPi4では、電源供給に用いるType-Cポートで接続しないとUSB Audio Gadgetとして認識せられないようなので、電源供給不足に注意する必要があります。
まずは設定を変更します。
sudo nano /boot/firmware/config.txt
allの部分に、以下を追記します。
dtoverlay=dwc2,dr_mode=peripheral
dwc2がUSB OTG用のドライバ、dr_modeのperipheralというのはPCに接続される側専用とするための設定です。
これでUSB Gadgetが有効化できたので、実際にUSB機器として振る舞うための設定をします。
USB Audio Gadgetの設定を作成します。
sudo nano /etc/modprobe.d/g_audio.conf
以下の内容を記述しました。
options g_audio p_chmask=3 c_chmask=0 p_srate=48000 p_ssize=2 iProduct="好きなデバイス名"
サンプリング周波数や、USB Gadgetとしてのデバイス名などを指定できます。
そしたら起動時にこれらのモジュール・設定を自動で読み込みたいため、/etc/modules-load.d/配下にconfファイルを作成します。名前は何でも良いです。
sudo nano /etc/modules-load.d/usb_audio_gadget.conf
以下を記述します。
dwc2
g_audio
保存したら再起動します。
sudo reboot
これでUSB Audio Gadgetとして振る舞うための設定が完了したため、MacBookに接続してみます。
サウンド設定を開くと、入力先としてRaspberryPiが見えていることが確認できます。
こちら側の名前は変わらないようです。
3. Bluetooth受信機化する
ではいつものごとく
sudo apt update && sudo apt upgrade -y
をして、Bluetooth関係のライブラリをインストールします。
sudo apt install -y \
bluez \
pipewire \
pipewire-pulse \
wireplumber \
libspa-0.2-bluetooth \
libfreeaptx0 \
pulseaudio-utils \
alsa-utils
そして有効化します。
sudo systemctl enable bluetooth
sudo systemctl start bluetooth
こちらはユーザー単位のサービスです
systemctl --user enable --now \
pipewire.service \
pipewire-pulse.service \
wireplumber.service
SSHを抜けたあとに止まってほしくないので、以下を実行します。
sudo loginctl enable-linger "$USER"
mkdir -p ~/.config/wireplumber/wireplumber.conf.d
nano ~/.config/wireplumber/wireplumber.conf.d/51-headless.conf
wireplumber.profiles = {
main = {
monitor.bluez.seat-monitoring = disabled
}
}
4. ペアリングしてみる
スマホとRaspberryPiをBluetoothでペアリングしてみます。
bluetoothctl
これでBluetoothをいじれるモードに入ります。
power on
agent NoInputNoOutput
default-agent
pairable on
discoverable on
trust
ペアリング時にPINが一致しているか聞かれたらyesと答えておきます。
ちなみに複数接続することが可能で、複数台の端末で音声を流すとすべて重なって聞こえます。
また、libfreeaptx0をインストールしたことにより、プロトコルはAptXで通信できていました。
5-1. Bluetoothの起動に失敗する場合
私の環境ではBluetoothの起動に失敗したので、その際に行った対処を書いておきます。
# 出力
pi@raspberrypi:~ $ bluetoothctl
hci0 new_settings: bondable ssp br/edr le secure-conn
Agent registered
[CHG] Controller DC:A6:32:91:A8:CE Pairable: yes
[bluetoothctl]> power on
Failed to set power on: org.bluez.Error.Failed
[bluetoothctl]>
rfkillによりBluetoothがブロックされていたようなので、有効化することで解決しました。
sudo rfkill unblock bluetooth
5. 音声の出力先を設定
このままだと、ラズパイのヘッドフォンジャックから音が流れてしまいます。
実際に3.5mmジャック接続のスピーカー/イヤホンを繋いでみると、そこから鳴ることが分かります。
これはこれで色々使えそうなのですが、MacBookへ出力することですので、出力先を変更します。
wpctl status
で各音声デバイスのIDが取得できるので、USB GadgetのIDを控えておきます。
確認したらデフォルトの出力先に設定します。
wpctl set-default ここにID
6. 音を出してみる
音声入力デバイスを音声出力デバイスに流せるアプリを起動します。
例としては、QuickTimePlayerやGarageBandなどがあります。なお、アプリの使い方は割愛いたします。
ですが、いちいちGarageBandを起動してプロジェクトを開くのは面倒なため、Codexに頼って入力を出力に垂れ流すだけのアプリを作りました。
7. さいごに
MacBookを有効活用できたとともに、RaspberryPiの可能性を感じました。
今回はUSBでMacBookへ出力しましたが、イヤホンジャックに出力すれば有線スピーカーをBluetooth化したり、オーディオインターフェース化したりなどして遊べそうです。
PC環境をカスタマイズしたい方、ぜひやってみてはいかがでしょうか。




