工作と競馬2

電子工作、プログラミング、木工といった工作の記録記事、競馬に関する考察記事を掲載するブログ

PCの音声をラズパイオーディオで流す(1) --- とりあえずWebラジオとして受信する ---

概要

PCの音声をラズパイオーディオで流せるようにした。




背景と目的

私のデスクには、PCとラズパイオーディオがある。ラズパイオーディオの音声は、以前製作したデスクトップスピーカーを通して鳴らすことができるが、PCの音声はPCに接続されたディスプレイやヘッドフォン(自作ヘッドフォンアンプ経由)を通して鳴らすことしかできない。そのため、ときどきPCの音声をデスクトップスピーカーから流したいと思うときに不便を感じていた。そこで、PCの音声をラズパイオーディオ側で受信し再生できるようにする。



詳細

1. 調査

実現方法を調べたところ、比較的簡易な方法として、以下があることが分かった。

  • PC上で、自身の内部の音声をストリーミングできるサーバを建てる
  • ラズパイオーディオ側で、ストリーミングサーバをWebラジオとして受信して再生する

ただし、この方法は遅延が大きく、動画再生時の音声を流す用途には適さない。しかし、Volumio側は標準の機能だけで再生が可能というメリットがある。そこで、ひとまず鳴ればよいので、この方法でうまくいくか試すことにした。


2. システム構成

  • VB-CABLEは、PC内部の音声を入力できる仮想オーディオ入力ケーブル(デバイス)である。楽や動画をPC上のアプリケーションで再生した時に、その音声データをこのデバイスへ入力することで、入力データを他のアプリケーション(今回でいえばffmpeg)で利用できる。
  • icecastは、ストリーミングサーバアプリケーションである。
  • ffmpegでは、VB-CABLEに入力された音声データをicecastサーバに渡す。
  • ラズパイオーディオでは、Webラジオ局を受信する機能でicecastサーバにアクセスし、音声を受信して再生する。


3. 作業

作業の流れは、以下のとおりである。

  • VB-CABLEをインストール
  • icecastをインストール、設定
  • ffmpegをインストール

3.1 VB-CABLEをインストール、設定

以下のサイトからインストーラをダウンロードしてインストール。

vb-audio.com

Windowsの設定 > システム > サウンド > サウンドの詳細設定 > 録音で、VB-CABLEを有効化する。(すでに有効になっているかも)

ここで、PC上で何か音の出るアプリを実行(動画再生など)を行って、レベルインジケータが振れることを確認できれば良い。(なお、PCによってはVB-CABLEを使わずステレオミキサーを使えるらしいが、私の環境ではうまくいかなかったので、VB-CABLEをインストールした。)


3.2 icecastをインストール、設定

以下のリンク先からインストールする。

icecast.org

設定ファイル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の音声をラズパイオーディオで流すことができた。用途によっては実用になることが分かったので使っていきながら、より遅延の少ない方法も試してみたい。