【Python】合成音声pyttsx3使い方-テキストを読み上げ

当サイトで紹介する商品・サービス等の外部リンクは、アフィリエイト広告を含む場合があります。
スポンサーリンク
本記事を読むと以下の実行ができます

Pythonでテキストを音声として読み上げたいときには、
オフラインで動作する合成音声ライブラリ「pyttsx3」を使うと便利です。

このライブラリは、簡単にテキストを音声に変換でき、速度や音声の種類も調整可能です。
プログラムにナレーションを追加したり、読み上げアプリを開発したりする際に活躍します。

本記事では、pyttsx3の基本的な使い方から、商用利用の可否や対応言語について詳しく解説します。
公式サイト:「Pyttsx3公式ページ

本記事は次の人におすすめ
  • Pythonでテキスト読み上げ機能を実装したい人
  • オフラインで動作する音声合成ライブラリを探している人
  • 商用利用可能な音声合成ツールを検討している人
  • Pythonでナレーション付きのアプリケーションを作成したい人
  • 朗読ソフトや支援ツールを自作したい人
Udemyで学習する
スポンサーリンク

pyttsx3とは?

pyttsx3は、Python用のテキスト読み上げライブラリで、
コンピュータのローカルで音声合成を行います。

インストールは、コマンドプロンプト、ターミナルでできます。

pip install pyttsx3

WindowsではSAPI5、MacOSではNSSpeechSynthesizer、Linuxではespeakを使用しており、
さまざまなプラットフォームで簡単に利用できます。pyttsx

Windowssapi5
Macnsss
Linuxespeak

また、音声速度や音量、性別の調整が可能で、カスタマイズ性が高い点も特徴です。

音声の読み上げ

テキストをリアルタイムで音声として再生できます。
say()メソッドにテキストを入力し、runAndWait()メソッドで実行します。

import pyttsx3

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

# 読み上げるテキスト
engine.say("Hello, I am reading this text.")

# 読み上げ実行
engine.runAndWait()

音声のプロパティ変更

音声の再生速度、音量、音声の性別など、細かいプロパティを変更できます。
カスタマイズした音声合成が可能です。

速度150で音量90%、男性の声で「Hello alicia-ing」と読み上げます。

import pyttsx3

engine = pyttsx3.init()

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

# 速度(WPM: words per minute)
engine.setProperty('rate', 150)

# 音声(性別)の変更
voices = engine.getProperty('voices')
engine.setProperty('voice', voices[0].id)  # 男性の声
#engine.setProperty('voice', voices[1].id)  # 女性の声

engine.say("Hello alicia-ing")
engine.runAndWait()

音声の保存

テキストを音声ファイル(WAV形式)として保存することができます。
save_to_file()メソッドを使用して、音声をファイルに書き出すことが可能です。

ただし、mp3ファイルは非対応です。

text= "Hello alicia-ing"
engine.save_to_file(text , 'voice.wav')

イベント制御

読み上げ開始、終了時にイベントをトリガーにして、プログラムを処理する。

再生が開始したら、「Start」とログを出力し、
再生が終了したら、「製作者と終わった時間」を取得して、ログに出力する。

import pyttsx3
from datetime import datetime

def onStart(name):
    print("Start")

def onEnd(name, completed):
    end_time = datetime.now().strftime("%H:%M:%S")  # 再生終了時刻を取得
    print(f"End, presented: {name}, completed at: {end_time}")

engine = pyttsx3.init()

# イベントの接続
engine.connect('started-utterance', lambda name: onStart("Alicia"))
engine.connect('finished-utterance', lambda name, completed: onEnd("Alicia", completed))

# 読み上げの設定と実行
engine.say("This will trigger events.")
engine.runAndWait()

商用利用可能か?

pyttsx3はオープンソースライブラリであり、商用利用も可能です。

ただし、音声エンジンに依存する部分もあるため、
合成音声エンジン自体のライセンス条件を確認する必要があります。

そのため、商用利用可能なGoogle-Text-to-Speechがおすすめです。
APIを取得すれば、Pythonからも操作できます。

Google-Text-to-Speechの操作方法を紹介しています。

対応している言語は?

pyttsx3は、使用する音声エンジンに依存して、様々な言語に対応しています。
具体的には、英語、日本語、フランス語、ドイツ語など、多くの言語で音声合成が可能です。

ただし、エンジンやOSによっては、言語のサポート状況が異なります。

筆者
筆者

Windowsでは、英語、日本語、フランス語はできた。ドイツ語もできたが英語?ってなった。
韓国語は発音できず、中国語は違う気がした。

csvのテキストを一括でwavファイル化

pyttsx3を使用してCSVファイル内のテキストを一括で音声にします。

ソースコード

import pyttsx3
import csv

