読者です 読者をやめる 読者になる 読者になる

nishio-dens's diary

Railsとかプログラミング関連の備忘録

Windows-Ubuntu間でスピーカーを共有する方法

やりたいこと

  • 2台(以上)のPCで一つのスピーカーを共有したい

動機

私は以下のような環境で作業を行っています。

Macbook Airtwitterを表示しつつ、Windowsで作業しつつ、Ubuntuでニコ動などを再生するというような、パソコンを3台起動した状態での作業を良く行ってます。
もちろん、キーボードとマウスはmacbook airについているものをsynergyなどで共有しているため、パソコン毎にいちいちキーボードを変えるなんていう面倒なことはしてません。

しかし上記の環境に一部不満を持っていました。普段はWindowsが走っているPCにスピーカーを接続しているのですが、Ubuntuでニコ動を再生しながら作業する場合は、わざわざUbuntuが走っているコンピュータにスピーカーを接続しなおさなければなりませんでした。これはとても面倒です。
そこで、リモートPCで再生された音をローカルPCに出力する(つまりローカルPCのスピーカーを共有する)こととしました。今回は以下の環境化において、スピーカーを共有する方法の紹介を致します。

  • Ubuntu(リモート)で再生した音をUbuntu(ローカル)のスピーカーで流す
  • Ubuntu(リモート)で再生した音をWindows(ローカル)のスピーカーで流す
  • Windows(リモート)で再生した音をUbuntu(ローカル)のスピーカーで流す

Ubuntu(リモート)で再生した音をUbuntu(ローカル)のスピーカーで流す方法

Ubuntu-Ubuntu間でのスピーカー共有はとても簡単です。なぜなら、Ubuntuで標準搭載されているオーディオ再生機構のPulseAudioは、標準でPCの音を別PCに飛ばす機能が付いているからです。

Ubuntuローカル側(スピーカーに接続しているPC, IP:192.168.1.99)の設定

1.ターミナルから cp /etc/pulse/default.pa ~/.pulse/ を実行し、pulseaudioの設定ファイルをホームフォルダの.pulse下に置く
2.vimなどでコピーした default.pa ファイルを開き、以下の項目を追加する

load-module module-native-protocol-tcp auth-ip-acl=リモートPCのアドレス

3.以下のコマンドでPulseAudioの再起動を行う

pulseaudio -k
pulseaudio -D


図1: default.paの設定。写真では、リモートPCのアドレスは192.168.1.5となっている

Ubuntuリモート側(IP:192.168.1.5)の設定

1.cp /etc/pulse/client.conf ~/.pulse/ を実行する
2.コピーしたclient.confに以下のコマンドを追加する

default-server = ローカルPCのアドレス

3.pulseAudioの再起動を行う(上記のコマンド参照)


図2: client.paの設定。写真では、ローカルPCのアドレスは192.168.1.99となっている

以上で完了です。リモートPCで何か音楽でも再生してみて、ローカルPC側のスピーカーで再生されたら成功です。

Ubuntu(リモート)で再生した音をWindows(ローカル)のスピーカーで流す

Windowsローカル側(スピーカーを接続しているPC, IP:192.168.1.50)の設定

1. http://www.cendio.com/pulseaudio/ からPulseAudioのwindows版をダウンロードする
2. 適当な場所に展開し、そのフォルダ内に default.pa という名前のファイルを作る
3. default.paを次のように編集する

load-module module-waveout
load-module module-native-protocol-tcp auth-ip-acl=リモートUbuntuのIPアドレス

4. pulseaudio.exeというファイルを実行する

Ubuntuリモート側(IP:192.168.1.5)の設定

先ほどUbuntu-Ubuntu間で行った設定と同じです。
1. cp /etc/pulse/client.conf ~/.pulse/ を実行
2. client.conf に default-server = 192.168.1.50 を追加
3. Pulseaudioを再起動

以上で完了です。

Windows(リモート)で再生した音をUbuntu(ローカル)のスピーカーで流す方法

この方法はあまりお勧めしません。なぜなら、遅延が酷くて動画などは音ズレが凄く気になります。音楽再生程度なら問題ないかと思います。

Ubuntuローカル側(スピーカーが接続されているPC, IP:192.168.1.5)の設定

  • 特に設定は必要ありません

Windowsリモート側(IP:192.168.1.50)の設定

Windows側は前提条件があります。

  • Cygwinがインストールされており、かつsshが利用できること
  • ステレオミキサーが有効であること

Cygwinのインストール方法とかはここでは説明しません。分からない方はgoogle先生に聞いてください。gnupackとか使うのがお勧めです。

ステレオミキサーは、有効にしておかなければWindowsパソコン上で流れた音をUbuntu側に転送できません。
ステレオミキサーを有効にするには、コントロールパネル → サウンドで、録音タブを開き、ステレオミキサーを有効にしてください。もしステレオミキサーが表示されていない場合は、右クリックして無効なデバイスの表示、を押すと表示されるかもしれません。

次に手順を説明します。
1.LiveInCode( http://liveincode.romanrm.ru/ )をダウンロードする
2.cygwinで以下のコマンドを実行し、Liveincode(linco.exe)で取得した音をssh経由でUbuntuに送る

linco.exe -B 16 -C 2 -R 44100 | ssh ユーザ名@UbuntuローカルのIP "cat - | pacat --playback"

以上で完了です。ただ遅延が酷く、私の環境では使えませんでした。