技術ドキュメント: sample_pyttsx3.py

プログラムの動作

このプログラム sample_pyttsx3.py は、Windowsの音声合成機能(Text-to-Speech, TTS)をPythonから利用するためのシンプルなスクリプトです。主な目的は、指定されたテキストを音声に変換し、WAV形式の音声ファイルとして保存することです。

主な機能は以下の2点です:

  • 利用可能な音声(ボイス)の一覧表示: コマンドライン引数に list を指定することで、システムにインストールされている全ての利用可能な音声エンジンの名前を表示します。

  • テキストの音声合成とファイル保存: スクリプト内に定義されたテキストを、指定された音声(またはデフォルト音声)で読み上げ、sample_windows_tts.wav というファイル名で音声ファイルとして保存します。

このプログラムは、Pythonから簡単に音声合成を行い、音声コンテンツを生成したいという課題を解決します。

原理

このプログラムは、pyttsx3 ライブラリを介してオペレーティングシステムに組み込まれた音声合成エンジン(Windowsの場合はSAPI; Speech Application Programming Interface)を利用します。pyttsx3 は、OS固有のTTSエンジンを抽象化し、クロスプラットフォームで一貫したインターフェースを提供します。

スクリプトのアルゴリズムは以下のステップで動作します:

  1. コマンドライン引数の解析: sys.argv を使用して、スクリプト実行時に与えられたコマンドライン引数をチェックします。

    • 引数が list の場合、tktts_pyttsx3.list_available_voices() 関数を呼び出し、利用可能な音声の一覧を表示してプログラムを終了します。

    • 引数が存在し、list 以外の場合は、その引数を読み上げに使用する音声の名前として設定します。

    • 引数がない場合は、デフォルトで "Haruka" を音声として設定します。

  2. テキストの準備: 読み上げるテキストはスクリプト内の変数 text にハードコードされています。このテキストが音声合成の入力となります。

  3. 音声合成とファイル出力: tktts_pyttsx3.speak() 関数を呼び出し、以下のパラメータを渡します。

    • outfile: 生成される音声ファイルのパス ("sample_windows_tts.wav")。

    • text: 読み上げるテキスト。

    • voice: 使用する音声の名前(コマンドライン引数で指定されたもの、またはデフォルト)。

    • speak_rate: 話速(ここでは150語/分)。

  4. tktts_pyttsx3 モジュールは内部で pyttsx3 ライブラリを初期化し、指定された音声と話速を設定します。その後、与えられたテキストを音声エンジンに渡し、音声データを生成します。

  5. 生成された音声データは、指定されたファイルパス(sample_windows_tts.wav)にWAV形式で保存されます。

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

このプログラムは、tktts_pyttsx3 というモジュールを使用していますが、これは pyttsx3 ライブラリのラッパーであると推測されます。基本的な音声合成機能を提供するために、以下のライブラリが必要です。

  • pyttsx3: Pythonで利用できるテキスト音声合成(Text-to-Speech)ライブラリです。

インストールは、以下の pip コマンドで実行できます。

pip install pyttsx3

必要な入力ファイル

このプログラムは、外部の入力ファイルを直接必要としません。 読み上げるテキストはスクリプト内に定義されており、音声の選択や動作モードはコマンドライン引数を通じて制御されます。

生成される出力ファイル

  • sample_windows_tts.wav

    • 内容: スクリプト内で定義されたテキストが、指定された音声(またはデフォルトの「Haruka」音声)と話速で読み上げられた音声データがWAV形式で保存されます。

コマンドラインでの使用例 (Usage)

sample_pyttsx3.py スクリプトは、以下の形式でコマンドラインから実行できます。

python sample_pyttsx3.py [オプション] [音声名]
  • [オプション]:

    • list: 利用可能な音声(ボイス)の一覧を標準出力に表示します。

  • [音声名]:

    • 読み上げに使用する音声の名前を指定します。省略された場合、デフォルトで "Haruka" が使用されます。例えば、"Zira" や "David" などが考えられますが、利用可能な音声はシステムによって異なります。

コマンドラインでの具体的な使用例

1. デフォルト音声(Haruka)でテキストを読み上げ、WAVファイルを生成する

python sample_pyttsx3.py

実行結果: 標準出力に「sample_windows_tts.wav を作成しました。」と表示され、カレントディレクトリに sample_windows_tts.wav ファイルが生成されます。このWAVファイルには、スクリプトに定義された日本語のテキストが「Haruka」の声で読み上げられた音声が保存されています。

2. 利用可能な音声の一覧を表示する

python sample_pyttsx3.py list

実行結果: システムにインストールされている利用可能な音声の名前とIDが、以下のような形式で標準出力に一覧表示されます。

Available Voices:
  ID: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\TTS_MS_EN-US_ZIRA_11.0, Name: Microsoft Zira Desktop - English (United States)
  ID: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\TTS_MS_JA-JP_HARUKA_11.0, Name: Microsoft Haruka Desktop - Japanese
  ID: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\TTS_MS_EN-US_DAVID_11.0, Name: Microsoft David Desktop - English (United States)
  ... (その他の音声)

3. 指定した音声(例: Zira)でテキストを読み上げ、WAVファイルを生成する

python sample_pyttsx3.py Zira

実行結果: 標準出力に「sample_windows_tts.wav を作成しました。」と表示され、カレントディレクトリに sample_windows_tts.wav ファイルが生成されます。このWAVファイルには、スクリプトに定義された日本語のテキストが「Zira」の声で読み上げられた音声が保存されます(ただし、日本語テキストを英語音声で読み上げるため、発音は不自然になる可能性があります)。