LoginSignup
14
16

More than 1 year has passed since last update.

Mac上にVOICEVOX Engineを立てて自宅ネットワークに音声合成サーバを用意する

Posted at

自宅のローカルネットワーク上にて汎用サーバーやビルドマシンとして使っているMac miniに、VOICEVOX Engineの音声合成サーバーを立ててみたので、その時の手順をまとめました。

経緯

最近、ChatGPT周りのAPIを触っていたら、文章の読み上げをしたくなってきました。もともとVOICEVOXが良さそうなことを聞いていたので利用してみることにしました。

まず、VOICEVOXを利用する上で、自分のニーズは以下でした。

  • 細かいクエリ調整は一旦置いておいて、趣味で作る各種アプリとかで簡易的な読み上げを行いたい
  • 最近ずんだもんをYouTubeでよく見る。かわいい。ずんだもんにしゃべらせたい

また、いくつか試している中でパフォーマンス的な問題もでました

  • いつもの作業用PCはMacBook ProなのでVOICEVOXをGPU版で起動できず、音声合成にかかる時間が結構厳しい
  • DockerでEngineを立ち上げると、結構オーバーヘッドがありパフォーマンスが厳しい(PCのスペックもある)

最初は、docker composeですぐにできるかな?と思ったのですが、処理速度の点で問題があり、以下のビルド済みVOICEVOX Engine単体で起動する方針に切り替えました。

ということで、最終的な要件として以下を目指しています。

  • 自宅のMac miniにローカルネットワークで常時利用できる音声合成サーバを立てる
  • 音声合成にはVOICEVOXを利用するが、VOICEVOX EngineだけでEditorのGUIは不要
  • できるだけパフォーマンスがでる構成にする
  • 自動起動設定など基本的にはメンテしなくてもいいようにする

手順

以下、環境構築手順です。

VOICEVOX EngineのDLと展開

ビルド済みアーカイブをダウンロードします(WebブラウザからDLでも問題ありません)。

$ wget https://github.com/VOICEVOX/voicevox_engine/releases/download/0.14.2/voicevox_engine-macos-x64-0.14.2.7z.001

ビルドは7zipでアーカイブされているため、7zipコマンドがinstallされていない場合は以下でinstallします。

$ brew install p7zip

アーカイブを展開します。

$ 7z x voicevox_engine-macos-x64-0.14.2.7z.001

# 展開終わったら削除
$ rm voicevox_engine-macos-x64-0.14.2.7z.001

起動〜起動チェック

展開されたmacos-x64フォルダ内のrunファイルを実行すれば、サーバーが起動するのですが、展開した直後では実行パーミッションがついていませんでした。

$ cd macos-x64 # 展開されたディレクトリ
$ ls -l run
-rw-r--r--  1 mikito  staff  7119520  2  4 11:54 run

実行パーミッションを付与します.

chmod 755 run

これで実行できるようになったため、ヘルプを表示してみます。

$ ./run --help
usage: run [-h] [--host HOST] [--port PORT] [--use_gpu] [--voicevox_dir VOICEVOX_DIR] [--voicelib_dir VOICELIB_DIR]
           [--runtime_dir RUNTIME_DIR] [--enable_mock] [--enable_cancellable_synthesis] [--init_processes INIT_PROCESSES]
           [--load_all_models] [--cpu_num_threads CPU_NUM_THREADS] [--output_log_utf8]
           [--cors_policy_mode {CorsPolicyMode.all,CorsPolicyMode.localapps}] [--allow_origin [ALLOW_ORIGIN [ALLOW_ORIGIN ...]]]
           [--setting_file SETTING_FILE]

VOICEVOX のエンジンです。

