こんにちは、Zero-Cheeseです。
Pythonを使って、テキスト読み上げソフト「VOICEVOX」を操作してみませんか?
- 「VOICEVOX」は、誰でも無料で、直接コードから扱える音声合成ツールです。
本記事は、以前「作る」と予告していた記事です。
下記記事との併せ技で、まるで人間のように話すAI友達を、作り上げることが可能です。
本記事は、Python初心者の方でも大丈夫です。
コピペして、使用することができます。
VOICEVOXの特徴
プログラミング言語から操作できる、音声合成ソフトの中で、有名なものを比較しました。
サービス名(製品名) | エンジン | 商用利用 | エンジンメーカ | 無料 |
---|---|---|---|---|
VOICEVOX | AI | OK | オープンソース | ◯ |
Open JTalk(スタンドアロン版) | HMM | OK 修正BSDライセンス | オープンソース | ◯ |
Google Text-to-Speech | AI | ? | ✗ | |
Amazon Polly | AI | OK | Amazon | ✗ |
Microsoft Azure Text-to-Speech | AI | OK | Microsoft | ✗ |
有料版においても、「無料枠」があるサービスがあります。
VOICEVOXの優れている点は、下記のとおりです。
- 商用利用OK、
- 無料、
- プログラミングから操作可能、
- 感情表現が豊か、
- さまざまな声のキャラクターが存在します。
是非、試してみて、楽しんでみて下さい!
Pythonから、VOICEVOXを使用する
VOICEVOXをPythonから操作するには、以下のステップをたどります。
- VOICEVOXのインストール
- Pythonからの実行にあたり、必要なパッケージのインストール
- Pythonのコード紹介
Pythonのインストール方法については、以前の記事を参照してください。
VOICEVOXのインストール
VOICEVOXの公式サイトにいき、「ダウンロード」ボタンをクリックすれば、インストールファイルがDLできます。
Windows、Mac、Linuxに対応しています。
VOICEVOXのインストール後、プログラミングを実行する前に、VOICEVOXを起動しておく必要があります。
VOICEVOXを起動すると、「localhost:50021」にて、アクセスが可能です。
Pythonからの実行にあたり、必要なパッケージのインストール
必要なPythonパッケージを、pipを使ってインストールします。
pipの使い方については、また別の記事で詳しく説明しています。
今回、使用するパッケージは、
- requests
- simpleaudio
です。
コマンドプロンプト(ターミナル)から、下記コマンドを実行して下さい。
pip install requests
pip install simpleaudio
Pythonのコード紹介
VOICEOVOXにて、テキストを読み上げるためには、下記プロセス順にコードを作る必要があります。
- 音声合成用のクエリを作成(母音や子音への分解、アクセント検出等を行う)
- 上記のクエリを基に、音声を合成
- 合成した音声を、「wavファイル」に保存
- 「wavファイル」の再生
本コードでは
- 一度、「wavファイル」を作成してから
- 作成した「wav」ファイル」を再生する
方法を採用しています。
ファイルを作らず、Stream方式で音声再生する方法もありますが、ノイズが入ったりする事が多いため、こちらの方式を採用しました。
繰返しになりますが、本Pythonコード実行前に、VOICEVOXを起動しておいて下さい。
下記コードは、「今日も、元気です!」と読み上げてもらうコードです。
7行目「speaker_id」は、話者IDです。詳細は、次の章をご覧下さい。
import json
import requests
import simpleaudio
def text_2_wav(text, speaker_id=8, max_retry=20, filename='audio.wav'):
# 音声合成のための、クエリを作成
query_payload = {"text": text, "speaker": speaker_id}
for query_i in range(max_retry):
response = requests.post("http://localhost:50021/audio_query",
params=query_payload,
timeout=10)
if response.status_code == 200:
query_data = response.json()
break
else:
raise ConnectionError('リトライ回数が上限に到達しました。')
# 音声合成データの作成して、wavファイルに保存
synth_payload = {"speaker": speaker_id}
for synth_i in range(max_retry):
response = requests.post("http://localhost:50021/synthesis",
params=synth_payload,
data=json.dumps(query_data),
timeout=10)
if response.status_code == 200:
with open(filename, "wb") as fp:
fp.write(response.content)
break
else:
raise ConnectionError('リトライ回数が上限に到達しました。')
def play_auido_by_filename(filename: str):
# 保存したwavファイルを、再生
wav_obj = simpleaudio.WaveObject.from_wave_file(filename)
play_obj = wav_obj.play()
play_obj.wait_done()
if __name__ == '__main__':
filename = 'audio.wav' # 音声データのファイル名
text_2_wav('今日も、元気です!', filename=filename)
play_auido_by_filename(filename)
(参考1)VOICEVOX 話者IDに関して
こちらの番号を変更することで、話者を変更する事ができます。
気に入ったものを、探してみて下さい。
・四国めたん
Google Colab ではじめる VOICEVOXより引用
・ノーマル : 2
・あまあま : 0
・ツンツン : 6
・セクシー : 4
・ずんだもん
・ノーマル : 3
・あまあま : 1
・ツンツン : 7
・セクシー : 5
・春日部つむぎ
・ノーマル : 8
・雨晴はう
・ノーマル : 10
・波音リツ
・ノーマル : 9
・玄野武宏
・ノーマル : 11
・白上虎太郎
・ノーマル : 12
・青山龍星
・ノーマル : 13
・冥鳴ひまり
・ノーマル : 14
・九州そら
・ノーマル : 16
・あまあま : 15
・ツンツン : 18
・セクシー : 17
・ささやき : 19
(参考2)VOICEVOX ドキュメンテーションの確認方法
VOICEOVOXを立ち上げた状態で、下記URLをブラウザに入力します。
http://localhost:50021/docs
ドキュメンテーションが表示されます。
最後に
本記事では、
- VOICEVOXのインストール方法
- Pythonから、VOICEVOXを操作する方法
をご紹介しました。
コードを作る上でのポイントは、
- 音声合成のためのクエリを作ってから、
- 音声合成するという
順番で、記載する点です。
また、遅延なく読み上げてもらうためには、長い文章でも、短い文章単位に分けて、音声合成する必要があります。
是非、工夫してみて下さい!
本記事も、最後までお付き合い頂き、ありがとうございました。
それではまた、お会いしましょう!