はじめに
ネットワーク経由で音の再生・録音をしてみます。OSはLinuxです。遠いところに置いた省電力のデバイスから簡単に音を出せます。無線でつなげば、どこでも音楽が聴けるようになりますね。
構成
ここでは、音の再生・録音の操作をする計算機をクライアント、実際にスピーカやマイクがつながっている計算機をサーバとします。 クライアントは、VirualBox内で稼動しているDebian 8.1です。
サーバは、Raspberry Pi 3 Model Bです。こちらのOSはDebian 8.0です。 音の転送には、PulseAudio 5.0を用います。ALSAのひとつ上の層で動くサウンドサーバです。音をファイルから再生する場合は、
[クライアント]→[サーバ]→[スピーカ]→音
というふうにデータが流れ、録音する場合は、
音→[マイク]→[サーバ]→[クライアント]
のように流れます。
サーバの設定
まず、設定ファイルをコピーします。
cp /etc/pulse/default.pa ~/.config/pulse/この中から、コメントアウトされているmodule-native-protocol-tcpの項目を見つけてきて、コメントをはずし、次のようにオプションを追記します。
load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1;192.168.1.0/24auth-ip-acl=の右側はアクセスを許可するクライアントのIPアドレスです。複数指定する場合は、;で区切ります。マスクも使えます。 設定を反映するために、PulseAudioを再起動します。
$ pulseaudio --kill $ pulseaudio --startこれで、サーバ側の準備は終わりました。
クライアントから操作
動作テストに使うwavファイルを適当に入手します。例えば、
$ wget https://freewavesamples.com/files/1980s-Casio-Piano-C5.wav
毎回サーバを指定
環境変数PULSE_SERVERを指定するだけで、サーバのスピーカから音を出力することができます。 サーバ(Raspberry Pi)のアドレスが192.168.1.2であれば、
PULSE_SERVER=192.168.1.2 aplay 1980s-Casio-Piano-C5.wavとすると、サーバにつなげたスピーカから音が出ます。 同じように、録音もできます。
PULSE_SERVER=192.168.1.2 arecord test.wav
デフォルトサーバの指定
環境変数を毎回指定するのが手間な場合は、
export PULSE_SERVER=192.168.1.2とします。または、client.confを設定します。具体的には、
cp /etc/pulse/client.conf ~/.config/pulse/のように、クライアント用の設定ファイルをコピーし、コメントアウトされているdefault-serverを
default-server = 192.168.1.2のように有効化します。 なお、これらの設定をするとクライアントにしている計算機でPulseAudioのサーバを起動できなくなります。例えば、
$ pulseaudio --start N: [pulseaudio] main.c: ユーザーが設定したサーバー 192.168.1.2 は start/autospawn を拒否しています。というエラーが出るようになります。
参考
[1] http://nishio.hateblo.jp/entry/20111215/1323962652
[2] https://wiki.archlinux.jp/index.php/PulseAudio/%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB
[3] https://qiita.com/tukiyo3/items/d39c90f91d782001e7d7
[4] http://d.hatena.ne.jp/kakurasan/20081212/p2
0 件のコメント :
コメントを投稿