DGX SparkでVOICEVOXを使った音声合成
VOICEVOXで音声合成
VOICEVOXに関しては以下です。
DGX Sparkと初期設定に関しては以下実施してください。
最低限 uvのセットアップをしておいてください。
ハードウェア的には、オーディオ機能付きのモニタやUSBスピーカーなどをDGX Sparkに接続して、音が出るようにしておいてください。
ライブラリとして直接呼び出すPython版VOICEVOX Coreを使う方法とDockerを使う方法の2つを紹介します。
Python版VOICEVOX Core
ライブラリとして直接呼び出す方式です。
uvの仮想環境構築
以下で仮想環境を構築します。
$ mkdir voicevox
$ cd voicevox
$ uv venv
$ source .venv/bin/activate
VoiceVoxのセットアップ
以下とほぼ同じです。この記事ではコマンドだけ羅列します。コピーしやすくするために、冒頭の$も省略します。詳細は以下記事を参照ください。CPU動作です。Armアーキテクチャだと多分GPU使うのは難しいと思います。
wget https://github.com/VOICEVOX/voicevox_core/releases/download/0.14.0/voicevox_core-0.14.0+cpu-cp38-abi3-linux_aarch64.whl
uv pip install voicevox_core-0.14.0+cpu-cp38-abi3-linux_aarch64.whl
wget http://downloads.sourceforge.net/open-jtalk/open_jtalk_dic_utf_8-1.11.tar.gz
tar xvzf open_jtalk_dic_utf_8-1.11.tar.gz
動作確認
以下コマンドで動作確認します。
uv pip install playsound3
from pathlib import Path
from playsound3 import playsound
from voicevox_core import AccelerationMode, VoicevoxCore
SPEAKER_ID = 2
open_jtalk_dict_dir = "./open_jtalk_dic_utf_8-1.11"
out = Path("output.wav")
acceleration_mode = AccelerationMode.AUTO
def main() -> None:
core = VoicevoxCore(
acceleration_mode=acceleration_mode, open_jtalk_dict_dir=open_jtalk_dict_dir
)
core.load_model(SPEAKER_ID)
text = "こんにちは"
audio_query = core.audio_query(text, SPEAKER_ID)
wav = core.synthesis(audio_query, SPEAKER_ID)
out.write_bytes(wav)
playsound(out)
if __name__ == "__main__":
main()
動きました。
Docker版 VOICEVOX Engine(HTTP API)
上記のPython版VOICEVOX Coreはライブラリとして直接呼び出す方式ですが、Docker版VOICEVOX Engineを使うとHTTP API経由で音声合成できます。他のツール(Node.js製のmarkdown-to-zundamonなど)との連携にはこちらが便利です。
Docker版のメリット
- HTTP API(localhost:50021)で言語を問わず利用可能
- Python環境のセットアップ不要
- 複数ツールから同時にアクセスできる
セットアップ
ARM64(CPU)版のイメージを使います。
$ docker pull voicevox/voicevox_engine:cpu-arm64-latest
起動
$ docker run --rm -p '127.0.0.1:50021:50021' voicevox/voicevox_engine:cpu-arm64-latest
バックグラウンドで起動したい場合は -d オプションを付けます。
$ docker run --rm -d --name voicevox -p '127.0.0.1:50021:50021' voicevox/voicevox_engine:cpu-arm64-latest
起動まで少し時間がかかります(辞書のビルドで30秒程度)。以下でAPIの応答を確認できます。
$ curl http://localhost:50021/speakers | python3 -m json.tool | head -20
``
### 音声合成(curl)
VOICEVOX EngineのAPIは2ステップです。
1. 音声クエリの生成
```bash
$ curl -s -X POST "http://localhost:50021/audio_query?text=こんにちは&speaker=3" \
-H "Content-Type: application/json" \
-o query.json
- 音声合成
curl -s -X POST "http://localhost:50021/synthesis?speaker=3" \
-H "Content-Type: application/json" \
-d @query.json \
-o output.wav
speakerパラメータは話者IDです。主なIDは以下の通りです。
| speaker ID | キャラクター | スタイル |
|---|---|---|
| 2 | 四国めたん | ノーマル |
| 3 | ずんだもん | ノーマル |
| 1 | ずんだもん | あまあま |
| 8 | 春日部つむぎ | ノーマル |
全話者一覧は GET /speakers で確認できます。
音声合成(Python)
import requests
from pathlib import Path
VOICEVOX_BASE = "http://localhost:50021/"
SPEAKER_ID = 3 # ずんだもん ノーマル
text = "こんにちは! ずんだもんなのだ"
# 音声クエリ生成
query = requests.post(
f"{VOICEVOX_BASE}/audio_query",
params={"text": text, "speaker": SPEAKER_ID}
).json()
# 音声合成
audio = requests.post(
f"{VOICEVOX_BASE}/synthesis",
params={"speaker": SPEAKER_ID},
json=query
).content
Path("output.wav").write_bytes(audio)
print("output.wav に保存しました")
停止
$ docker stop voicevox
GPU対応の現状
2026年2月時点で、ARM64 + CUDA(GPU)の組み合わせは以下の理由で未対応です。
- ONNX RuntimeがARM64でのCUDA公式サポートを提供していない(Issue #22903)
- これに伴いVOICEVOX CoreもARM64 GPU版がない(Issue #670)
x86_64環境であれば voicevox/voicevox_engine:nvidia-latest でGPU版が利用可能です。
まとめ
DGX SparkでVOICEVOXを動かす方法をまとめました。
変更履歴
- 2026/03/01 Dockerでの動かし方について追記
Discussion