Audacity を JackAudio + ASIO + 64bit 対応でビルドする

6 min read読了の目安(約6100字

ははーん、これは簡単に終わ……らない? 何故だ!

そもそも Audacity とは何か?

https://www.audacityteam.org/

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 は、

https://new.steinberg.net/developers/

から、Jack Audio Connection Kit の最新版は、

https://jackaudio.org/downloads/

から入手できます。

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 Releasex64 を選択した上で ソリューションのビルド を行います。参考に画像を載せるとこんな感じです:

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 を開きます:

コード無しで続行(W) の参考画像

そしてその上で一度 プロジェクト(P)Audacity のキャッシュを作成 をクリックして Visual Studio 上で CMake のキャッシュを作成し、次の様な設定を施します。

1. ツールセットを msvc_x64 にする

ツールセットを msvc_x64 にするための参考画像

2. CMake コマンド引数 に下記を設定する

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_DIRwxWidgets_ROOT_DIRの値をそれぞれ設定する

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 にする

CMake ジェネレーターの参考画像

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 によっては相性が出て起動すらしなくなる、と言う問題も存在するので、安定性第一が求められる環境での利用はちょっと止めておいた方が良い、と個人的には思います。はい。