sample_irodori_tts.py

プログラムの動作

このプログラム sample_irodori_tts.py は、tktts_irodori ライブラリを利用してテキストから音声を合成するPythonスクリプトです。主な目的は、指定されたテキストを自然な音声に変換し、オプションで参照音声ファイルに基づいて声質を調整・固定することです。

主な機能:

  1. テキスト音声合成: スクリプト内に定義されたテキストを、ニューラルネットワークベースの技術を用いて音声ファイル (.wav 形式) に変換します。

  2. 参照音声による声質調整: コマンドライン引数として.wavファイルを指定することで、そのファイルの音声特徴を参考に、合成される音声の声質(ピッチ、話速、雰囲気など)を調整・固定することができます。

  3. 利用可能な音声情報の表示: コマンドライン引数に list を与えることで、tktts_irodori ライブラリで利用可能な音声オプションや、声質固定に関する詳細なガイダンスを標準出力に表示します。

解決する課題:

テキストコンテンツを音声コンテンツに変換したい場合や、特定の話者の声質を模倣して一貫性のある音声コンテンツを生成したい場合に利用できます。特に、多様な声質を持つキャラクターのセリフ生成や、個性を反映したナレーションの作成などに役立ちます。

原理

sample_irodori_tts.py は、tktts_irodori というPythonライブラリの機能を利用して音声合成を行います。このライブラリは、深層学習(ニューラルネットワーク)に基づくTTS (Text-to-Speech) 技術を内部的に使用しています。

基本的な音声合成のプロセスは以下のようになります。

  1. テキスト分析: 入力されたテキストを形態素解析し、発音記号やアクセント情報に変換します。

  2. 音響特徴生成: 変換された発音記号列から、メルスペクトログラムなどの音響特徴量を生成します。これは通常、ニューラルネットワークモデル(例: Tacotron, Transformer-TTSなど)によって行われます。

  3. 波形生成: 生成された音響特徴量から、最終的な音声波形を生成します。これには、Vocoder(例: WaveNet, Hifi-GAN, VITSなど)と呼ばれる別のニューラルネットワークモデルが使用されます。

参照音声 (ref_wav) を指定した場合の「声質固定」は、**ボイスクローニング(Voice Cloning)や話者適応(Speaker Adaptation)**と呼ばれる技術に基づいています。この技術では、参照音声から話者の特徴的な声質(ピッチ、音色、話速、抑揚など)を表す「話者埋め込み(Speaker Embedding)」と呼ばれるベクトルを抽出します。この話者埋め込みを音声合成モデルに入力することで、テキストから生成される音声が参照音声に似た声質を持つように調整されます。

これにより、同じ参照音声を使用し続ける限り、異なるテキストであっても一貫した声質で音声を生成することが可能になります。具体的なアルゴリズムや数式は tktts_irodori ライブラリの内部実装に依存しますが、一般的には以下のような概念に基づいています。

\[ E_{speaker} = \text{Encoder}(WAV_{reference}) \]
\[ WAV_{output} = \text{Decoder}(Text_{input}, E_{speaker}) \]

ここで、\(E_{speaker}\) は参照音声から抽出された話者埋め込み、\(WAV_{reference}\) は参照音声ファイル、\(Text_{input}\) は合成したいテキスト、\(WAV_{output}\) は生成される音声波形です。

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

このプログラムを実行するには、tktts_irodori ライブラリが必要です。以下の pip コマンドを使用してインストールできます。

pip install tktts_irodori

必要な入力ファイル

プログラムの動作モードに応じて、以下の入力ファイルが必要となる場合があります。

  • 参照音声ファイル:

    • 形式: WAV (.wav) 形式の音声ファイル。

    • 内容: 合成する音声の声質を固定したい場合に、その基準となる音声サンプルです。

    • 指定方法: コマンドライン引数としてファイルパスを指定します。例: python sample_irodori_tts.py my_voice.wav

    • 備考: このファイルはオプションです。指定しない場合は、tktts_irodori のデフォルトの声質で音声が生成されます。

