【NLP】Pythonで音声合成処理を実現する

1. 説明

        テキストを音声ファイルに変換できる Python 呼び出しライブラリ、オフライン ソフトウェア パッケージ pyttsx3 API を紹介します。Python では、テキストを音声に変換するために使用できるさまざまな API が用意されています。pyttsx3 は、入力テキストを音声に変換する非常に使いやすいツールです。他の同様のライブラリとは異なり、オフラインで動作し、Python 2 および 3 と互換性があります。

2. 環境のインストール

        pyttsx3 API をインストールするには、ターミナルを開いて次のように記述します。      

  pip install pyttsx3

        このライブラリは win32 に依存しているため、プログラムの実行中にエラーが発生する可能性があります。これを回避するには、環境に pypiwin32 をインストールするだけです。      

  pip install pypiwin32

3. pyttsx3の重要な機能

        いくつかの重要な機能は次のとおりです。

  • pyttsx3.init ([driverName : string, debug : bool]) – 指定されたドライバーを使用するエンジン インスタンスへの参照を取得します。要求されたドライバーが別のエンジン インスタンスによってすでに使用されている場合、そのエンジンが返されます。それ以外の場合は、新しいエンジンが作成されます。
  • getProperty(name : string) – エンジン プロパティの現在の値を取得します。
  • setProperty(name, value) – エンジン プロパティを設定するコマンドをキューに入れます。新しい属性値は、このコマンドの後にキューに入れられたすべての発話に影響します。
  • Say(text : unicode, name : string) – 発話を行うコマンドをキューに入れます。音声は、キュー内のこのコマンドの前に設定された属性に従って出力されます。
  • runAndWait() – 現在キューに入れられているすべてのコマンドの処理中にブロックします。必要に応じてエンジン通知のコールバック。この呼び出しの前にキューに入れられたすべてのコマンドがキューから空になったときに返されます。

4. 音声合成プログラムのデモンストレーション

        これで、テキストを音声に変換するサンプル プログラムを作成する準備が整いました。

# Python program to show
# how to convert text to speech
import pyttsx3  

# Initialize the converter
converter = pyttsx3.init()
# Set properties before adding
# Things to say 
# Sets speed percent 

# Can be more than 100
converter.setProperty('rate', 150)
# Set volume 0-1
converter.setProperty('volume', 0.7)
# Queue the entered text 
# There will be a pause between
# each one like a pause in 
# a sentence

converter.say("Hello GeeksforGeeks")
converter.say("I'm also a geek")  

# Empties the say() queue
# Program will not continue
# until all speech is done talking

converter.runAndWait()
        出力:

        上記プログラムの出力は、「Hello GeeksforGeeks」および「私もオタクです」という音声になります。

5、話速可変処理

        エンジンの速度と音量を設定します。話す速度と音量を設定します。

    rate = engine.getProperty('rate')
    engine.setProperty('rate', rate-100)

        デフォルトではレートは 200 なので、100 に下げてみましょう。Rate は話す速度です。私たちにとって 200 は高いです。それで私たちはそれを下げました。

        ベロシティとは、単に話者がテキストを発声する速度です。レートを設定した後、最初にボリュームプロパティを取得してから設定することにより、ボリュームを変更または設定します。

    volume = engine.getProperty('volume')
    engine.setProperty('volume', volume+0.50)

        デフォルトのボリュームは 1 (100%) ですが、読み取りボリュームのプロパティから受け取った値に 0.50 を加えて 150% に増やします。

        これら 2 つのプロパティの設定が完了したので、say() を呼び出します。これで、音声には 1 倍の速度と 1.50 の音量というパラメータが設定されます。

engine.say("Hello, This is the test for the pyttsx3")
engine.runAndWait()

        さて、この runAndWait は私たちにとって非常に重要です。このエンジンを実行し、渡されたテキストの TTS が完了するまで実行を続けたいと考えています。

6. 声を変える

        生成された音声を男性から女性に変更したいとします。どうやってやるの?どれどれ。
テキスト読み上げ用に上記のコードを実行すると、応答する声が男性の声であることがわかります。音声を変更するには、エンジンから音声プロパティを取得することで利用可能な音声のリストを取得し、システムで利用可能な音声に応じて音声を変更できます。

        サウンドのリストを取得するには、次のコードを記述します。

voices = converter.getProperty('voices')

  

for voice in voices:

    # to get the info. about various voices in our PC 

    print("Voice:")

    print("ID: %s" %voice.id)

    print("Name: %s" %voice.name)

    print("Age: %s" %voice.age)

    print("Gender: %s" %voice.gender)

    print("Languages Known: %s" %voice.languages)

出力:

        音声を変更するには、setProperty()メソッドを使用して音声を設定します。上記の音声 ID は音声を設定するために使用されます。
以下はボイスチェンジャーの実装です。

voice_id = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\TTS_MS_EN-US_ZIRA_11.0"

  

# Use female voice

converter.setProperty('voice', voice_id)

  

converter.runAndWait()

        必要に応じてサウンドを切り替えることができます。for ループを実行して、さまざまなステートメントをさまざまなサウンドに割り当てることができます。コードを実行して結果をお楽しみください。

おすすめ

転載: blog.csdn.net/gongdiwudu/article/details/131360079