簡易ネットラジオもどき
サーバから PCM データを送信し,手元のクライアントで再生してみるテストです. 容量のない PC で音楽を聞きたいときに使えるかもしれません (?)
下ごしらえ
音声ファイルを〆ます. ffmpeg
で wav に変換して sox
で裸にします. とりあえず CD 音質に.
$ ffmpeg -i hoge.m4a hoge.wav
$ sox hoge.wav -r44100 -c2 -b16 hoge.raw
FIFO 作成
FIFO のうまい使い方が未だにわかりません. この FIFO にはあとで .raw を書き込みます.
$ mkfifo queue
サーバ
nc
を利用して接続を待ち受けます. さっき作った FIFO の中身を (ちょっと細工して) 送信します.
この人は Ctrl-C しないと戻ってきません. この記事の上から順番にやってきた人はここでこの端末が使えなくなります. 次の仮想端末を立ち上げてください.
$ tail -n99999999 -f queue | cat | base64 | nc -l 50000
tail -f
で FIFO への追記 (後述) を監視します. -n99999999
は初回の内容を全部吐いてもらうためのおまじないです.
続く cat
は気休めのおまじないです. バッファの真似をしているつもりです.
base64
でデータを 7-bit な感じにします. 受け取り側が 8-bit なデータを受け取れるかわからないのでとりあえず 7-bit な感じにしています.
nc -l 50000
で 50000 番ポートを listen します. nc
を雰囲気で使っているのでよくわかりません.
クライアント
telnet
でサーバを突きます. 音声再生には aplay
を利用します.
$ telnet サーバアドレス 50000 2>/dev/null | sed '1,3d' | base64 -d | aplay -f cd
telnet
はサーバに接続します. エラーは捨てます.
sed
は telnet
の吐くログ “Connecting <サーバアドレス>...” とかを切り捨てます. 必要に応じて変更してください.
base64 -d
でデコードします.
aplay
で音声を再生します. -f cd
は CD 音質を意味します. スピーカのエイジングとかに興味のある人は cat /dev/urandom | aplay -f cd
とかするとホワイトノイズを聴けますよ.
曲の再生
まずはサーバを起動します. ついでクライアントを起動します.
曲を再生するには,作成した FIFO に .raw ファイルを (追加で) 書き込みます.
$ cat hoge.raw >> queue &
この操作はもしかしたらすぐに戻ってこないかもしれないので &
を添えてバックグラウンドで動いてもらうことにしました. 続けて曲を追加したい場合は次のように実行すると良いと思います.
$ wait; cat fuga.raw >> queue &
このコマンド行が返るのはおそらく一つ前の曲が再生し終わる頃でしょう.
おわりに
おわりです.