生成される出力ファイル

プログラムが正常に実行されると、以下の音声ファイルが生成されます。

  • sample_irodori.wav

    • 形式: WAV (.wav) 形式の音声ファイル。

    • 内容: スクリプト内の text 変数に定義された文章が、合成された音声データとして含まれます。参照音声が指定された場合は、その声質に近い形で合成されます。

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

sample_irodori_tts.py は、コマンドライン引数によって異なる動作をします。

  • デフォルトの音声合成:

    python sample_irodori_tts.py
    

    これは、参照音声なしでスクリプト内のテキストを音声に合成し、sample_irodori.wav として保存します。

  • 利用可能な音声情報の表示:

    python sample_irodori_tts.py list
    

    tktts_irodori で利用可能な音声の種類や、声質固定の方法に関する詳細な情報を標準出力に表示します。

  • 参照音声ファイルを使用した音声合成:

    python sample_irodori_tts.py <参照音声ファイル名>.wav
    

    指定された .wav ファイルを声質の参照として使用し、スクリプト内のテキストを音声に合成し、sample_irodori.wav として保存します。<参照音声ファイル名>.wav は、実際に存在するWAVファイルのパスに置き換えてください。

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

例1: デフォルトの音声合成

参照音声を指定せずに、スクリプトに定義された文章をデフォルトの声質で音声合成します。

コマンド:

python sample_irodori_tts.py

実行結果:

プログラムが実行され、sample_irodori.wav というファイルが現在のディレクトリに作成されます。このWAVファイルには、スクリプト内の以下の文章が音声として記録されています。

こんにちは。
これは Irodori TTS を使った音声合成のサンプルです。
ニューラルネットワークを使って、文章から音声を生成しています。

ターミナルには、ファイルの作成が完了したことを示すメッセージが表示されます。

sample_irodori.wav を作成しました。

例2: 利用可能な音声情報の表示

tktts_irodori ライブラリが提供する音声オプションや、声質固定に関する詳細なガイダンスを確認します。

コマンド:

python sample_irodori_tts.py list

実行結果:

以下のような情報が標準出力に表示されます(内容は tktts_irodori のバージョンによって異なる場合があります)。

Available voices:
  default
  ... (他の利用可能な音声名) ...

=== Irodori-TTS の音声指定 ===
固定話者リストはありません。
caption を変更すると、話し方や雰囲気を調整できます。
プログラム例:
Python:
  tktts_irodori.speak(
      outfile="sample.wav",
      text="こんにちは。これは音声合成のテストです。",
      voice="default",
      caption="落ち着いた自然な声で、明瞭に読み上げる。",
      model=model,

声質を固定したい場合は、参照音声ファイル ref_wav を指定します。

使用例:
  python sample_irodori_tts.py reference.wav
プログラム例:
  ref_wav="reference.wav"

Python:
  tktts_irodori.speak(
      outfile="sample.wav",
      text="こんにちは。これは音声合成のテストです。",
      voice="default",
      caption="落ち着いた自然な声で、明瞭に読み上げる。",
      ref_wav="reference.wav",
      model=model,
  )

同じ ref_wav を使用することで、同じ声質を基準に音声を生成できます。

例3: 参照音声ファイルを使用した音声合成

例えば my_ref_voice.wav という名前のWAVファイルを現在のディレクトリに用意し、それを参照音声として使用して音声を合成します。

前提: my_ref_voice.wav という音声ファイルが存在すること。

コマンド:

python sample_irodori_tts.py my_ref_voice.wav

実行結果:

プログラムが実行され、sample_irodori.wav というファイルが現在のディレクトリに作成されます。このWAVファイルに含まれる音声は、スクリプト内の文章が合成されたものですが、その声質は my_ref_voice.wav に近い特徴(ピッチ、話速など)を持つように調整されます。

ターミナルには、ファイルの作成が完了したことを示すメッセージが表示されます。

sample_irodori.wav を作成しました。