WineのJACK Audio Connection Kitへのオーディオ出力に関しての覚え書きと実験
Wineでオーディオの出力をJACK Audio Connection Kitに指定すると、音声がモノラル(?)*1で聞こえる。
ここでは、JACKへのオーディオ出力の状態をより詳しく把握するとともに、代わりにALSA JACKプラグインを使用した場合の挙動についても触れる。
(2009/11/13)バージョン1.1.32のWine(Mandriva Linux 2010.0上)の時点ではステレオで正常に出力され、モノラルになる問題は起こっていない。しかし、アプリケーションが落ちることがあり、安定はしていないようだ。
(2014/10/3)WineのJACKドライバはその後のバージョンで廃止されている。PulseAudio経由でJACKを用いるか、PulseAudioを用いる。
- 準備
- x86_32版JACK + x86_32版ALSA JACKプラグイン + x86_32版aplayでの再生
- x86_32版JACK + Wine + foobar2000での再生
- x86_32版JACK + x86_32版ALSA JACKプラグイン + foobar2000での再生
準備
- x86_32な以下のパッケージを入れておく
- ALSA JACKプラグインを使用するため、「ALSA PCMデバイスとしてJACK Audio Connection Kitを使用」に書いてある「pcm.pjack」と「pcm.jack」についての定義を[ホームディレクトリ]/.asoundrc中にしておく
- 左右の音の振れがはっきりと分かるオーディオデータを用意
左右の音の振れがはっきりと分かるオーディオデータに関しては
http://cid-3f9be5b1cd4a806c.skydrive.live.com/browse.aspx/%e5%85%ac%e9%96%8b/%e3%83%86%e3%82%b9%e3%83%88%e7%94%a8%e7%b4%a0%e6%9d%90/Panpot%20test
に素材を用意した。サイズを縮めるためにTTA形式にしたが、これをデコードしたwavファイルを使用する。
$ ttaenc -d panpottest.tta
ttaencがパッケージになっていないディストリではTTAの本家からx86_32版実行ファイル(「Linux x86」と書いてあるもの)*2を落として中のttaencを/usr/local/bin/などにコピーするか、同ページよりソースを落としてビルドし、インストールする。下はインストール例。
$ tar zxf [ttaenc-3.4.1-src.tgzの場所] $ cd ttaenc-3.4.1-src/ $ make $ sudo install -s ttaenc /usr/local/bin/
x86_32版JACK + x86_32版ALSA JACKプラグイン + x86_32版aplayでの再生
Wineと関係ないが、正常な例として、alsa-utilsのaplayをalsa-pluginsのALSA JACKプラグイン経由で使用して、JACKからwavファイルを再生する。結果:音は左右に振れている(正常)
x86_32版JACK + Wine + foobar2000での再生
モノラルのように聞こえるが、仮にそうだとして、左右のどちらの音が(両方のチャンネルから)鳴っているのか、あるいは左右の出力を合成して両方のチャンネルから出しているのか、を確認する。- x86_32なjackdを起動
- WineのオーディオドライバをJACKに設定
- foobar2000でwavファイルを再生
結果:左チャンネルの音声が左右両方から出力された
JACKのポートの接続が変なのかとも思ったのだが、接続状況としては、
$ jack_lsp32 -c (中略) system:playback_1 wine_jack_out_0:out_l system:playback_2 wine_jack_out_0:out_r (中略) wine_jack_out_0:out_l system:playback_1 wine_jack_out_0:out_r system:playback_2
このように、Wine側の左右それぞれのチャンネルの出力が、システムのplaybackポートの左右に「正しく」接続されていて、ポートの接続がおかしいということはない。にも関わらず、オーディオ出力は左の音だけが出ている。
JACKドライバ部分のソース(dlls/winejack.drv/audio.c)では、左右のチャンネルを分けて処理しているようにも見えるのだが...
x86_32版JACK + x86_32版ALSA JACKプラグイン + foobar2000での再生
WineのオーディオドライバをALSAにするとステレオで音声が出るので、ALSA JACKプラグインを経由してJACKで音を出すとどうなるかを確認する。ALSA JACKプラグインを使用するためのレジストリ設定の該当セクション(無関係な設定も含んでいる)は下のようになっている。
ファイル名: ${WINEPREFIX}/user.reg
[Software\\Wine\\ALSA Driver] "AutoScanCards"="N" "AutoScanDevices"="N" "DeviceCount"="1" "DeviceCTL1"="hw:0" "DevicePCM1"="pjack" "UseDirectHW"="N"
結果:音は左右に振れているが、別のオーディオファイルを再生すると、途中(0:09)で止まって(音が切れる)、Wineはjackdとともに落ちてしまった。
jackd側のエラーは以下。
subgraph starting at alsa-jack.pcm.jackP.18848.3 timed out (subgraph_wait_fd=10, status = 0, state = Running) **** alsa_pcm: xrun of at least 1205147153727.488 msecs **** alsa_pcm: xrun of at least 1205147153727.488 msecs **** alsa_pcm: xrun of at least 1205147153727.488 msecs (以下、同様のxrunメッセージが大量に表示) **** alsa_pcm: xrun of at least 1205147153727.488 msecs jackd watchdog: timeout - killing jackd
Wine側の出力は下のようになった。
cannot lock down memory for RT thread (メモリを確保できません) Killed
memlockに関しては下の設定だったが
ファイル名: /etc/security/limits.conf
@audio - memlock 2000000
値を「unlimited」にしても、違いは「Killed」とだけ出て落ちるようになっただけだった。
使用したバージョン(ALSAドライバ以外は全てx86_32):
- Wine 0.9.57
- foobar2000 0.9.5.1
- JACK Audio Connection Kit 0.109.2
- alsa-drivers 1.0.16
- alsa-lib 1.0.16
- alsa-plugins 1.0.16
- alsa-utils 1.0.16
- pam 0.99.9.0