VOICEPEAKがコマンドラインから使えるようになっていたので、Pythonから呼び出してみました。
今回、チャットボットの回答を音読させるようにしたので、生成された音声ファイルは使い捨てています。
PythonからVOICEPEAKを使うには、subprocessモジュールを使ってvoicepeak.exeを実行します。
voicepeak.exeのパスや出力先、ナレーター名や感情パラメータなどを引数として渡します。
出力されたwavファイルをwinsoundモジュールで再生しています。
再生後、wavファイルを削除しています。
以下が今回のコードです。
import os import subprocess import winsound def playVoicePeak(script , narrator = "Japanese Female 1", happy=50, sad=50, angry=50, fun=50): """ 任意のテキストをVOICEPEAKのナレーターに読み上げさせる関数 script: 読み上げるテキスト(文字列) narrator: ナレーターの名前(文字列) happy: 嬉しさの度合い sad: 悲しさの度合い angry: 怒りの度合い fun: 楽しさの度合い """ # voicepeak.exeのパス exepath = "C:/Program Files/VOICEPEAK/voicepeak.exe" # wav出力先 outpath = "output.wav" # 引数を作成 args = [ exepath, "-s", script, "-n", narrator, "-o", outpath, "-e", f"happy={happy},sad={sad},angry={angry},fun={fun}" ] # プロセスを実行 process = subprocess.Popen(args) # プロセスが終了するまで待機 process.communicate() # 音声を再生 winsound.PlaySound(outpath, winsound.SND_FILENAME) # wavファイルを削除 os.remove(outpath)
使用例(最小)
playVoicePeak("こんにちは")
VOICEPEAKのコマンド引数については、以下を参考にしました。
voicepeak v1.2.1のコマンド - takashiskiのブログ
公式マニュアルにも書いてあるみたいなんですけど、記述を見つけられませんでした・・・
VOICEPEAKとChatGPTを連携した記事を書きました。