見出し画像

【Python】pyttsx3で音声ファイル作成! テキストを音声に変換して、再生や保存が可能! ~備忘録~

pyttsx3は、Pythonで利用できるオープンソースのテキスト読み上げライブラリです。このライブラリを使用することで、様々な用途でテキストを音声に変換することができます。

本記事では、pyttsx3の基本的な操作方法を説明します。具体的には、以下の内容について解説します。

  • エンジンの初期化と読み上げ

  • 音声ファイルへの保存

  • 音声プロパティの設定

公式ドキュメントはコチラ


■はじめに

pyttsx3を利用するには、まずライブラリをインストールする必要があります。コマンドプロンプトを開き、以下のコマンドを実行することでインストールできます。

pip install pyttsx3


■pyttsx3の使い方

pyttsx3の使い方をサンプルコードを使って説明します。

■サンプルコード:次女のトレーニング支援

今回ご紹介するコードは、次女がプランクするときに使用するものです。
公式アプリが使えなくなったそうなので、代用として作ったものです。

'''
プランク用マット
次女トレーニング用読み上げプログラム

- プランク用マットに書かれた番号に、手を移動させる。
- 公式アプリが使えなくなってしまったらしいので代用として作成
'''
import pyttsx3
import random
from time import sleep

# 準備
LR = ["ひだり", "みぎ "]
numbers = [ n for n in range(1, 9) ]  #番号 1 - 8 まで

# エンジン初期化
engine = pyttsx3.init()

# 読み上げるテキストを設定
speak = "今日もトレーニングがんばりましょう。\n手の位置を『ひだり1』『みぎ1』にあわせてください。"
print(speak)
engine.say( speak )

# 読み上げ開始
engine.runAndWait()
sleep(3)

# 読み上げるテキストを設定
speak = "それでは開始します。"
engine.say( speak )
print(speak)

# 読み上げ開始
engine.runAndWait()
sleep(1)


# 音量の設定(0.0 - 1.0) ※初期値1.0
engine.setProperty('volume', 0.9)

# 話速の設定(200 - 600が適切な範囲) ※初期値200
engine.setProperty('rate', 100)


# 処理開始:徐々に手の移動を速くしていく。
for i in range(1, 31):
    speak = random.choice(LR) + "ーのー" + str(random.choice(numbers))

    # 音声の大きさを変更する場合
    volume = engine.getProperty('volume')
    engine.setProperty('volume', volume + 0.01)
    
    # 現在の話速を取得し、話速を10ずつ速くする。
    rate = engine.getProperty('rate')   
    engine.setProperty('rate', rate + 5)
    
    # 読み上げるテキストを設定
    engine.say( speak )
    print(speak.replace('ーのー',' '))
    
    # 読み上げ開始
    engine.runAndWait()
    
    sleep(5 * (1-i/30))


speak = "今日もお疲れさまでした!"
print(speak)
engine.say( speak )
engine.runAndWait()

# 結果例 #
ひだり 1
みぎ  5
みぎ  4
ひだり 8  …… 

■サンプルコード2:テキストファイルを読み込んで音声ファイルで保存する。

'''
前提条件:
読み込みたいテキストファイル(sample.txt)を準備してください。
'''
import pyttsx3
import re

speak = "テキストを読み込んで、音声ファイルで保存"
print(speak)


#エンジン初期化
engine = pyttsx3.init()


# 音量の設定(0.0 - 1.0)
engine.setProperty('volume', 1.0)


# 話速の設定(200 - 600が適切な範囲)
engine.setProperty('rate', 300)


# 音声の種類を設定
#voices = engine.getProperty('voices')
#engine.setProperty('voice', voices[0].id)  # 1番目の音声を選択


# ファイルを読み込んで音声ファイルにする。
with open('sample.txt', mode="r", encoding="utf-8") as f:
    text = f.read()
    

# テキスト調整
  # ①URL部分を読まれると長くてわかりづらいので、"URL削除"に置き換え
text = re.sub(r"(https?://[\w\-\.]+\.[a-zA-Z]+(/[\w\-\.]*)*)", "URL削除", text)

  # ②空白行を削除
text = re.sub(r"^\s*$|^\n", "", text, flags=re.MULTILINE)

  # ③"#"が"イゲタイゲタイゲタ..."と連呼されると嫌なので"シャープ"1つに置き換え
text = re.sub(r"#+", "シャープ", text)   # 


# wavファイルに保存
engine.save_to_file(text, 'text2voice.wav')
engine.runAndWait()     #実行


# 実行結果確認
print(text)

■解説

1. エンジンの初期化

pyttsx3を使用する前に、エンジンを初期化する必要があります。以下のコードを実行することで、エンジンを初期化できます。

import pyttsx3

engine = pyttsx3.init()


2. 読み上げるテキストの設定

読み上げるテキストは、engine.say()メソッドを使用して設定します。

engine.say('読み上げたいテキスト')
engine.say('データはキューとして格納されていく')

内容はキューとして格納されます。


3. 読み上げの実行

読み上げを実行するには、engine.runAndWait()メソッドを使用します。

engine.runAndWait()

上記 2. の場合だと、実行結果は『読み上げたいテキスト データはキューとして格納されていく』と読み上げられます。


4. 音量の調整

音量は、volumeプロパティを使用して設定します。値は0.0~1.0の範囲で、0.0が最も小さく、1.0が最も大きくなります。

engine.setProperty('volume', 0.5)  # 音量設定

現在の設定から変更したい場合

volume = engine.getProperty('volume')       # プロパティから音量取得 
engine.setProperty('volume', volume + 0.1)  # 音量を上げる
engine.setProperty('volume', volume - 0.1)  # 音量を下げる


5. 話速の調整

話速は、rateプロパティを使用して設定します。値は200~600の範囲が適正な値とされています。

rate = engine.getProperty('rate')
engine.setProperty('rate', rate + 50)  # 話速を上げる
engine.setProperty('rate', rate - 50)  # 話速を下げる


6. 音声の種類の設定

音声の種類は、voiceプロパティを使用して設定します。利用可能な音声の一覧は、engine.getProperty('voices')メソッドで取得できます。

voices = engine.getProperty('voices')
engine.setProperty('voice', voices[0].id)  # 1番目の音声を選択

音声の種類が知りたい場合

# 音声の種類一覧を取得したいとき
voices = engine.getProperty('voices')
print([voice.name for voice in voices]) 

# 結果例:
#['Microsoft Haruka Desktop - Japanese', 'Microsoft Zira Desktop - English (United States)']


7. 音声ファイルへの保存

読み上げた音声をファイルに保存するには、save_to_file()メソッドを使用します。

engine.save_to_file('読み上げ.wav', '読み上げたいテキスト')


■まとめ

pyttsx3は、様々な用途でテキストを音声に変換できる便利なライブラリです。以前紹介した、PDFをテキストに変換して音声で読み込ませたり、スクレイピングと組み合わせたりするなど、いろいろ便利になることがあるかと思います。
この記事が役に立つことがあれば幸いです。


この記事が気に入ったらサポートをしてみませんか?