HOME > レビュー > オーディオ伝送の最新トレンド、Audio over IP。 ラズパイで「RAWストリーミング」を試す

海上忍のラズパイ・オーディオ通信(55)

オーディオ伝送の最新トレンド、Audio over IP。 ラズパイで「RAWストリーミング」を試す

公開日 2019/02/23 07:00 海上 忍
  • Twitter
  • FaceBook
  • LINE

MacからラズパイへRAWストリーミング

前述したとおり、AoIPでは複数の端末が共通の約束事(プロトコル)に基づきオーディオデータの伝送を行うが、送信側デバイスと受信側デバイスが“共通語”で話しさえすれば問題はない。プロトコルといっても、エンコード/デコードによりデータを効率的に伝送しようなどと難しいことさえ考えなければ、意外なほど簡単に実現してしまうものだ。

そこで試してみたのが「RAWストリーミング」。Raspberry Piがサーバーとなって特定の通信ポートを監視し、そこにクライアントとなるMacからデータが届いたらプレーヤーソフトウェアを起動してそのデータを再生する、という単純なものである。

利用するコマンドは「nc」と「aplay」。ncコマンドはTCP/UDPパケットを読み書きする目的のコマンドで、ネットワークの保守点検/テストに用いられる。任意の通信ポートを対象としたデータ送受信のほか、サーバモードで起動すれば特定の通信ポートを監視し、何らかの処理につなげることもできる。Raspberry Piでncコマンドをサーバモードで起動しておき、Macから音楽データが受信されてきたらaplay(ALSA標準のベーシックなオーディオ再生コマンド)で再生しよう、という段取りだ。

なお、ncとaplayはRaspbian(多くのRaspberry Pi向けディストリビューションに使われているLinux OS)に標準装備されているものの、データを受信したときに任意のコマンドを実行するためのオプション(-e)がサポートされていないので、以下のコマンドで「nmap」をインストールする(SSHでリモートログインして作業すること)。このパッケージに含まれている「ncat」はncの上位互換版であり、その「-e」オプションを利用できるからだ。

- - - - -
$ sudo apt-get update
$ sudo apt-get install nmap
- - - - -

nmapのインストールが完了したら、以下のコマンドラインを実行しよう。何をしているかを簡単に説明すると、ncatコマンドでは「-l」オプションでサーバーモードにすることを、「-p」オプションで監視する通信ポートを(この場合5555)、「-e」オプションで引数に与えるコマンドライン(ダブルクォーテーションで囲んだ範囲)を指定している。

Raspberry Pi側でnc(ncat)コマンドをサーバーモードで起動しておく

aplayコマンドの部分では、「-M」オプションでメモリマップドI/Oをオーディオストリームとして使用することを、「--buffer-size」でメモリ上に確保するバッファサイズを、「-t」オプションでRAWデータ(リニアPCM)として再生することを指定している。

- - - - -
$ ncat -l -p 5555 -e "/usr/bin/aplay -v -M --buffer-size=32768 -t raw"
- - - - -

次にMacへ作業を移し、Terminalで以下のとおりコマンドを実行する。catコマンドは、引数に与えたファイルを標準出力へ書き出す働きを持ち、この場合WAVファイルがその対象だ。それをncコマンドにパイプし、Raspberry Piのアドレス(192.168.12.4/5555番ポート)へ送信している。なお、ncコマンドはmacOS付属のもので構わない。

MacではWAVファイルをncコマンドにパイプする

- - - - -
$ cat sound.wav | nc 192.168.12.4 5555
- - - - -

さて、これで何が起きるかというと……Mac上のWAVファイルがネットワーク(TCP)経由でRaspberry Piにストリーミングされ、メモリにバッファーされた上でALSAのサウンドデバイスに出力される。メモリマップドI/Oを使用するとユーザーモードでデータにアクセスできるため、より効率的に再生できるため音質にもプラスに作用するだろうと推定してのことだ。

肝心の音質だが、CDからリッピングした音源(44.1kHz/16bit)に関して言えば、Raspberry Piローカルで再生した時と比較して遜色ない。音途切れもなければS/Nの変化もなく、再生中にprocファイルシステム -- 実行中のプロセスやカーネル、周辺機器の状態を参照できる特別なファイルシステム -- を確認しても、サンプリングレート/ビット深度ともにローカル再生時と変わりはない。

ハイレゾ品質のWAVについても、特に支障なく再生できた。aplayコマンドでは、「-f」オプションを使うことでフォーマットの指定が可能だが、省略すると(受信したデータを判定して)適切なフォーマットを指定してくれるため、88.2kHz/24bitや96kHz/24bitのWAVも音途切れなどの問題は発生しなかった。

procファイルシステムを確認すると、88.2kHz/24bitのWAVファイルも支障なく再生できていることがわかる

この「RAWストリーミング」、ncコマンドさえ動作すればクライアントのOSを選ばないというユニークさもあるが、音質もなかなかのもの。DLNAやOpenHomeといった既成のネットワーク再生規格への対抗軸となりうるかどうかはさておき、プロトコルをTCPではなくUDPに変えるとどうなるか、ncに代わるサーバ/クライアントソフトを用意すればどうなるか。追いかける価値はあると思うが、いかがだろう。

前へ 1 2

この記事をシェアする

  • Twitter
  • FaceBook
  • LINE