WineでJACK Audio Connection Kitを使用

Last modified: 2020-11-01

過去にWineはJACKを出力先とするサウンドドライバを含んでいたが、バージョン1.3系(安定版は1.4系)におけるサウンド周りの刷新で削除された。

汎用サウンドサーバのPulseAudioが普及し、ALSAのモジュール経由からのPulseAudioの使用の時期を経て、PulseAudio専用のドライバが追加されて主に使われている。

WineからJACKへのPCM出力は後述のASIO対応アプリケーション以外は直接は行えない。

PCM音声をJACK Audio Connection Kitに渡す

PulseAudioのJACKモジュールを使用して音声を渡す方法

PulseAudioのJACKモジュール1がインストールされていると、PulseAudioが動作しているときにJACKサーバを起動したときにJACKとのやりとりができるようにそれぞれの入出力が追加されるようにできる。

この方法は最も簡単に音声をJACKに渡すことができるが、直接ではなく、途中でPulseAudioを経由することになる。

ALSAのJACK用PCM出力モジュールを用いてJACK Audio Connection KitにPCM音声を出力

ALSAのJACK用PCM出力モジュールを使用し、PulseAudioを経由せずにJACK Audio Connection KitのクライアントとしてJACKサーバに音声を出力する。

PulseAudioのJACKモジュールを使用した場合と異なり、PulseAudioの経由による音の余分な処理を回避して音楽を聴くことができる。

OSのパッケージの準備

ALSAのJACK用PCM出力モジュールをインストールしておく。32bitアプリケーションを動かす場合は32bit用のパッケージが必要。

Debian/Ubuntu系ディストリにおけるパッケージ (x86_64)

項目
パッケージ名 libasound2-plugins
ファイル名 /usr/lib/x86_64-linux-gnu/alsa-lib/libasound_module_pcm_jack.so

Debian/Ubuntu系ディストリにおけるパッケージ (x86)

項目
パッケージ名 libasound2-plugins:i386
ファイル名 /usr/lib/i386-linux-gnu/alsa-lib/libasound_module_pcm_jack.so

ALSA側の準備

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側の準備

Wineからこの出力先に音声を出すためには以下の2つの設定を行う。

いずれもレジストリでの設定となり、Wine環境(WINEPREFIX)ごとに設定する必要がある。

  • (PulseAudioなどではなく)ALSAのサウンド出力ドライバを使用する
    • HKCU\Software\Wine\DriversREG_SZ型のAudioという項目を作り、値をalsaにする
  • ALSAサウンドアーキテクチャにおける出力先を上で定義したJACK用のものに指定
    • HKCU\Software\Wine\Drivers\winealsa.drvREG_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対応アプリケーション限定)

WineASIOはASIO対応アプリケーションでJACKを使用するのに使える。手元の環境ではfoobar2000でのみ動作を確認済み。

WineASIOのビルド

ビルドする場合は事前に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の準備

まずwineasio.dll.sowineasio.dllという名前にしてWine環境の仮想Cドライブのsystem32syswow64に入れておく。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が使用できる。

MIDIデバイスやMIDIアプリケーションの扱い

MIDIデバイスの扱い

WineにはJACKドライバはないが、ALSAまたはPulseAudioのサウンド出力ドライバが選択されていればALSAのMIDIデバイス(FluidSynth系やTiMidity++のような仮想的なものを含む)を扱えるため、それらとのやりとりは普通に行える。

Windows用VSTプラグインを使用したい場合

Windows用のVSTプラグインはVSTブリッジ(ラッパー)プログラムを経由してLinux上のVSTホストから使用することができる。かつてはdssi-vstとDSSI2ホストを組み合わせたものがよく使われていたが、VSTプラグインのブリッジを行う形のソフトウェア(GitHubでの検索例)がLinuxネイティブのVSTホストと組み合わせて使われるようになってきた。

これらのVSTブリッジはWineの機能(“Winelib” と呼ばれるライブラリ部分)を用いており、動作時にはWineも必要となるが、VSTブリッジの使用の際にはWine自体のサウンド出力先に関する設定は必要ない。Linux上のVSTホストの使用時にはJACKを使用することになり、VSTホストとJACKサーバとの間のやりとりになる。


  1. Debian/Ubuntuではpulseaudio-module-jackのパッケージ名,ファイル名はmodule-jack-sink.so,module-jack-source.so,module-jackdbus-detect.so ↩︎

  2. オーディオプラグイン規格 “LADSPA” のバージョン1を拡張して音源プラグインとして扱えるようにした規格だったが、後継規格 “LV2” の登場で置き換えられることになった ↩︎