wineasio を使用し、Wine から Jack へ ASIO で出力する

※ wineasio は、Wine 上で動作する foobar2000 などから ASIO で音声出力する場合に必要
※ Wine から PulseAudio を経由せずに直接 Jack に出力した場合と比較して、聴感上、際立って音質が良くなるとは思えない
※サンプルレートの異なる曲を再生するたびに、Qjackctl の設定でサンプルレートを切り替えなければならない
※ wineasio で再生した直後に、mpv を起動すると、mpv がフリーズすることがあった
※低レイテンシーを追求しなければならない場合には効果はあるかもしれないが、日常気軽に音楽を楽しむ程度の使用においては、wineasio ではなく、Wine から直接 Jack に出力する方法で十分な気がする
※Wine から直接 Jack に出力する方法については、過去記事:Wineの音声をPulseAudioを経由せずにJACKに出力をご参照あれ
※Jack を起動して使用していると、ウェブブラウザやシステムなどが PulseAudio で出力する音声が聞こえないが、過去記事:PulseAudioを JACK 経由で出力 のように設定して PulseAudio から Jack へ出力するように設定すれば聞こえるようになるので便利である


以下は、wineasio の使用に関して試行錯誤した時のメモ


1.ソースファイルのダウンロード

# wineasio のソースを下記サイトからダウンロードする

https://github.com/wineasio/wineasio

>> このサイトの、Code という緑のボタンをクリックすると、Download ZIP という文字が現れるので、それをクリックすると、wineasio-master.zip というファイルをダウンロードできる

>> ダウンロードしたら、右クリック >> 展開 >> ここにアーカイブをサブフォルダ付きで展開 をクリック

>> wineasio-master というフォルダができ、その中に、ソースファイルが入っている

>> そのうちの rtaudio というフォルダには何も入っていない

>> 上記サイトの先程の緑のボタンの下に、ソースファイル一覧がある。その中の上から2番めに、rtaudio @ e03448b というのがあるので、それをクリックすると、rtaudio のソースファイルのページに移動する

>> 先ほどと同じように、ここでも緑の Code というボタンをクリックし、Download ZIP をクリックして、ダウンロードする

>> rtaudio-e03448bd15c1c34e842459939d755f5f89e880ed.zip というような名前のファイルがダウンロードされる(rtaudio- 以下の英数字はバージョンなどによって変わるかもしれない)

>> この zip ファイルも、上記と同じように展開すると、rtaudio-e03448bd15c1c34e842459939d755f5f89e880ed というフォルダができ、その中に rtaudio のソースファイルが入っている

>> その、rtaudio のソースファイルを全てコピーして、wineasio-master というフォルダ中の、rtaudio という空のフォルダの中にペーストする

>> 以上で、wineasio のソースファイルは wineasio-master というフォルダの中に揃ったことになる


2.コンパイル作業

# 端末で、wineasio-master というフォルダの中に移動して、ソースからコンパイルする作業に入る

>> wineasio-master というフォルダ中に移動したら、試しに、make してみる
make 32

>>すると、以下のようなメッセージが出て、ビルドできない。
fatal error: bits/libc-header-start.h: そのようなファイルやディレクトリはありません

>> 64bit の環境で、32bit 向けのコンパイルをするときに必要となるらしい、gcc-multilib と g++-multilib というパッケージをインストールしてみる
sudo apt install gcc-multilib g++-multilib

>> もう一度、make してみる
make 32

>> 今度は次のようなエラーが出る
fatal error: jack/jack.h: そのようなファイルやディレクトリはありません

>> 今度は、JACK の開発パッケージをインストールする
sudo apt install libjack-jackd2-dev libjack-jackd2-dev:i386

>> Wine の開発パッケージもインストールする
sudo apt install libwine-dev libwine-dev:i386

    ※実際は、Wine の開発パッケージは成り行きで別々にインストールしたのだが...
sudo apt install libwine-dev
        >>
処理中にエラーが発生しました:
/tmp/apt-dpkg-install-w5AMoe/8-wine64-tools_6.0.3~repack-1_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)
        >>
sudo apt install libwine-dev
        >> このように、一度、エラーが出たが、再度 apt install すると、インストールできた。libwine-dev:i386 についても同様。何故、そうなったのか、よく分からない

>> make してみる
make 32

>> 以下のようなエラーが出る
fatal error: objbase.h: そのようなファイルやディレクトリはありません

>> Wine の開発パッケージの一部のファイルの場所が正しくないらしいので、ファイルの場所を移動する
sudo mv /usr/include/wine/wine/* /usr/include/wine/

>> 32bit 用と、64bit 用の、両方を make してみる
make 32

make 64

>> これで、無事ビルドできた。


3.wineasio のプログラムファイルを、Wine の Windows環境にコピーする

# 出力されたファイルのうちの、一部のファイルを、Wine の仮想Cドライブ内のフォルダにコピーする

>> wineasio-master というフォルダの中の build32 というフォルダに出来た 32bit 用の、wineasio.dll.so というファイルをコピー

>> ホームディレクトリにある隠しフォルダ .wine を開き、drive_c >> windows >> syswow64 と開いたら、その中にペーストし、ファイルの名前を、wineasio.dll へと変更する

>> 同様に、wineasio-master の中の build64 というフォルダ内に出来た 64bit 用の、wineasio.dll.so というファイルをコピーし、.wine >> drive_c >> windows >> system32 と開いて、その中にペーストし、名前を wineasio.dll と変更する


4.Wine の Windows 環境に、wineasio の DLL を登録

# Wine のフォルダ内にコピーした上記の、DLL ファイルを、Wine の Windows 環境に登録する

>> Wine のコマンドプロンプトでは、うまく登録できないので、Linux の端末から登録する

>> 先ず、ホームディレクトリ内の、Wine のディレクトリに移動する
cd ~/.wine

>> 以下のコマンドで、32bit 用の DLL を登録する
wine regsvr32 wineasio.dll
regsvr32: DLL 'wineasio.dll'の登録に成功しました

>> 次のコマンドで、64bit 用の DLL を登録する
wine64 regsvr32 wineasio.dll
regsvr32: DLL 'wineasio.dll'の登録に成功しました


5.foobar2000 で、ASIO を利用して、音楽を再生する

# foobar2000 で ASIO 出力を出来るように設定する

>> https://www.foobar2000.org/components/view/foo_out_asio から、foo_out_asio.fb2k-component というASIO 出力用のコンポーネントをダウンロードする

>> foobar2000 のメニューから、File > Preferences > Compornents と開き、「インストール」ボタンをクリックし、出てきたダイアログ画面で、マイ コンピュータ > (C:) > users > 自分のユーザーフォルダ > Downloads と開き、ダウンロードした上記ファイルを選択して、「開く」ボタンをクリック。

>> Preferences:Compornents の、インストールされたコンポーネントの表の、Module の欄に、foo_out_asio という名前が見えたら、「適用」ボタンをクリック > foobar2000 を再起動してよいかと尋ねてくるので、「OK」ボタンをクリック

>> 再起動したら、File > Preferences > Compornents と開き、一覧表に、ASIO support という名前のコンポーネントが表示されているのを確認

>> メニューの、File > Preferences > Playback > output で、出力デバイスを、ASIO:WineAsio Driver にする


# Jack を設定し、曲を再生する

>> QjackCtl を起動し、「設定」ボタンをクリック >> セットアップ画面の「設定」タブの「パラメーター」 > サンプルレート で、再生音楽ファイルのサンプルレートを選択、適用して閉じる

>> 「開始」ボタンを押して、JACK を起動

>> foobar2000 で、曲を再生 >> 音が出るのを確認 >> QjackCtl の「グラフ」ボタンをクリック >> sysytem の、capture ポートから、ASIOhost32 を経由して、system の、playback ポートへ接続されていることが確認できる

>> 曲のサンプルレートが、QjackCtl の設定と異なるときは、音が出ないので、曲のサンプルレートが変わるたびに、QjackCtl でサンプルレートを設定し直さないといけない


以上