optional arguments:
  -h, --help            show this help message and exit
  --host HOST           接続を受け付けるホストアドレスです。
  --port PORT           接続を受け付けるポート番号です。
  --use_gpu             指定するとGPUを使って音声合成するようになります。
  --voicevox_dir VOICEVOX_DIR
                        VOICEVOXのディレクトリパスです。
  --voicelib_dir VOICELIB_DIR
                        VOICEVOX COREのディレクトリパスです。
  --runtime_dir RUNTIME_DIR
                        VOICEVOX COREで使用するライブラリのディレクトリパスです。
  --enable_mock         指定するとVOICEVOX COREを使わずモックで音声合成を行います。
  --enable_cancellable_synthesis
                        指定すると音声合成を途中でキャンセルできるようになります。
  --init_processes INIT_PROCESSES
  --load_all_models     指定すると起動時に全ての音声合成モデルを読み込みます。
  --cpu_num_threads CPU_NUM_THREADS
                        音声合成を行うスレッド数です。指定しないと、代わりに環境変数VV_CPU_NUM_THREADSの値が使われます。VV_CPU_NUM_THREADSが空文字列でなく数値でもない場合はエラー終了します。
  --output_log_utf8     指定するとログ出力をUTF-8でおこないます。指定しないと、代わりに環境変数 VV_OUTPUT_LOG_UTF8 の値が使われます。VV_OUTPUT_LOG_UTF8
                        の値が1の場合はUTF-8で、0または空文字、値がない場合は環境によって自動的に決定されます。
  --cors_policy_mode {CorsPolicyMode.all,CorsPolicyMode.localapps}
                        CORSの許可モード。allまたはlocalappsが指定できます。allはすべてを許可します。localappsはオリジン間リソース共有ポリシーを、app://.とlocalhost関連に限定します。その他のオリジンはal
                        low_originオプションで追加できます。デフォルトはlocalapps。
  --allow_origin [ALLOW_ORIGIN [ALLOW_ORIGIN ...]]
                        許可するオリジンを指定します。スペースで区切ることで複数指定できます。
  --setting_file SETTING_FILE
                        設定ファイルを指定できます。

実際に起動してみます。

$ ./run

しばらくすると、VOICEVOX Engineのサーバーが立ち上がるため、以下にアクセスしてみます。APIのリファレンスが表示されればOKです。
http://localhost:50021/docs

ちなみにですが、VOICEVOX Engineが立ち上がっているマシン外からアクセスする場合は、以下のようにhostオプションに立ち上げているPCのIPアドレスを渡す必要があります(リバプロなどしない場合)。うちではこのPC(Mac mini)には固定IPを振ってます。

$ ./run --host 192.168.xxx.xxx

自動起動の設定

起動チェックができたら、一度サーバーを終了して、LaunchAgentsでの自動起動設定をしておきます。

以下のディレクトリに、以下の名称のplistファイルを作ります。

~/Library/LaunchAgents/jp.hiroshiba.voicevox-engine.plist

内容は以下のようにし、[PATH_TO_VOCEVOX_ENGINE]と[HOST_IP_ADDRESS]は適宜置き換えてください。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>jp.hiroshiba.voicevox-engine.plist</string>
  <key>ProgramArguments</key>
  <array>
    <string>[PATH_TO_VOCEVOX_ENGINE]macos-x64/run</string>
    <string>--host</string>
    <string>[HOST_IP_ADDRESS]</string>
  </array>
  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>

以下で起動設定します。

$ launchctl load ~/Library/LaunchAgents/jp.hiroshiba.voicevox-engine.plist

以下のようにプロセスが立ち上がっていればOKです。

$ launchctl list | grep jp.hiroshiba.voicevox-engine.plist
27243	0	jp.hiroshiba.voicevox.plist

なお、サーバーを停止したい場合、自動起動を止めたい場合は以下です。

# 停止したい場合
$ launchctl stop jp.hiroshiba.voicevox-engine.plist

# 自動起動を止める場合
$ launchctl unload ~/Library/LaunchAgents/jp.hiroshiba.voicevox-engine.plist

あとがき

これで、自宅ネットワーク内で利用できる音声合成サーバーを立てることができました。各種アプリケーションから連携して、簡易的な読み上げ等であれば色々活用できそうです。VOICEVOX素晴らしいソフトウェアです、開発者の皆様ありがとうございます。そして、ずんだもんかわいいです。

今回は自宅の都合でMac mini上にVOICEVOX Engineのサーバーを構築だったので少しニッチかもしれません。WindowsやGPUを活用できる環境であれば、Dockerで立ち上げるのが一番早いかもです。

最近ジェネレーティブなAIモデルが色々出ていて、学習だけでなくて推論にも計算リソースが必要になってきているので、なんやかんやで自宅内にGPUサーバー欲しくなりますね...

14
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
16