0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

RaspberryPiをUSB Audio Gadget化してMacBookをBluetoothスピーカー化してみた

0
Posted at

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が見えていることが確認できます。
こちら側の名前は変わらないようです。

スクリーンショット 2026-10-18 20.08.28.png

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

見つかりました!hostnameになってるのかな?
Screenshot_20261018_145457_Settings.jpg

ペアリング時にPINが一致しているか聞かれたらyesと答えておきます。

スクリーンショット 2026-11-07 210312.png

ちなみに複数接続することが可能で、複数台の端末で音声を流すとすべて重なって聞こえます。

また、libfreeaptx0をインストールしたことにより、プロトコルはAptXで通信できていました。

Screenshot_20261107_215311_Settings.jpg

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に頼って入力を出力に垂れ流すだけのアプリを作りました。

image.png

7. さいごに

MacBookを有効活用できたとともに、RaspberryPiの可能性を感じました。

今回はUSBでMacBookへ出力しましたが、イヤホンジャックに出力すれば有線スピーカーをBluetooth化したり、オーディオインターフェース化したりなどして遊べそうです。

PC環境をカスタマイズしたい方、ぜひやってみてはいかがでしょうか。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?