チラシの裏からうっすら見える外枠の外のメモ書き

新聞に挟まってる硬い紙のチラシの裏からうっすら見える外枠の外に走り書きされたようなものです。思いついたときにふらふらと。

MacでVOICEVOXをビルドしてみた

この記事は、「VOICEVOXをMacで動かそうシリーズ」の第二弾です。

VOICEVOX 0.10からmacOSがサポートされるようになりました。 以下のリンクからダウンロードできます。 voicevox.hiroshiba.jp この記事は古くなっていますが、参考のため残しています。

VOICEVOXはマルチプラットフォームで動作するように設計されているため、ビルド次第でWindows/Linux/Macで動作させることができます。 VOICEVOXのリポジトリでは、Windows向けビルドとLinux向けビルドが公開されましたが、Mac向けビルドがまだ公開されていません。

この連載では、VOICEVOXをMacで動かすことを目標として、いくつかのソフトウェアをビルドしていきます。

voicevox.hiroshiba.jp

前回はVOICEVOXエンジンのビルドを行いました。

k-hyoda.hatenablog.com

第二弾は、VOICEVOXのビルドです。

"VOICEVOX"という名前について

VOICEVOXという名前は、2つのことを指しています。 紛らわしいので注意してください。

この記事では、後者のビルドを行います。

VOICEVOXとは

VOICEVOXは、テキストから音声合成をするソフトウェアです。 現在利用できる音声には、ずんだもんや四国めたんがいます。 VOICEVOXは入力されたテキスト情報をVOICEVOXエンジンへHTTPによって通信し、イントネーション情報や音声データを得ています。

VOICEVOXはElectronで作られているため、Mac上でもビルドが可能です。 早速ビルドしてみましょう。

ビルドコマンドはVOICEVOXのリポジトリ内にあるREADME.mdを参考にしています。

github.com

VOICEVOXエンジンのパスを環境変数に通す

前回作成したVOICEVOXエンジンのパスを環境変数VOICEVOX_ENGINE_DIRに通しておいてください。 この環境変数の情報はビルドの際に自動で利用されます。

/path/to/voicevox_engine/を、あなたの環境でビルドしたVOICEVOXエンジンのパスに書き換えてください。

export VOICEVOX_ENGINE_DIR=/path/to/voicevox_engine/run.dist/

Node/npmのインストール

前提として、VOICEVOXはNodeやnpmを利用します。 VOICEVOXはこれらのバージョンに厳しい要求をしているので、nodebrewを使ってインストールします。 Homebrewは前回の時点でインストールが済んでいるので省略します。

brew install nodebrew
nodebrew setup_dirs # nodebrewを使うために必要なセットアップを実施

インストール後、VOICEVOXの要求するバージョンのNodeをインストールし、有効化します。

Nodeのインストール

nodebrew install v14.17.4
nodebrew use v14.17.4

npmのダウングレード

また、Nodeと一緒にインストールされたnpmは新しすぎてVOICEVOXをビルドできないので、ダウングレードします。

npm install -g npm@6

これで準備は完了です。

VOICEVOXのダウンロード

ではビルドしていきましょう。 早速VOICEVOXのソースコードをダウンロードします。

curl -OL https://github.com/Hiroshiba/voicevox/archive/refs/tags/0.7.4.zip
ditto -x -k --sequesterRsrc --rsrc 0.7.4.zip ./
rm 0.7.4.zip
cd voicevox-0.7.4

モジュールのインストール

以下のコマンドで必要なモジュール類をインストールします。

npm ci

electron-builderの更新

上記コマンドでインストールしたelectron-builderではMac上でビルドができないので、以下のコマンドでelectron-builderのバージョンを変えます。

github.com

npm install electron-builder@22.11.7

ライセンス情報のマージ

前回、VOICEVOXエンジンをビルドする際に生成したライセンス情報などをVOICEVOXのディレクトリ内にコピーし、VOICEVOXのライセンスファイルと結合して1つのライセンスファイルにします。

cp $VOICEVOX_ENGINE_DIR/licenses.json engine_licenses.json
npm run license:generate -- -o voicevox_licenses.json
npm run license:merge -- -o public/licenses.json -i engine_licenses.json -i voicevox_licenses.json

実行時環境変数を書き換える

ここで、ディレクトリ内にある.env.productionテキストエディタで開き、以下の行を変更してください。

ENGINE_PATH=run.exe

ENGINE_PATH=run

Mac向けビルド情報の追加

次にVOICEVOXのビルド設定にMacに関する情報を追加します。 vue.config.jsを開き、86行目以降に以下の内容を追加してください。

        mac: {
          icon: "public/icon.png",
          category: "public.app-category.utilities",
        },

アイコンの拡大

VOICEVOXのアイコンはpublic/icon.pngにありますが、解像度が256x256とMacのアプリで使うには大きさが足りません。 そこで、アイコンの解像度を512x512以上に拡大します。

拡大はMacに標準で入っているプレビュー.appなどで行うことができます。

追加展開ファイル先の設定

electron-builderのextraFiles項目は、Macの場合展開先がVOICEVOX.app/Contentsになってしまいます。 しかし、electronではapp.getPath("exe")の参照先がVOICEVOX.app/Contents/MacOSとなっており、ずれてしまいます。

このままでは.envファイルを参照することができないので、vue.config.jsの34行目と37行目を変更します。

          { from: ".env.production", to: ".env" }, // 34行目
          {
            from: VOICEVOX_ENGINE_DIR,
            to: "", // 37行目

          { from: ".env.production", to: "MacOS/.env" }, // 34行目
          {
            from: VOICEVOX_ENGINE_DIR,
            to: "MacOS/", // 37行目

ビルド

そして、最後にビルドコマンドを実行します。 Intel Macでは、VOICEVOXエンジンが利用しているOpenBLASがM1 Macにネイティブ対応していません。 そのため、Universal appとしてビルドしようとすると失敗します。 ここでは、x64(=Intel Mac)向けにビルドします。

npm run electron:build_pnever -- --x64

もし、Universal appとしてビルドする場合は、以下のように引数を変更します。

npm run electron:build_pnever -- --universal

しばらくするとdist_electronディレクトリ内にVOICEVOX-0.7.4.dmgが、macディレクトリ内にVOICEVOX.appが生成されます。 前者はインストーラで、後者がMac版VOICEVOXです。

終わりに

以上がMacでVOICEVOXをビルドする方法です。

今後、コアライブラリがONNXモデルになることで、更なる高速化が進みそうです。

つい先日発表されたMacBook Proの最新機種ではどれぐらいのスピードで音声合成できるのか、ワクワクしますね。

おまけ:デバッグする方法

VOICEVOXをデバッグする場合は、.env.production.envにコピーし、以下のコマンドを実行してください。

npm run electron:serve