この記事は、「VOICEVOXをMacで動かそうシリーズ」の第一弾です。
VOICEVOX 0.10からmacOSがサポートされるようになりました。 以下のリンクからダウンロードできます。 voicevox.hiroshiba.jp この記事は古くなっていますが、参考のため残しています。
VOICEVOXはマルチプラットフォームで動作するように設計されているため、ビルド次第でWindows/Linux/Macで動作させることができます。 VOICEVOXのリポジトリでは、Windows向けビルドとLinux向けビルドが公開されましたが、Mac向けビルドがまだ公開されていません。
この連載では、VOICEVOXをMacで動かすことを目標として、いくつかのソフトウェアをビルドしていきます。
第一弾は、VOICEVOXエンジンのビルドです。
- VOICEVOXエンジンとは
- CMakeのインストール
- LibTorchのインストール
- ビルド用Python venv環境の用意
- VOICEVOXコアライブラリのダウンロード
- VOICEVOXコアモジュールのビルド
- VOICEVOXエンジンのダウンロード
- ライセンス情報生成用仮想環境の作成
- ライセンスファイルの生成
- VOICEVOXエンジンのビルド前提モジュールのインストール
- PyOpenJTalk辞書ファイルのダウンロード
- ビルド先の用意
- VOICEVOXエンジンのビルド
- コアライブラリパスの設定
- Intel MacではUniversal(=aarch64対応)なVOICEVOXエンジンを作ることができない
- MacでVOICEVOXをビルドしてみた
VOICEVOXエンジンとは
VOICEVOXエンジンは、VOICEVOXのフロントエンドからテキストやイントネーションなどを受け取り、コアライブラリで音声合成をしてフロントエンドに合成音声を返すソフトウェアです。 フロントエンドとのやり取りはHTTP通信でやり取りしています。
エンジン自体はPythonで記述されており、nuitkaというツールを使って実行ファイルに変換されています。 nuitkaはMacもサポートしているので、早速ビルドしてみましょう。
ビルドコマンドはVOICEVOXエンジンのリポジトリ内にあるREADME.mdとDockerfileを参考にしています。
CMakeのインストール
VOICEVOXエンジンはPythonで作られていますが、ビルドによりバイナリの実行ファイルに変換されます。 この時に、CMakeというソフトウェアを使って変換が行われますが、Macには標準で入っていません。
そこで、brewコマンドを使ってCMakeを入れます。 brewコマンドを提供するHomebrewのインストール方法はHomebrewのサイトで確認してください。
以下のコマンドでcmakeをインストールします。
brew install cmake
LibTorchのインストール
VOICEVOXエンジンはコアライブラリを使って音声合成をします。 コアライブラリが動作するには、LibTorchをインストールしておく必要があります。 これもbrewコマンドでインストールできます。
brew install libtorch
ビルド用Python venv環境の用意
VOICEVOXエンジンのビルドにはPython 3を使います。 venvという仮想化機能を利用してモジュール類をインストールするので、以下のようにvenvを用意してください。
ビルドの動作確認はPython 3.9で行っています。
python3 -m venv venv
venvの有効化
仮想環境を有効にするには以下のようにします。
source ./venv/bin/activate
VOICEVOXコアライブラリのダウンロード
次に、VOICEVOXのコアライブラリをダウンロードしておきます。 VOICEVOXコアライブラリのバージョン0.7.4からMac向けにダイナミックライブラリが提供されているので、これを使うことにします。
curl -OL https://github.com/Hiroshiba/voicevox_core/releases/download/0.7.4/core.zip ditto -x -k --sequesterRsrc --rsrc core.zip ./ # unzipコマンドでは展開に失敗するので、dittoコマンドを使う rm core.zip cd core mv libcore_cpu.dylib libcore.dylib # ライブラリをリネームしておく
LD_LIBRARY_PATHとLIBRARY_PATHにパスを追加
VOICEVOXコアライブラリは、後ほどVOICEVOXコアモジュールをビルドする時に必要になります。
LD_LIBRARY_PATH
とLIBRARY_PATH
に追加しておきます。
export LD_LIBRARY_PATH="$(pwd):${LD_LIBRARY_PATH:-}" export LIBRARY_PATH="$(pwd):${LIBRARY_PATH:-}"
VOICEVOXコアモジュールのビルド
次に、VOICEVOXコアモジュールをビルドします。
VOICEVOXコアモジュールはVOICEVOXコアライブラリと同じGitHubリポジトリにソースコードが公開されています。 以下のようにしてダウンロードとビルドを行います。
VOICEVOXコアモジュールのビルドの際に、NumPyのインクルードファイルを認識することができない問題があるため、環境変数CPATH
にNumPyのインクルードファイルを追加しています。
cd ../ # 元のディレクトリに戻る cuel -OL https://github.com/Hiroshiba/voicevox_core/archive/refs/tags/0.7.4.zip ditto -x -k --sequesterRsrc --rsrc 0.7.4.zip ./ # unzipコマンドでは展開に失敗するので、dittoコマンドを使う rm 0.7.4.zip cd voicevox_core-0.7.4 cp ./core.h ./example/python/ # ヘッダファイルのコピー cd ./example/python pip install -r ./requirements.txt NUMPY_INCLUDE=`python -c "import numpy; print(numpy.get_include())"` CPATH="$NUMPY_INCLUDE:${CPATH:-}" pip install .
VOICEVOXエンジンのダウンロード
次に、VOICEVOXエンジンをダウンロードします。
cd ../ # 一旦ディレクトリを戻る curl -OL https://github.com/Hiroshiba/voicevox_engine/archive/refs/tags/0.7.4.zip ditto -x -k --sequesterRsrc --rsrc 0.7.4.zip ./ rm 0.7.4.zip
ライセンス情報生成用仮想環境の作成
ここで、VOICEVOXエンジンが使っているライブラリなどのライセンス情報を生成します。 最初に作った仮想環境ではうまく動作しないため、現在の仮想環境から抜けて別の仮想環境へ移ります。
deactivate python3 -m venv gen_license_env source ./gen_license_env/bin/activate
ライセンスファイルの生成
ライセンス生成用の仮想環境でライセンス生成に必要なモジュールをインストールし、ライセンス生成を行います。
cd voicevox_engine-0.7.4 pip install --upgrade pip setuptools wheel pip install -r requirements-dev.txt pip-licenses python generate_licenses.py > ./licenses.json
ビルド用仮想環境へ切り替え
ライセンス生成用の仮想環境の出番はこれで終了です。 ライセンス生成用の仮想環境から抜けて、最初の仮想環境へ戻りましょう。
cd ../ # 元のディレクトリに戻る deactivate source ./venv/bin/activate
VOICEVOXエンジンのビルド前提モジュールのインストール
VOICEVOXエンジンのビルドに必要なモジュールをインストールします。
cd voicevox_engine-0.7.4 pip install -r requirements-dev.txt
PyOpenJTalk辞書ファイルのダウンロード
ここで、VOICEVOXエンジンが利用するPyOpenJTalkの辞書ファイルをダウンロードしておきます。 この辞書ファイルはたまにダウンロードに失敗するので、失敗した場合は適宜リトライしてください。
python -c "import pyopenjtalk; pyopenjtalk._lazy_init()"
ビルド先の用意
VOICEVOXエンジンのビルドファイルの生成先を用意します。
cd ../ # 元のディレクトリに戻る mkdir voicevox_engine_build cd voicevox_engine_build
VOICEVOXエンジンのビルド
最後にVOICEVOXエンジンをビルドします。 ビルドにはとても時間がかかる上に電力消費が激しいので、時間とバッテリに余裕があるときに実行することをお勧めします。
python -m nuitka \ --output-dir=./ \ --standalone \ --plugin-enable=numpy \ --follow-import-to=numpy \ --follow-import-to=aiofiles \ --include-package=uvicorn \ --include-package=anyio \ --include-package-data=pyopenjtalk \ --include-package-data=resampy \ --include-package-data=llvmlite \ --include-data-file=../voicevox_engine-0.7.4/VERSION.txt=./ \ --include-data-file=../voicevox_engine-0.7.4/licenses.json=./ \ --include-data-file=$(brew --prefix libtorch)/lib/*.dylib=./ \ --include-data-file=../core/*.dylib=./ \ --include-data-file=../core/*.bin=./ \ --include-data-file=../core/metas.json=./ \ --include-data-file=../venv/lib/python*/site-packages/scipy/.dylibs/*.dylib=./scipy/.dylibs/ \ --include-data-file=../venv/lib/python*/site-packages/llvmlite/binding/*.dylib=./ \ --include-data-file=../venv/lib/python*/site-packages/_soundfile_data/*=./_soundfile_data/ \ --follow-imports \ --no-prefer-source-code \ ../voicevox_engine-0.7.4/run.py
成功すると、voicevox_engine_build
ディレクトリの中にrun.dist
が生成されます。
その中にあるrun
がVOICEVOXエンジンの実行ファイルです。
コアライブラリパスの設定
ただし、このままでは動きません。
コアライブラリ(libcore.dylib)のパスを@rpath
で指定していますが、@rpath
自体が指定されていないからです。
そこで、以下のコマンドで@rpath
を@executable_path
と同じ位置を指すように指定します。
# まだvoicevox_engine_buildディレクトリの中にいるのであれば... install_name_tool -add_rpath @executable_path/. ./run.dist/run
以上でrun.distの中身だけを持ち出してVOICEVOXエンジンを動作させることができます。
Intel MacではUniversal(=aarch64対応)なVOICEVOXエンジンを作ることができない
OpenBLASをbrewコマンドでインストールすると、x64アーキテクチャのライブラリがインストールされますが、aarch64向けのライブラリがインストールされませんでした。 そのため、NumPyなどがaarch64に対応できずUniversalなVOICEVOXエンジンを作ることができていません。
Intel Macでaarch64のOpenBLASをインストールする方法など知っている方はぜひコメントください。
MacでVOICEVOXをビルドしてみた
第二弾の記事「MacでVOICEVOXをビルドしてみた」はこちら