ゆっくりボイスを Python から自動出力できないかな…と思って方法を調べてみました。
目次
ゆっくりボイスをPythonから出力する
AquesTalkPlayerをダウンロードする
ゆっくりボイスを出力するには「AquesTalkPlayer」が必要となるので、以下のページからダウンロードします。
PythonからAquesTalkを実行する
以下のPythonコードを用意します。ファイル名は「conv_yukkuri.py」としました。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
import subprocess
# AquesTalkPlayerの場所を指定する.
TOOL_PATH = "AquesTalkPlayer.exe"
def usage():
print("conv_yukkuri.py [プリセット名] [セリフ] [出力ファイル]")
def main():
argv = sys.argv
argc = len(argv)
if argc < 4:
usage()
return
# プリセット.
preset = argv[1]
# セリフ.
word = argv[2]
# 保存ファイル名
output = argv[3]
cmd = ["start", TOOL_PATH, "/T", word, "/P", preset, "/W", output]
subprocess.run(" ".join(cmd), shell=True)
if __name__ == '__main__':
main()
これで以下のコマンドで、直接 wav ファイルを出力できるようになります。
ゆっくりボイスを出力する
> python conv_yukkuri.py れいむ ゆっくりしていってね reimu.wav
プリセットの指定
なお、速度などは外部から指定できないようで、プリセット経由で指定することになります。
追記: 複数のテキストをまとめて wav ファイルに出力する
改行を区切り文字としてまとめて wav ファイルを出力するスクリプトを書いてみました。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import sys
import subprocess
import shutil
# AquesTalkPlayerの場所を指定する.
TOOL_PATH = "AquesTalkPlayer.exe"
def usage():
print("conv_yukkuri.py [設定ファイル]")
def main():
argv = sys.argv
argc = len(argv)
if argc < 2:
usage()
return
input = sys.argv[1]
f = open(input, "r", encoding="utf-8")
data = f.read()
f.close()
# 出力フォルダがなければ作成
outdir = "output"
if os.path.exists(outdir):
# いったん消す.
shutil.rmtree(outdir)
os.makedirs(outdir)
# プリセット.
preset = "れいむ"
idx = 1
page = 0
for line in data.split("\n"):
# セリフ.
word = line
if word.strip() == "":
continue # 空文字.
if word[0] == "#": # コメント行.
# 改ページ.
page += 1
idx = 1
continue
# 保存ファイル名
print(page, "-", idx, ":", word)
output = "\"%s/%02d_%02d_%s.wav\""%(outdir, page, idx, word[:16])
cmd = ["start", TOOL_PATH, "/T", "\""+word+"\"", "/P", preset, "/W", output]
subprocess.run(" ".join(cmd), shell=True)
idx += 1
if __name__ == '__main__':
main()
例えば以下のような台本テキストを作成します。
クリックゲームチュートリアル台本
# 001_プロジェクト作成
Godot Engineを起動すると、プロジェクトマネージャーが表示されます。
ここにプロジェクト名を入れるのですが、保存先はプロジェクトパスで設定します。
パスを変えるには参照ボタンをクリック。
上ボタンを押すとパスが移動します。
フォルダをダブルクリックでそのフォルダに移動できます。
保存先が決まったら、プロジェクト名を入力します。
ここでは TestClickGame としました。
「フォルダを作成」ボタンを押すとフォルダが作られます。
「作成して編集」ボタンでプロジェクトが起動します。
# 002_Mainシーン作成
プロジェクトが起動したので、画面の構成を説明すると、
左上のシーンビューで、シーン内のノードを管理します。まだ何もシーンを作っていないので、作成ボタンが表示されています。
左下にあるのがファイルシステムで、このプロジェクト内のリソースをここで管理します。
画面中央がキャンバスです。
この上のボタンで表示モードが変更できます。
そして右上にあるのが、シーンの実行ボタンです。
メインシーンを実行したり、現在開いているシーンを実行するなどの実行モードを選んで起動できます。
まだメインシーンがないので、実行ボタンを押してもこのようなダイアログが表示されます。
今はCancelボタンを押して、閉じておきましょう。
そして左側にあるのがインスペクタで、シーンの詳細な情報が表示されたり編集できます。
ではメインシーンを作ります。2Dシーンをクリック。
するとNode2Dというシーンが作られます。2Dゲームを作るときはこのシーンが基準となります。
これをダブルクリックして「Main」という名前に変更します。
変更できたら、メニューから「シーンを保存」を選んで保存します。
保存ダイアログが表示されるので、「Main.tscn」にして、「保存」ボタンをクリック。
ファイルシステムに「Main.tscn」が保存されます。
これでゲームを実行できるようになったので、右上の実行ボタンをクリック。
メインシーンが設定されていないので、ダイアログから「現在のものを選択」を選びます。
すると何もない画面が表示されました。
×ボタンを押して閉じておきましょう。
このテキストファイルを以下のコマンドで実行します。
テキストファイルからwavを作る
> python conv_yukkuri.py input.txt
すると以下のように wav ファイルが output フォルダに出力されます。