Wine上の音声をPulseAudioへ渡す
(2015/1/9)本記事の内容は古く、新しいディストリであればPulseAudioに関する特別な作業は必要なく使えるようになっている。
Wineのバージョン1.1.4の時点では、Wineはオーディオの出力にPulseAudio向けのドライバは用意していないものの、alsa-pluginsに含まれるPulseAudioプラグインを使用することで、ALSA経由でオーディオを出力することができることが分かった。*1
この方法の嬉しいところは、適切な準備と設定を行うことで、x86_64上でも簡単にWine上の音声出力を録音・加工*2などができるようになること。*3
必要なもの
- ALSAサポートが有効なWine
- PulseAudio(x86_64上では、x86_64版の他、x86_32版のライブラリも必要)
- x86_32版alsa-lib
- PulseAudioサポートが有効なx86_32版alsa-plugins*4
.asoundrcの設定
「type pulse」なPCMプラグインの定義があればOKで、「!default」の上書きは必要ない。pcm.pulse { type pulse } ctl.pulse { type pulse }
Wineの設定
上で定義したALSAのPCMプラグインへ音声を出力するための設定を行う。オーディオ出力先
winecfgなどを用いて、「ALSAへの出力」として設定する。レジストリ設定
[ホームディレクトリ]/.asoundrcで「!default」の上書きをしない場合、レジストリの中で、先ほど定義した「type pulse」なプラグインを使用するように設定を行う。下は、Wineのレジストリエディタ(regedit)向けのレジストリファイル。
REGEDIT4 [HKEY_CURRENT_USER\Software\Wine\ALSA Driver] "AutoScanCards"="N" "AutoScanDevices"="N" "DeviceCount"="1" "DevicePCM1"="pulse"
「DevicePCM1」の値の部分が[ホームディレクトリ]/.asoundrc側の「pcm.pulse」に対応している。
テスト
これで、普通にWine上のアプリケーションから音を出せば、音声はPulseAudioに流れることになる。例として、以前Win32版DirectXを使用してMSGSの音を出すテストをしたときのDirectX診断ツール上のミュージックテストを再現したものをキャプチャしてみた。
recordMyDesktopの動画をそのままアップロードしたため、そのままでは音声がモノラルだが、高画質版ではステレオになる。
ドライバについて
(2009/6/5)bugs.winehq.org/show_bug.cgi?id=10495
にWineでPulseAudioをサポートするドライバ(パッチの形)がある。Mandriva Linux 2009.1ではパッケージ「libwine1」に標準で含まれている。ファイルは/usr/lib/wine/winepulse.drv.so。
うまく動かないアプリケーションではwinecfg設定ツールでDirectSoundの「ハードウェアアクセラレーション」を「エミュレーション」にするとよいようだ。
なお、x86_64のディストリでも正常に動作している。
使用したバージョン: