Audacity を JackAudio + ASIO + 64bit 対応でビルドする
ははーん、これは簡単に終わ……らない? 何故だ!
そもそも Audacity とは何か?
Audacity とは一言で言えば、
音声の録音や編集、切り出しなどが出来る Open Source のソフトウェア
です。
なぜ Audacity を自分でビルドしたか
これには幾つか理由があって、Windows 上の Audacity で、
- ASIO ドライバーサポートを有効にしたい
- Jack Audio Connection Kit のサポートも有効にしたい
- 32bit の JackAudio 接続が安定性で破滅したので安定させたい
と言った辺りの目的があり、結果として自分で Audacity を ビルドすると言うチャレンジをしていました。
そして結局としてはこの目的は達成できたのですが、この Audacity の自前ビルド、色々とハマりどころがあり、普通に今回得た知見を忘却してしまった場合、次の自前ビルド時にまた同じ様に破滅してしまう恐れがあったので、今回はその辺りの知見を残す意味でこの忘備録を書いています。
Audacity をビルドするのに必要なもの
Audacity を Windows で 64bit ビルドするには、少なくとも、
- Visual Sudio (Community) で CMake が使えること
- scoop 経由などで Python 3 の実行ファイルにパスが通っていること
- Audacity とその依存ファイルの取得で git が使えること
の三つの条件は満している必要があります。
また ASIO ドライバーのサポートと Jack Audio Connetion Kit のサポートを有効にするためには、
- ASIO Driver の SDK を Steinberg の WebSite から Download しておく
- JackAudio の Windows 用最新版を開発ファイル付きでインストールしておく
と言うことが必要になります。
なお、ASIO Driver の SDK は、
から、Jack Audio Connection Kit の最新版は、
から入手できます。
Audacity とその依存ファイルを準備する
まず私の場合、作業ディレクトリを C:\Users\nyarla\local\audacity
に用意し、下記の用なディテクトリ構造でファイルを配置しました:
-
C:\Users\nyarla\local\audacity\
-
asiosdk\
- ASIO SDK を 7z GUI で展開して配置
-
audacity\
git clone https://github.com/audacity/audacity
-
wxWidgets\
git clone --recurse-submodules https://github.com/audacity/wxWidgets/
-
なお下記の解説はこのディレクトリ構成を前提に解説して行くので、この辺りのパスは各自の環境で読み替えてください。
Audacity が依存する wxWidgets を VS でコンパイルする
これは wxWidgets\build\msw\
以下の wx_vc16.sln
を Visual Sutido で開き、DLL Release
の x64
を選択した上で ソリューションのビルド
を行います。参考に画像を載せるとこんな感じです:
なおここでは wxWidgets のビルドが成功したら、一旦 Visual Studio を閉じてください。なぜかと言うと次の Audacity のビルドでは Visual Studio を起動する前に環境変数を設定する 必要があるからです。
Audacity をビルドをするための下準備をする
まず下準備として、下記の様な bat
ファイルを用意します:
set WXWIN=C:\Users\nyarla\local\audacity\wxWidgets
set ASIOSDK_DIR=C:\Users\nyarla\local\audacity\asiosdk
"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\IDE\devenv.exe"
なおここでの C:\Users\nyarla\local\audacity
などのパスは各自の環境で読み替えてください。
次に上記の bat
ファイルから Visual Studio を起動し、コードなしで続行(W)
をクリックして、C:\Users\nyarla\local\audacity\audacity\CMakeLists.txt
を開きます:
そしてその上で一度 プロジェクト(P)
→ Audacity のキャッシュを作成
をクリックして Visual Studio 上で CMake のキャッシュを作成し、次の様な設定を施します。
1. ツールセットを msvc_x64
にする
2. CMake コマンド引数
に下記を設定する
-DJACK_INCLUDE_DIR="C:/Program Files/JACK2/include" -DJACK_LIBRARY="C:/Program Files/JACK2/lib/libjack64.lib" -DJACK_DEFINITIONS="C:/Program Files/JACK2/lib/libjack64.def"
3. CMake の変数で wxWidgets_LIB_DIR
と wxWidgets_ROOT_DIR
の値をそれぞれ設定する
wxWidgets_LIB_DIR: C:/Users/nyarla/local/audacity/wxWidgets/lib/vc_x64_dll
wxWidgets_ROOT_DIR: C:/Users/nyarla/local/audacity/wxWidgets
なおここでも各種パスはそれぞれの環境で読み替えてください、
4. 高度な設定の CMake ジェネレーター
を Visual Studio 16 2019 Win64
にする
Audacity をビルドする
そしてここまでの作業が無事に完了しており、設定なども間違っていないのであれば、Visual Studio の ビルド(B)
→ すべてビルド
をクリックして Audacity のビルドが完了します。
またビルドされた Audacity の実行ファイル一式は、
C:\Users\nyarla\local\audacity\audacity\out\build\*\bin\Release
辺りに出力されているはずなので、あとはこれを適切なフォルダにコピーすれば、自前ビルドの Audacity が使えるようになります。
今回の Audacity ビルドでハマったところや注意点
1. 環境変数の設定が Must
具体的には、
の箇所で、ここでは bat ファイル経由で環境変数をセットし、その上で Visual Studio Commonity を起動していますが、ここで何故環境変数をセットしているかと言うと、これは、
Visual Studio の起動前に環境変数がセットされてないと Audacity の CMake やビルドが失敗する
と言う事に起因します。
そしてこの辺りをもう少し正確に言うと、まず WXWIN
環境変数がセットされていないと Audacity の CMake やビルドがそもそも成功しない と言う状態になり、また ASIOSDK_DIR
が設定されていないと、Audacity の ASIO サポートが有効にならない と言う状態になります。
2. 32bit ビルドで JackAudio を有効しても使い物にならない
これについては原因が良く分かってないのですが、JackAudio をサポートさせた Audacity の 32bit ビルド は、64bit の JackAudio の Patchbay で JackAudio 接続させる と ことごとく落ちます 。なのでマジで使いものにならない。
そのため今回のビルド作業では、私は Audacity をあえて 64bit ビルドすることになりました。しかしながら、そもそも Audaticy の 64bit ビルドは公式には推奨されてないっぽい(?)ような情報もあったので、この辺り本当に大丈夫なのかはちょっと不明です。
3. ASIO を有効にしても ASIO Driver によっては相性が出る
少なくとも私の手元の Audacity (自前ビルド)では、
- Realtek ASIO Driver
に接続させると、何故か Audacity が Hung up して、その後そのまま 起動すらしなくなります。
とは言えこれには対処法が一応は存在し、 Audacity が起動すらしないと言う状況に落ち行った場合には、
C:\Users\*\AppData\Roaming\audacity\audacity.cfg
に存在する [AudioIO]
→ RecordingDevice
or PlaybackDevice
の値を適宜書き換えれば多分なんとかなります。
また上記対策でも動かなかった場合、
C:\Users\*\AppData\Roaming\audacity
をもろごと削除すれば、その後は普通に起動する様になります。ただこの方法は最終手段で、これをすると Audacity の設定はすべて消える と言う事は留意してください。
4. JackAudio 接続が録音中にしか出来無い
これ、個人的にはすごく謎なんですが、JackAudio 経由で Audacity を Patchbay に組込む場合、録音が有効になっていないと そもそも QJackCtl などの Patchbay に Audacity のインスタンスが出現しません 。
そのため Audacity の 録音と再生 (N)
→ 録音/再生オプション(O)
→ 音による録音起動 (オン/オフ) (C)
を有効にしていないと、そもそも Patchbay 接続が出来無いので、この辺りは注意する必要があるかと思います。
/
を使う
5. CMake 変数で使うパスは基本的に これは Windows での開発にあるあるだと思われますが、Audacity のビルドでパスを指定する際には、パス区切り文字に /
を使う必要があり、 \
を使うと CMake がパスを正しく認識しません。
そのため私は JackAudio サポートを有効にさせようとした際、この辺りでハマりました。
以上
なぜか存外に長い記事になってしまいましたが、
Audacity を JackAudio と ASIO をサポートした 64bit でビルドする方法
の忘備録は以上になります。
ちなみにこの自前ビルドした Audacity がまともに使えているかどうかですが、今のところ ASIO 経由での録音は問題なく出来ていて、Jack Audio Connection Kit 経由での録音もある程度は正常に動作しているっぽいです。
ただとは言え JackAudio の接続関連の挙動を見るに、どうも安定性には微妙に欠けているのと、あと ASIO Driver によっては相性が出て起動すらしなくなる、と言う問題も存在するので、安定性第一が求められる環境での利用はちょっと止めておいた方が良い、と個人的には思います。はい。
Discussion