概要
PCの音声をラズパイオーディオで流せるようにした。
背景と目的
私のデスクには、PCとラズパイオーディオがある。ラズパイオーディオの音声は、以前製作したデスクトップスピーカーを通して鳴らすことができるが、PCの音声はPCに接続されたディスプレイやヘッドフォン(自作ヘッドフォンアンプ経由)を通して鳴らすことしかできない。そのため、ときどきPCの音声をデスクトップスピーカーから流したいと思うときに不便を感じていた。そこで、PCの音声をラズパイオーディオ側で受信し再生できるようにする。
詳細
1. 調査
実現方法を調べたところ、比較的簡易な方法として、以下があることが分かった。
- PC上で、自身の内部の音声をストリーミングできるサーバを建てる
- ラズパイオーディオ側で、ストリーミングサーバをWebラジオとして受信して再生する
ただし、この方法は遅延が大きく、動画再生時の音声を流す用途には適さない。しかし、Volumio側は標準の機能だけで再生が可能というメリットがある。そこで、ひとまず鳴ればよいので、この方法でうまくいくか試すことにした。
2. システム構成

- VB-CABLEは、PC内部の音声を入力できる仮想オーディオ入力ケーブル(デバイス)である。楽や動画をPC上のアプリケーションで再生した時に、その音声データをこのデバイスへ入力することで、入力データを他のアプリケーション(今回でいえばffmpeg)で利用できる。
- icecastは、ストリーミングサーバアプリケーションである。
- ffmpegでは、VB-CABLEに入力された音声データをicecastサーバに渡す。
- ラズパイオーディオでは、Webラジオ局を受信する機能でicecastサーバにアクセスし、音声を受信して再生する。
3. 作業
作業の流れは、以下のとおりである。
3.1 VB-CABLEをインストール、設定
以下のサイトからインストーラをダウンロードしてインストール。
Windowsの設定 > システム > サウンド > サウンドの詳細設定 > 録音で、VB-CABLEを有効化する。(すでに有効になっているかも)
ここで、PC上で何か音の出るアプリを実行(動画再生など)を行って、レベルインジケータが振れることを確認できれば良い。(なお、PCによってはVB-CABLEを使わずステレオミキサーを使えるらしいが、私の環境ではうまくいかなかったので、VB-CABLEをインストールした。)

3.2 icecastをインストール、設定
以下のリンク先からインストールする。
設定ファイルicecast.xmlを編集。(在処は、私の環境ではC:\Program Files(x86))最低限必要なのは、hostname、source-password、admin-password、port。
<hostname>{PCとラズパイのあるネットワーク上でのPCのIPアドレス}</hostname> <authentication> <!-- Sources log in with username 'source' --> <source-password>{適宜}</source-password> <!-- Relays log in with username 'relay' --> <relay-password>hackme</relay-password> <!-- Admin logs in with the username given below --> <admin-user>admin</admin-user> <admin-password>{適宜}</admin-password> </authentication> <listen-socket> <port>{適宜}</port> <!-- <bind-address>127.0.0.1</bind-address> --> <!-- <shoutcast-mount>/stream</shoutcast-mount> --> </listen-socket>
3.3 ffmpegのインストール
ffmpegのインストール手順は、Web上にたくさん情報があるので省略。
4. 実行
まず、icecastサーバを起動する。1つ目のターミナルで、以下を実行。
cd C:\Program Files (x86)\Icecast icecast -i icecast.xml
次に、ffmpegを2つ目のターミナルで以下のように起動。
cd /path/to/ffmpeg/bin
ffmpeg.exe -f dshow -i audio="CABLE Output (VB-Audio Virtual Cable)" -c:a libmp3lame -b:a 192k -content_type audio/mpeg -f mp3 icecast://source:{source-password}@{hostname}:{port}/stream
入力ソースとしてVB-CABLEのデバイスを選択。デバイス名は、以下のコマンドで確認。
ffmpeg -list_devices true -f dshow -i dummy
出力先は、icecastサーバ。設定と一致するように、source-password、hostname、portを設定。
4.2 Volumio
Webラジオ画面で、新しいラジオ局を追加。icecastサーバの設定値を用いる。
名前: 適宜
URL: http://{hostname}:{port}/stream
再生ボタンを押して、PC上で再生している音が流れればOK。
5. 感想
予想通り、非常に遅延が大きく数秒ほどである。ということで、映像と一緒に聴く用途では全く使い物にならないが、ひとまず音が出ればよい、BGMとして流しておく、という用途ではひとまず問題ない。
まとめと今後の課題
PCの音声をラズパイオーディオで流すことができた。用途によっては実用になることが分かったので使っていきながら、より遅延の少ない方法も試してみたい。