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?

More than 3 years have passed since last update.

簡易ネットラジオもどき

Posted at

簡易ネットラジオもどき

サーバから 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 はサーバに接続します. エラーは捨てます.

sedtelnet の吐くログ “Connecting <サーバアドレス>...” とかを切り捨てます. 必要に応じて変更してください.

base64 -d でデコードします.

aplay で音声を再生します. -f cd は CD 音質を意味します. スピーカのエイジングとかに興味のある人は cat /dev/urandom | aplay -f cd とかするとホワイトノイズを聴けますよ.

曲の再生

まずはサーバを起動します. ついでクライアントを起動します.
曲を再生するには,作成した FIFO に .raw ファイルを (追加で) 書き込みます.

$ cat hoge.raw >> queue &

この操作はもしかしたらすぐに戻ってこないかもしれないので & を添えてバックグラウンドで動いてもらうことにしました. 続けて曲を追加したい場合は次のように実行すると良いと思います.

$ wait; cat fuga.raw >> queue &

このコマンド行が返るのはおそらく一つ前の曲が再生し終わる頃でしょう.


おわりに

おわりです.

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?