Pythonでテキストを音声として読み上げたいときには、
オフラインで動作する合成音声ライブラリ「pyttsx3」を使うと便利です。
このライブラリは、簡単にテキストを音声に変換でき、速度や音声の種類も調整可能です。
プログラムにナレーションを追加したり、読み上げアプリを開発したりする際に活躍します。
本記事では、pyttsx3の基本的な使い方から、商用利用の可否や対応言語について詳しく解説します。
公式サイト:「Pyttsx3公式ページ」
- Pythonでテキスト読み上げ機能を実装したい人
- オフラインで動作する音声合成ライブラリを探している人
- 商用利用可能な音声合成ツールを検討している人
- Pythonでナレーション付きのアプリケーションを作成したい人
- 朗読ソフトや支援ツールを自作したい人
pyttsx3とは?
pyttsx3は、Python用のテキスト読み上げライブラリで、
コンピュータのローカルで音声合成を行います。
インストールは、コマンドプロンプト、ターミナルでできます。
pip install pyttsx3
WindowsではSAPI5、MacOSではNSSpeechSynthesizer、Linuxではespeakを使用しており、
さまざまなプラットフォームで簡単に利用できます。pyttsx
Windows | sapi5 |
Mac | nsss |
Linux | espeak |
また、音声速度や音量、性別の調整が可能で、カスタマイズ性が高い点も特徴です。
音声の読み上げ
テキストをリアルタイムで音声として再生できます。
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はオープンソースライブラリであり、商用利用も可能です。
ただし、音声エンジンに依存する部分もあるため、
合成音声エンジン自体のライセンス条件を確認する必要があります。
対応している言語は?
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()
Pythonの学習進め方
Pythonでできることは多岐に渡ります。
Pythonは強力で柔軟なプログラミング言語ですが、常に情報がアップデートされるので、
新しいライブラリやフレームワークを独学で学び続けることは困難です。
Udemyは動画で目的に応じた講座を受講できるのでレベルを合わせて学習できます。
購入した講座は再生・停止・スキップなどが可能なオンデマンド形式なので、
専門的な内容を自分のペースで独学できます。
Pythonでデータサイエンスや人工知能、GUIを学びたい人はUdemy学習を取り入れましょう。
数多くある講座の中から特におすすめな講座を5つ紹介します。
ビックセール開催中(10月11日まで)
対象のコースが1500円から(最大95%OFF)
Pythonをインストールから環境設定、基本文法が学習できる。さらに、モジュールの使い方やファイル操作の他に暗号化、並列化、インフラ自動化、キューイングシステム、非同期処理についても学べます。
Pythonの基礎を押さえつつ、人口知能やニューラルネットワーク、機械学習を取り扱う。機械学習ライブラリで文字認識や株価分析などを行う。
データサイエンティストになるために必要なツールについて学ぶことができる。統計分析、NumpyやPandasなどを使ったPythonのプログラミング、機械学習の実装、ディープラーニングの実装を学習できる。
PythonでGUIを作成する方法を取り扱う。Tkinterの発展的な操作まで学習できる。翻訳アプリ、家計簿アプリ、電卓アプリ、音楽再生アプリなど作成して、exeファイル化する。
解説
- モジュール名
「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は、テキストの読み上げから、音声ファイルの生成、プロパティの変更まで、幅広い用途に対応します。