PythonでVOICEVOX COREを使ってみる(音声合成)

はじめに

 以前の記事でGoogle Cloud Platformの音声合成・音声認識を試したのですが、利用回数が多いとお金がかかります。やっぱり無料で実行したいということで、今回はVOICEVOXを使ってみました。

 「無料で使える中品質なテキスト読み上げソフトウェア」ということですが、十分高品質で素晴らしいソフトウェアだと思います。一から勉強して音声合成ソフトウェアを組み込むのは大変ですし...

 何かとエラーが起きたので、その対処方法を残しています。今後のアップデート次第ではありますが、ご参考になれば幸いです。

▼VOICEVOXのページはこちら

https://voicevox.hiroshiba.jp/

▼VOICEVOXのソフトウェア利用規約についてはこちら

https://voicevox.hiroshiba.jp/term/

▼以前の記事はこちら

Text-to-Speech API / Speech-to-Text APIを使ってみる(Google Cloud Platform)

はじめに  今回はGCP(Google Cloud Platform)のText-to-Speech APIとSpeech-to-Text APIを使ってみました。以下にまとめるように、音声系のAPIですね。  これを使 [&hel…

VOICEVOXの概要

▼手軽に試したい方はこちらの「ダウンロード」から。デスクトップアプリケーションになっています。Electronも使われているみたいですね。

https://voicevox.hiroshiba.jp/

▼VOICEVOXの全体構成はこちら。今回使うのはコア部分です。

https://github.com/VOICEVOX/voicevox/blob/main/docs/%E5%85%A8%E4%BD%93%E6%A7%8B%E6%88%90.md

▼コア部分のGitHubのリポジトリはこちら

https://github.com/VOICEVOX/voicevox_core

Pythonで実行する

環境を構築する

▼Pythonの環境構築についてはこちらに書かれています。

https://github.com/VOICEVOX/voicevox_core/blob/main/example/python/README.md

 今回はWindowsのVS Codeで、PowerShellのターミナルから実行しています。Pythonのバージョンは3.10.11です。

▼voicevox_coreのバージョンは0.14.5を利用します。

https://github.com/VOICEVOX/voicevox_core/releases/tag/0.14.5

 まずは以下のコマンドでvoicevoxフォルダにdownload.exeをダウンロードし、実行します。必要なライブラリがインストールされます。

 pipでPythonのライブラリもインストールします。

▼フォルダ構造はこんな感じ。

プログラムを実行する

 voicevox_coreリポジトリのサンプルプログラムを試してみたのですが、エラーが出て実行できませんでした。

https://github.com/VOICEVOX/voicevox_core/tree/main/example/python

 まずは以下のエラーが出ました。PythonもVOICEVOXも、64ビット版をインストールしていました。

 DLLファイルの読み込みに失敗しているとのことです。これは先程ダウンロードしたvoicevox_coreフォルダに含まれる、onnxruntime.dllを適切に配置すると解決します。

 以下の二通りの方法でエラーを回避できました。

  • onnxruntime.dllがあるフォルダでプログラムを実行する
  • pipでインストールされたvoicevox_coreフォルダにonnxruntime.dllをコピーする

 次に、voicevox_core.blockingが無いというエラーも出ていました。こちらについては今後のアップデートで解決するかもしれません。

voicevox_core.blockingについて

 現在のPythonのバインディングにあるvoicevox_coreには、blocking.pyが含まれています。

▼こちらです。

https://github.com/VOICEVOX/voicevox_core/tree/main/crates/voicevox_core_python_api

 バージョンはリリースされていた0.14.5を使っていましたが、0.15.0がリリースされそうです。そのときに含まれるようになるのかもしれません。

▼リリースについてはこちら。

https://github.com/VOICEVOX/voicevox_core/releases

 以下の記事ではvoicevox_core.blockingを使っていないプログラムがあって、こちらだと実行できました。

▼こちらの記事です。

https://qiita.com/taka7n/items/1dc61e507274b93ee868

 話者をidで指定するのですが、以下のプログラムで一覧を表示できます。

from voicevox_core import METAS
from pprint import pprint
pprint(METAS)

 先程のvoicevox_coreフォルダに、プログラムを保存して実行します。

from pathlib import Path
from voicevox_core import VoicevoxCore, METAS
import sys, os

core = VoicevoxCore(open_jtalk_dict_dir=Path("./open_jtalk_dic_utf_8-1.11"))
speaker_id = 2

text = sys.argv[1]
if not core.is_model_loaded(speaker_id):
    core.load_model(speaker_id)
wave_bytes = core.tts(text, speaker_id)
with open("./" + text + ".wav", "wb") as f:
    f.write(wave_bytes)

 idは2なので、「四国めたん」さんのノーマル音声になっています。

 引数を音声に変換するようにしているので、以下のように実行します。

▼以下のエラーが出た場合は、open_jtalkのフォルダのパスを確認してください。

 文字列 + .wavのファイルが作成されます。

▼実際の音声はこんな感じ。

最後に

 環境構築がいつも一番大変なのですが、実行できるようになりました。今後のアップデートは要チェックですね。

 Pythonで実行できたということは、アプリケーションに組み込み可能で、Node-REDから実行可能で、ロボットにも組み込めるというわけです。夢が広がりますね。あとは音声認識機能も欲しいところです。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です