プログラミングの芽

面白そうな技術を使って、楽しいことやりたい

VOICEPEAKをPythonから呼び出す

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を連携した記事を書きました。

atarms.hatenablog.com