# pyttsx3エンジンの初期化
engine = pyttsx3.init()
rate = engine.getProperty('rate')
engine.setProperty('rate', rate-50)

# CSVファイルの読み込み
with open('word.csv', 'r', newline='', encoding='utf-8') as csvfile:
    reader = csv.reader(csvfile)
    
    # 全ての行をリストとして取得
    rows = list(reader)
    
    # 列ごとに処理
    for column in range(len(rows[0])):  # 列の数だけループ
        for index, row in enumerate(rows):
            if column < len(row):  # 列のインデックスが範囲内かチェック
                text = row[column]  # セルの値を取得
                
                # 音声ファイルの保存先を決定 
                filename = f'output_{index}.wav'
                
                # 音声をテキストから生成し、WAVファイルとして保存
                engine.save_to_file(text, filename)
                print(f'Saved: {filename}')
        
# 音声生成の実行
engine.runAndWait()

UdemyでPythonを学習

Udemyは、オンデマンド式の学習講座です。
趣味から実務まで使えるおすすめの講座を紹介します。

ビックセール開催中(12月19日まで)
対象のコースが1500円から(最大95%OFF)

多彩な講座から自分に合った講座を探そう!

最大95%OFF

終了まで

時間




解説

  • モジュール名

「pyttsx3」:Pythonのテキストを音声に変換するためのライブラリ。テキストを音声ファイルに保存する機能が必要なため使用している。
「csv」:CSV(Comma-Separated Values)形式のファイルを読み込み、テキストデータを取得するために使用される。
Python標準ライブラリなので、インストール不要。

  • フィールド(メンバ変数)

「engine」:pyttsx3のエンジンを初期化し、音声合成のためのインスタンスを作成する。
「rate」:音声の速度を取得するために使用。通常のスピードよりも遅くするため、rate-50に設定される。
「csvfile」:CSVファイルを読み込むためのファイルオブジェクト。
「reader」:csv.readerによって、CSVファイルの内容を行ごとに読み込むリーダーオブジェクト。
「rows」:CSVファイルの全ての行をリストとして保持する。各行はリストの形式で格納される。
「index」:音声ファイルを保存するための番号。
「column」:CSVファイルの列インデックスを管理する変数。各列のデータを処理するために使われる。
「row」:CSVファイルの各行を指す変数。リスト形式で保持された各行のデータを処理するために使われる。
「text」:現在のセル(CSVの特定の行・列)の値をテキストとして保持する。
「filename」:音声ファイルを保存する際のファイル名。処理されているセルに基づき生成される。

  • 関数・メソッド

「pyttsx3.init()」:音声エンジンを初期化し、音声合成のためのエンジンインスタンスが生成される。

「engine.getProperty(‘rate’)」:現在設定されている音声の読み上げ速度を取得する。音声の読み上げ速度をカスタマイズするために使用される。

「engine.setProperty(‘rate’, rate-50)」:音声の読み上げ速度をrate-50に設定する。pyttsx3は読み上げ速度が速すぎるので、半分ぐらいがおすすめ

「csv.reader()」:CSVファイルを読み込み、行ごとのデータを取得するためのリーダーオブジェクトを返す。

「engine.save_to_file(text, filename)」:textで指定したテキストを音声に変換し、指定したファイル名filenameでWAV形式の音声ファイルに保存する。

「engine.runAndWait()メソッド」:すべての音声を処理し、音声合成を実行する。全てのテキストの音声化が完了するまで待機する。

  • その他

with open():CSVファイルを読み込み、ファイル操作を行う。ファイルを開いた後は、自動的にクローズする。encoding=’utf-8’により、UTF-8形式でファイルを読み込む設定。

list(reader):csv.readerオブジェクトから全ての行をリスト形式で取得し、rowsに保存する。

enumerate()関数:各行をインデックス付きで処理するために使用される。ループ内で行インデックスを取得しつつ、その行自体も同時に扱う。

実演

スクリプトを実行すると、csv(word.csv)に保管してあるテキストを読み込み、
wav形式で保存します。

保存先は、Pythonのスクリプトと同じ段落です。

まとめ

Pythonの合成音声ライブラリ「pyttsx3」の基本的な使い方とその機能について解説しました。

pyttsx3は、テキストの読み上げから、音声ファイルの生成、プロパティの変更まで、幅広い用途に対応します。

Udemyで学習する

この記事を書いた人

プロフィール

アリッシア

                 

大学4年間で何か胸を張れるスキルを身に着けたくて当サイト運営を始めました。
現在、大学院に進学するか就職するか迷いながら勉強しています。
詳しいプロフィールはこちら

Contact icon

contact

X icon

X

Instagram icon

Instagram

Note icon

Note

スポンサーリンク
Python
フォローする
タイトルとURLをコピーしました