過去にWineはJACKを出力先とするサウンドドライバを含んでいたが、バージョン1.3系(安定版は1.4系)におけるサウンド周りの刷新で削除された。
汎用サウンドサーバのPulseAudioが普及し、ALSAのモジュール経由からのPulseAudioの使用の時期を経て、PulseAudio専用のドライバが追加されて主に使われている。
WineからJACKへのPCM出力は後述のASIO対応アプリケーション以外は直接は行えない。
PulseAudioのJACKモジュール1がインストールされていると、PulseAudioが動作しているときにJACKサーバを起動したときにJACKとのやりとりができるようにそれぞれの入出力が追加されるようにできる。
この方法は最も簡単に音声をJACKに渡すことができるが、直接ではなく、途中でPulseAudioを経由することになる。
ALSAのJACK用PCM出力モジュールを使用し、PulseAudioを経由せずにJACK Audio Connection KitのクライアントとしてJACKサーバに音声を出力する。
PulseAudioのJACKモジュールを使用した場合と異なり、PulseAudioの経由による音の余分な処理を回避して音楽を聴くことができる。
ALSAのJACK用PCM出力モジュールをインストールしておく。32bitアプリケーションを動かす場合は32bit用のパッケージが必要。
項目 | 値 |
---|---|
パッケージ名 | libasound2-plugins |
ファイル名 | /usr/lib/x86_64-linux-gnu/alsa-lib/libasound_module_pcm_jack.so |
項目 | 値 |
---|---|
パッケージ名 | libasound2-plugins:i386 |
ファイル名 | /usr/lib/i386-linux-gnu/alsa-lib/libasound_module_pcm_jack.so |
JACKの出力を使用できるようにするために、定義を.asoundrc
に記述しておく必要がある。
下はステレオ(2チャンネル)用の設定例。
~/.asoundrc
ライセンス:CC0
pcm.jackplug {
type plug
slave.pcm "jack"
}
pcm.jack {
type jack
playback_ports {
0 system:playback_1
1 system:playback_2
}
}
Wineからこの出力先に音声を出すためには以下の2つの設定を行う。
いずれもレジストリでの設定となり、Wine環境(WINEPREFIX
)ごとに設定する必要がある。
HKCU\Software\Wine\Drivers
にREG_SZ
型のAudio
という項目を作り、値をalsa
にするHKCU\Software\Wine\Drivers\winealsa.drv
にREG_MULTI_SZ
型のALSAOutputDevices
という項目を作り、値をjackplug
(~/.asoundrc
のものと同じ名前)にするwinecfg
の “オーディオ” タブで既定の出力デバイスをOut:jackplug
にして設定を適用し、JACK動作時にテスト音声の再生ボタンを押して音が出ればよい(ALSAの出力ドライバを使用)
$ (WINEPREFIX=[Wine環境の場所]) wine reg add "HKCU\Software\Wine\Drivers" /v "Audio" /t REG_SZ /d "alsa"
(.asoundrc内で定義したJACK出力を選択可能にする)
$ (WINEPREFIX=[Wine環境の場所]) wine reg add "HKCU\Software\Wine\Drivers\winealsa.drv" /v "ALSAOutputDevices" /t REG_MULTI_SZ /d "jackplug"
WineASIOはASIO対応アプリケーションでJACKを使用するのに使える。手元の環境ではfoobar2000(関連記事)でのみ動作を確認済み。
ビルドする場合は事前にWineとJACKの開発パッケージをインストールしておく。
(Debian/UbuntuでWineとJACKの開発パッケージをインストール)
$ sudo apt install libwine-dev libwine-dev:i386 libjack-jackd2-dev libjack-jackd2-dev:i386
Debian/UbuntuのWineの開発パッケージはヘッダファイルの場所がおかしいことがあるため、必要に応じて正しい場所に移動する。
$ sudo mv /usr/include/wine/wine/* /usr/include/wine/
WineASIOのソースを取得してディレクトリに入ったら32
(32bit版)または64
(64bit版)のターゲットを指定してmake
を実行する。
(32bit版のビルド)
[wineasio]$ make 32
(64bit版のビルド)
[wineasio]$ make 64
出力されるファイルはbuild32/wineasio.dll.so
(32bit版)とbuild64/wineasio.dll.so
(64bit版)。これらを別の場所にコピーして保存しておく。
まずwineasio.dll.so
をwineasio.dll
という名前にしてWine環境の仮想Cドライブのsystem32
やsyswow64
に入れておく。Wine環境が64bit対応(drive_c/windows
内にsyswow64
がある)であれば前者が64bit,後者が32bitのファイルとなり、そうでなければ32bitのファイルを入れる。
次にDLLの登録処理を行う。
(32bit版の登録)
$ (WINEPREFIX=[Wine環境の場所]) wine regsvr32 wineasio.dll
(64bit版も使用する場合の追加登録)
$ (WINEPREFIX=[Wine環境の場所]) wine64 regsvr32 wineasio.dll
ここまでを行ってからJACKサーバを起動してASIO対応アプリケーションを動かすとWineASIOが使用できる。
WineにはJACKドライバはないが、ALSAまたはPulseAudioのサウンド出力ドライバが選択されていればALSAのMIDIデバイス(FluidSynth系やTiMidity++のような仮想的なものを含む)を扱えるため、それらとのやりとりは普通に行える。
Windows用のVSTプラグインはVSTブリッジ(ラッパー)プログラムを経由してLinux上のVSTホストから使用することができる。かつてはdssi-vst
とDSSI2ホストを組み合わせたものがよく使われていたが、VSTプラグインのブリッジを行う形のソフトウェア(GitHubでの検索例)がLinuxネイティブのVSTホストと組み合わせて使われるようになってきた。
これらのVSTブリッジはWineの機能(“Winelib” と呼ばれるライブラリ部分)を用いており、動作時にはWineも必要となるが、VSTブリッジの使用の際にはWine自体のサウンド出力先に関する設定は必要ない。Linux上のVSTホストの使用時にはJACKを使用することになり、VSTホストとJACKサーバとの間のやりとりになる。