音声合成は、機械がテキストを自然な音声に変換する技術です。Pythonには、pyttsx3というモジュールがあり、これを使って簡単に音声合成を行うことができます。ここでは、pyttsx3の基本的な使い方と音声の速度を変更する方法について解説します。
pyttsx3 とは
pyttsx3 は、Python でテキスト読み上げ(Text-to-Speech: TTS)を実現するためのライブラリです。クロスプラットフォーム(Windows、macOS、Linux)で動作し、オフラインで利用できるのが大きな特徴です。SAPI5 (Windows)、NSSpeechSynthesizer (macOS)、eSpeak (Linux など) といった、OS ネイティブの音声合成エンジンを利用しています。
環境構築
まず、pyttsx3 をインストールします。
pip install pyttsx3
補足
- Linux 環境: eSpeak が必要になる場合があります。
sudo apt-get install espeak(Debian/Ubuntu 系の場合) などでインストールしてください。 - macOS/Windows: OSに標準搭載されている音声合成を使用するため追加でソフトウェアをインストールする必要はありません。
退屈なことはPythonにやらせよう 第2版 ノンプログラマーにもできる自動化処理プログラミング [ AI Sweigart ]
基本的な使い方
pyttsx3 を使った最もシンプルなテキスト読み上げの例を示します。
import pyttsx3 engine = pyttsx3.init() # エンジンを初期化 engine.say("こんにちは、世界!") # 読み上げるテキストを設定 engine.runAndWait() # 読み上げを実行し、完了まで待機
それぞれのメソッドの仕様は下記の通りです。必要に応じて変更してください。
pyttsx3.init()
- 役割: 音声合成エンジンを初期化します。
- 引数(オプション):
- 戻り値: 初期化されたエンジンオブジェクトを返します。
engine.say()
- 役割: 読み上げるテキストをエンジンに設定します。
- 引数:
text: 読み上げるテキスト文字列。
- 戻り値: なし
engine.runAndWait()
- 役割:
say()で設定されたテキストの読み上げキューを開始します。- 読み上げが完了するまで、プログラムの実行をブロックします。
- 引数: なし
- 戻り値: なし
読み上げ速度の調整
読み上げ速度は、engine.setProperty() メソッドを使って調整します。
import pyttsx3 engine = pyttsx3.init() # 速度を設定 (デフォルト値は通常200) engine.setProperty('rate', 150) # ややゆっくり #engine.setProperty('rate', 300) # 高速 engine.say("これは読み上げ速度のテストです。") engine.runAndWait()
rate プロパティには、1分間あたりの単語数(Words Per Minute: WPM)を指定します。デフォルト値は通常 200 ですが、エンジンによって異なる場合があります。
その他の設定項目
pyttsx3 では、速度以外にも、声の高さ (pitch)、音量 (volume)、使用する声の種類 (voice) などを変更できます。
import pyttsx3 engine = pyttsx3.init() # 利用可能な声のリストを取得 voices = engine.getProperty('voices') for voice in voices: print(f"ID: {voice.id}, 名前: {voice.name}, 言語: {voice.languages}") # 声を変更 (IDを指定) engine.setProperty('voice', voices[0].id) # 例: 1番目の声 # 音量を設定 (0.0 ~ 1.0) engine.setProperty('volume', 0.8) # 例: 音量を80%に # 声の高さを設定 (0.0 ~ 1.0, デフォルトは通常1.0) engine.setProperty('pitch', 1.2) # 例: 少し高めの声に engine.say("声、音量、高さの設定を変更しました。") engine.runAndWait()
利用可能な声の確認
利用可能な声(voices)は環境によって異なります。上記のコードで確認できます。
Windows の場合、voices[0].id は通常、男性の声(例:Microsoft David Desktop - English (United States))、voices[1].id は女性の声(例:Microsoft Zira Desktop - English (United States))を表します。
応用:複数テキストの連続読み上げとイベント処理
複数のテキストを連続して読み上げたり、読み上げ開始・終了などのイベントを処理したりすることも可能です。
import pyttsx3 def onStart(name): print('読み上げ開始:', name) def onWord(name, location, length): print('単語:', name, location, length) def onEnd(name, completed): print('読み上げ終了:', name, completed) engine = pyttsx3.init() engine.connect('started-utterance', onStart) engine.connect('started-word', onWord) engine.connect('finished-utterance', onEnd) engine.say('これは最初の文です。', 'first') engine.say('これは2番目の文です。', 'second') engine.runAndWait() engine.disconnect('started-utterance', onStart) engine.disconnect('started-word', onWord) engine.disconnect('finished-utterance', onEnd)
engine.connect() を使うと、特定のイベント発生時に呼び出されるコールバック関数を登録できます。
まとめと注意点
pyttsx3 は、Python で手軽にテキスト読み上げ機能を実装できる便利なライブラリです。注意点は、読み上げ品質は、OS や選択する音声合成エンジンに依存することです。また、日本語の読み上げは、エンジンによっては不自然になる場合があります。より高品質な日本語音声合成が必要な場合は、Google Cloud Text-to-Speech や Amazon Polly などの商用サービス、または Coqui TTS などの OSS ライブラリを検討する必要があります。
Pythonでの業務の自動化について学ぶには下記のようなサイトが有効です。
[PR]