tktts_pyttsx3.py ライブラリ技術ドキュメント

ライブラリの機能や目的

tktts_pyttsx3.py は、Pythonの音声合成ライブラリ pyttsx3 を利用して、テキストを音声に変換・再生、または音声ファイルとして保存するための機能を提供するライブラリです。特に、複数の話者による対話形式のテキストを効率的に処理し、それぞれの話者に割り当てられた音声で出力する機能に重点を置いています。

主な目的は以下の通りです。

  • pyttsx3 エンジンの初期化と制御を抽象化し、簡単にテキスト音声合成を利用できるようにする。

  • 利用可能な音声の一覧表示機能を提供し、ユーザーが適切な音声を選択できるようにする。

  • 単一のテキスト文字列だけでなく、話者指定を含む対話形式のテキスト(スクリプトなど)を処理する機能。

  • テキストの置換ルールや話者の正規化など、tktts_base ライブラリと連携して高度なテキスト前処理をサポート。

  • 生成された音声をリアルタイムで再生するだけでなく、指定したファイル形式で保存する機能。

このライブラリは、複雑な音声合成設定を隠蔽し、開発者がテキストから音声への変換をより直感的かつ柔軟に行えるようにすることで、アプリケーション開発の効率化を支援します。

importする方法

このライブラリを他のPythonプログラムからインポートするには、以下のいずれかの方法を使用します。

ライブラリ全体をインポートする場合:

import tktts_pyttsx3

特定の関数のみをインポートする場合:

from tktts_pyttsx3 import speak_dialogue, get_available_voices

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

tktts_pyttsx3.py が正しく動作するためには、以下の非標準ライブラリが必要です。

  • pyttsx3: テキスト音声合成のコア機能を提供します。

これらのライブラリは pip コマンドを使用してインストールできます。

pip install pyttsx3

スクリプトの冒頭には pydubsimpleaudio のインストールも促すメッセージがありますが、tktts_pyttsx3.py 自体でこれらを直接インポートしている箇所はありません。ただし、pyttsx3 が内部的にこれらのライライブラリを依存している場合や、関連する上位レイヤーのライブラリ(tktts_base など)が依存している可能性があるため、万全を期す場合は以下のコマンドでインストールすることも推奨されます。

pip install pydub simpleaudio

importできる変数と関数

変数

  • TTS_ENGINE_NAME

    • pyttsx3 の音声合成エンジン名を定義する文字列定数です。

    • 値: 'pyttsx3'

  • DEFAULT_PYTTSX3_VOICE

    • pyttsx3 を使用する際のデフォルトの声(話者)名を定義する文字列定数です。

    • 値: 'Haruka'

関数

  • get_available_voices_info()

    • 動作: 現在のシステムで利用可能な pyttsx3 の音声(ボイス)の詳細情報をリスト形式で取得します。各ボイスは辞書として表現され、その辞書には"name", "id", "lang" などの情報が含まれます。

    • 引数: なし

    • 戻り値:

      • 利用可能な音声の詳細情報を含む辞書のリスト。

      • pyttsx3 エンジンの初期化に失敗した場合は False

  • get_available_voices()

    • 動作: 現在のシステムで利用可能な pyttsx3 の音声の名前(name)のみをリスト形式で取得します。

    • 引数: なし

    • 戻り値:

      • 利用可能な音声の名前の文字列リスト。

      • pyttsx3 エンジンの初期化に失敗した場合は False

  • list_available_voices()

    • 動作: 利用可能な pyttsx3 の音声の詳細情報を標準出力に整形して表示します。内部で get_available_voices_info() を呼び出します。

    • 引数: なし

    • 戻り値:

      • 情報の表示に成功した場合は True

      • 失敗した場合は False

  • speak(outfile, text, voice, speak_rate = None)

    • 動作: 単一のテキストを指定された音声で再生するか、ファイルに保存します。

    • 引数:

      • outfile (str): 音声ファイルを保存するパス。この引数が指定された場合(空でない文字列)、音声はファイルに保存されます。None または空文字列の場合、音声は再生されます。

      • text (str): 音声に変換するテキスト文字列。

      • voice (str): 使用する音声の名前(pyttsx3 のボイス名、例: 'Haruka')。

      • speak_rate (int, optional): 話速。省略された場合は pyttsx3 のデフォルト設定が使用されます。

    • 戻り値:

      • 音声がファイルに保存された場合、outfile の値。エラーが発生しファイルが作成されなかった場合は None

      • 音声が再生された場合、True

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

    • 動作: 複数の話者を含む対話形式のテキストを処理し、各話者に割り当てられた音声で音声合成を行います。生成された音声は一時ファイルに保存され、最終的に再生されるか、または単一のファイルに統合される準備がされます(この関数自体は結合は行いません)。

    • 引数:

      • dialogue (list): 対話テキストのリスト。各要素は str またはタプル (speaker, text) の形式を想定します。

      • replacements (dict): テキスト内の特定の文字列を置換するための辞書。tktts_base.apply_replacements に渡されます。

      • target_voices (dict or str): 話者名とその話者に割り当てる pyttsx3 の音声名をマッピングする辞書。もし文字列が渡された場合、全てのテキストはその単一の音声で出力されます。

      • speakers (dict, optional): 話者の正規化に使用する辞書。tktts_base.normalize_speaker に渡されます。デフォルトは空の辞書。

      • speak_rate (int, optional): 話速。デフォルトは 150

      • temp_dir (str, optional): 一時音声ファイルを保存するディレクトリのパス。ファイル保存モードの場合に必須。

      • outfile (str, optional): 最終出力ファイルの名前。この引数が指定された場合(空でない文字列)、音声は一時ファイルに保存され、後で結合されることを想定します。None または空文字列の場合、全てのテキストが結合されて再生されます。

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

      • cfg (object, optional): 設定オブジェクト。cfg.monologue プロパティが bool 型で、対話をモノローグとして扱うかどうかを制御します。

    • 戻り値:

      • True, tmpfiles (tuple): 音声生成が成功した場合。tmpfiles は生成された一時ファイルパスのリスト(保存モードの場合)、または空の辞書(再生モードの場合)。

      • False, tmpfiles (tuple): 音声生成が失敗した場合。tmpfiles は失敗した一時ファイルパスのリスト(保存モードの場合)。

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

tktts_pyttsx3.pyif __name__ == "__main__": ブロックを持っていません。 したがって、このスクリプトを直接実行した場合 (python tktts_pyttsx3.py)、以下の処理のみが実行されます。

  1. 必要なライブラリ (pyttsx3) がシステムにインストールされているかを確認します。

  2. もし pyttsx3 が不足している場合、エラーメッセージを表示し、インストール方法(pip install pydub simpleaudio pyttsx3)を案内します。

  3. ユーザーに ENTER キーを押すように促し、プログラムを終了します。

このスクリプト単体で特定の音声合成処理が実行されることはありません。主に他のスクリプトやアプリケーションからインポートされて使用されることを目的としています。