tktts_aquestalkplayer.py 技術ドキュメント

ライブラリの機能や目的

tktts_aquestalkplayer.py は、外部の音声合成ソフトウェアであるAquesTalkPlayerと連携し、指定されたテキストを音声ファイルとして出力するためのPythonライブラリです。

主な機能:

  • AquesTalkPlayerが提供する利用可能な音声プリセット(ボイス)の一覧を取得します。

  • テキストと選択されたボイスを指定して、WAV形式の音声ファイルを生成します。

  • 複数の対話文(ダイアログ)を処理し、話者に応じて異なるボイスを適用して、個々の一時的な音声ファイルを連続して生成します。

解決する課題:

このライブラリは、PythonアプリケーションからAquesTalkPlayerの音声合成機能を容易に利用できるようにすることを目的としています。特に、複数話者の対話文をそれぞれの話者に割り当てられたボイスで音声化するプロセスを効率的に自動化し、音声合成処理をPythonプログラムに統合することを可能にします。

importする方法

このライブラリは、以下のいずれかの方法で他のPythonプログラムからインポートできます。

import tktts_aquestalkplayer

または、特定の関数や変数だけをインポートする場合:

from tktts_aquestalkplayer import speak, get_available_voices, voices_available

必要な非標準ライブラリとインストール方法

このライブラリは、標準ライブラリである os, re, time, subprocess の他に、カスタムモジュール tktts_base に依存しています。

  • tktts_base: このモジュールは、tktts_aquestalkplayer.py と同じディレクトリパス上、またはPythonのパスが通っている場所に配置されている必要があります。これは pip コマンドでインストールするような公開されているパッケージではないため、別途入手または作成する必要があります。

AquesTalkPlayer自体は、このライブラリが subprocess を通じて呼び出す外部アプリケーションです。別途インストールし、実行可能ファイル (aquestalkplayer.exe) へのパスを aquestalk_path 引数で指定できるようにしておく必要があります。

importできる変数と関数

変数

  • TTS_ENGINE_NAME: str - このTTSエンジンを示す文字列 'aquestalkplayer'

  • tts_model: str - 現在使用されているTTSモデルを示す文字列。デフォルトは "tts-1"

  • voices_available: list - AquesTalkPlayerで利用可能なボイスプリセット名のリスト。 例: ["れいむ", "まりさ", "こいし", "さとり", "男声1", "男声2", "女性1", "女性2", "ロボット", "ロボット2", "機械"]

  • DEFAULT_ATP_VOICE: str - デフォルトで使用されるAquesTalkPlayerのボイス。デフォルトは "れいむ"

関数

  • get_available_voices_info()

    • 動作: AquesTalkPlayerで利用可能なボイスの情報を辞書のリストとして返します。各辞書はボイスの名前を 'name' キーで持ちます。

    • 引数: なし

    • 戻り値: list - 利用可能なボイス情報のリスト。 例: [{"name": "れいむ"}, {"name": "まりさ"}]

  • get_available_voices()

    • 動作: AquesTalkPlayerで利用可能なボイス名のリストを直接返します。

    • 引数: なし

    • 戻り値: list - 利用可能なボイス名の文字列リスト。 例: ["れいむ", "まりさ"]

  • list_available_voices()

    • 動作: 現在利用可能なAquesTalkPlayerのボイス名をコンソールに出力します。

    • 引数: なし

    • 戻り値: bool - ボイスのリスト表示が成功した場合は True、失敗した場合は False

  • speak(outfile, text, voice, aquestalk_path="aquestalkplayer.exe")

    • 動作: 指定されたテキストを、指定されたボイスで音声合成し、WAVファイルとして出力します。AquesTalkPlayerの実行可能ファイル (aquestalkplayer.exe) を subprocess モジュールを用いて呼び出します。

    • 引数:

      • outfile (str): 出力する音声ファイルのパス。

      • text (str): 音声合成するテキスト。

      • voice (str): 使用するAquesTalkPlayerのボイスプリセット名。

      • aquestalk_path (str, オプション): AquesTalkPlayerの実行可能ファイルへのパス。デフォルトはカレントディレクトリの "aquestalkplayer.exe"

    • 戻り値: str または None - 音声ファイルの出力に成功した場合は出力ファイルのパス、失敗した場合は None

  • speak_dialogue(dialogue, replacements, target_voices, speakers={}, aquestalk_path=None, temp_dir=None, outfile=None, ext="wav", cfg=None)

    • 動作: 対話文のリストを処理し、話者に応じたボイスを適用して、個々の一時的な音声ファイルを生成します。tktts_base のヘルパー関数 (apply_replacements, split_dialogue) を使用してテキストの前処理を行い、speak 関数を呼び出して各セグメントを音声化します。

    • 引数:

      • dialogue (list): 処理する対話文のリスト。各要素は文字列、または split_dialogue が処理できる形式のデータ。

      • replacements (dict): テキストに適用する置換ルール。キーが置換前の文字列、値が置換後の文字列。

      • target_voices (str または dict): 使用するボイス。文字列の場合、全ての対話にそのボイスを適用します。辞書の場合、話者名とAquesTalkPlayerのボイスプリセット名のマッピングとします。

      • speakers (dict, オプション): 話者の追加情報を含む辞書。デフォルトは空の辞書。

      • aquestalk_path (str, オプション): AquesTalkPlayerの実行可能ファイルへのパス。指定がない場合は speak 関数のデフォルトが使用されます。

      • temp_dir (str): 一時ファイルを保存するディレクトリのパス。この引数は必須です。

      • outfile (str, オプション): 最終的な出力ファイル名。これが指定されている場合、保存モードと見なされますが、この関数自体は複数の音声ファイルを結合せず、一時ファイルのリストを返します。

      • ext (str, オプション): 出力する音声ファイルの一時ファイルの拡張子。デフォルトは "wav"

      • cfg (object, オプション): 設定オブジェクト。cfg.monologue 属性を持つことが期待されます。

    • 戻り値: tuple - (bool, list)。処理が成功した場合は (True, [生成された一時ファイルパスのリスト])、失敗した場合は (False, [それまでに生成された一時ファイルパスのリスト])

main scriptとして実行したときの動作

このライブラリのコードには、if __name__ == "__main__": ブロックが存在しないため、python tktts_aquestalkplayer.py のように直接スクリプトとして実行しても、特定の動作は何も実行されません。通常、このようなライブラリは他のスクリプトからインポートされて使用されることを意図しています。