はじめに

ホストOSがLinuxの場合に,ゲストOSで音が鳴るようにするには,/dev/dspをVMwareに渡す他に,ホストのLinux側でサウンドサーバを上げて,ゲストOSでのサウンドの再生をネットワーク越しにホスト側に飛ばしてホスト側で再生してもらうという方法があります.

用途によっては遅延が気になりそうですが,まともに音が鳴らないことから思えば遥かにマシというところかと.

ここでは,VMware上のゲストOSのWindows2000からホストOS上のLinuxに,EsounDで音を飛ばしてみたいと思います(EsounD以外に飛ばす方法があるのかどうかは不明).

設定の手順

Windows2000側

  • The Windows NT Enlightened Sound DriverからWinESD-0.03.zipをダウンロードして,展開.これが今回のキモ.Windows2000にもちゃんと対応している.WindowsXPで使えるかどうかは未確認.
  • コントロールパネルから「ハードウェアの追加と削除」を開き「次へ」(図1).「デバイスの追加/トラブルシューティング」を選んで再び「次へ」(図2).
  • 「ハードウェア デバイスの選択」が出たら「新しいデバイスの追加」を選んで「次へ」(図3).「新しいハードウェアを検索しますか?」に対しては「いいえ・・・」を選んで「次へ」(図4).
  • 「ハードウェアの種類」から「サウンド、ビデオ、およびゲームコントローラ」を選び「次へ」(図5).
  • 「デバイスドライバの選択」が出てきたら,一覧から選ばずに「ディスク使用」ボタンを押す(図6).で,ここで「参照」ボタンを押して,さっき展開したWinESDの中の「OEMSETUP.INF」を選択し「OK」を押す(図7).「デジタル署名が見つかりませんでした」と言われるがもちろん「はい」を押して続行(図8).
  • 「デバイスドライバの選択」のモデル欄に「Enlightenment Driver」が出てくるので「次へ」(図9).「ハードウェアのインストール開始」が出たら「次へ」(図10).再度「デジタル署名が見つかりませんでした」と出るがもちろんここも「はい」(図11).
  • 何か「Hello」(デバッグメッセージ?)と出たら「OK」を押して完了(図12).あとは「完了」を押して終わり(図13).「完了」を押すと,再起動を促してくるがとりあえず再起動しない.
  • スタートメニューの「ファイル名を指定して実行」から「regedit」を実行する.
  • レジストリエディタが起動したら,「HKEY_LOCAL_MACHINE」内の「SOFTWARE」を右クリックして,「新規」の中から「キー」を選択.「New Key #1」がでてきたら,名前を「Enlightened」に変更する.
  • できた「Enlightened」を右クリックして再度「新規」の「キー」を選択(図14).今度は「New Key #1」を「WinESD」という名前にする(図15).
  • できた「WinESD」を右クリックして,今度は「新規」から「文字列」を選択.すると,右側に「New Value #1」ができるので,これの名前を「ESPEAKER」に変更する(図16).
  • 「ESPEAKER」をダブルクリックして,「値のデータ」欄にホストOS側のIPアドレスとesdが動いているポート番号を指定する(図17図18).例えば,ホストOSのvmnet8のIPアドレスが「172.16.14.1」で,esdのポート番号を「16001」とした場合,「値のデータ」欄の中身は「172.16.14.1:16001」となる.
  • ここまでできたらWindowsを再起動する.
  • 再起動後コントロールパネルの「サウンドとマルチメディア」を開いて「オーディオ」タブを選び,「優先するデバイス」欄から「WinESD」を選択すればWindows側の設定完了(図19).

Linux側

  • EsounDがインストールしてあって,ちゃんと動くことが前提.インストールされてなければ適宜ソースから入れるなりapt-getするなりして自分のやり方でインストールしておく.
  • esdを起動する.以下「-nobeeps -as 2 -d default -r 44100 」より後ろのオプションがネットワーク関係(「default」は/dev/dsp等適宜自分の環境に合わせて変更する).この状態でWindows側から音が鳴るはず.なお,「-bind 172.16.14.1」はvmnet8のIPアドレスで,これを指定することでesdへの接続をVMwareが使っているネットワークからのみに制限している(つもり).
    esd -nobeeps -as 2 -d default -r 44100 \
     -promiscuous -port 16001 -public -tcp -bind 172.16.14.1 &
  • 上記例でデバイスとして指定している「default」は,.asoundrc内でdmixとして設定されている.そのため,このデバイスを利用するesdを複数同時に立ち上げることが可能である.なので,Linux側からesdで再生する際にはunixドメインのソケットを利用するesdを別途立ち上げておけば良い.
  • 一方,上記例とは異なり,esdから直接/dev/dsp等を開く場合,複数のesdを立ち上げることはできないので,localhostからesdへの接続もTCP/IP経由にする必要がある.たとえば,mplayerだったら以下のような感じでデバイスを指定する.
    mplayer -ao esd:172.16.14.1:16001 hoge.mp3

余談

VMwareを起動する際にesdを上げ忘れそうなので,以下のように.zshrcに書いてみたりしてみました.正直エレガントさに欠けて微妙.

vmware() {
 ( ps auxw | grep esd | grep -- "-bind 172.16.14.1" > /dev/null || \
  /usr/local/bin/esd -nobeeps -as 2 -d default -r 44100 \
  -promiscuous -port 16001 -public -tcp -bind 172.16.14.1 & ) > /dev/null 2>&1
 nice -n 10 sudo vmware "$@" &
 disown
}

実際にWinAMPでoggを再生してみたところ,曲の頭の方が何度も繰り返し再生されるという奇妙な挙動を示しました.設定で,出力プラグインのDirectSound outputのバッファサイズを最大にしたところ現象は出なくなりましたが,フェードアウトとか何か汚い感じです.xmmsで聴けって感じですね.

また,Windows Media Playerで動画を再生してみたところ,音と映像のずれはほとんど無いようですが,いかんせん映像の方が引っかかる感じで再生され,見られたもんじゃないっす.ヒタヒタさんの言う通り,素直にMPlayerで再生するのが吉かも.

と思ったんですが,kbMediaPlayerで再生してみたらoggは非常に良好.動画もかなり改善されました.kbMediaPlayerは優秀ということでOK?


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2004-10-06 (水) 03:26:46 (4820d)