Pythonでも音声読み上げしてもらいたい
動機
家事をしている最中、YouTubeをラジオ感覚で聞いているのですが、動画コンテンツはやはりビジュアルがメインなので、音声だけだと得られる情報が限られてしまいます。物足りないですし、製作者にも失礼だなと常々思っておりました。テキストベースの媒体であればその問題が解消されます。特に、個人的に興味のあるジャンルのニュース記事やブログ記事ならば、情報収集もでき、また再生時間もさほど長くありません。
優れた読み上げツールは世に存在しますし、読み上げ機能のあるブラウザや、拡張機能で読み上げ機能を付与することもできますが、暇だしPythonでやってみよう… という試みです。今回は pyttsx3 という有名なライブラリを使って実装しました。
pyttsx3の概要とインストール方法
- オフラインで動作するため、インターネット接続が必要がない。
- Windows、macOS、Linuxで動作します。
- テキストを音声で読み上げることができます。
ライブラリのインストール
以下のコマンドをターミナルやコマンドプロンプトで実行して、pyttsx3をインストールしてください。
pip install pyttsx3
pyttsx3を使った読み上げPythonスクリプト例
import pyttsx3
def read_text(text):
# エンジンの初期化
engine = pyttsx3.init()
# テキストを読み上げる
engine.say(text)
# 読み上げを実行
engine.runAndWait()
if __name__ == "__main__":
# textに読み上げたいテキストを入力する。
text = "こんにちは、Pythonで音声を読み上げています。"
read_text(text)
スクリプトに名前を付けて保存したら、コマンドプロンプトから実行して読み上げが正常に行われているか確認します。
読み上げのカスタマイズ
pyttsx3では、音声の速度や音量、音声の種類などを調整できます。
1. 音声の速度を変更
音声の速度(読み上げのスピード)は、rateプロパティを使って調整できます。デフォルトは200程度となっており、0に近づくほど遅くなります。
engine.setProperty('rate', 150) # 速度を150に設定
2. 音量を変更
音量は、volumeプロパティを使って調整できます。値は0.0(無音)から1.0(最大音量)まで設定可能で、デフォルトは1.0です。
engine.setProperty('volume', 0.9) # 音量を0.9に設定
3. 声の種類を変更
voicesプロパティを使用して、音声の種類を切り替えることができます。voices[0].idは中性的な日本語の音声、voices[1].idは女性声で英語のみを読み上げます(日本語は無視)。
# 利用可能な声の一覧を取得し、表示する
voices = engine.getProperty('voices')
print(voices)
# 英語を読み上げる場合は voices[1].idを指定する
engine.setProperty('voice', voices[1].id)
カスタマイズした読み上げスクリプト
import pyttsx3
def read_text(text):
# エンジンの初期化
engine = pyttsx3.init()
# 読み上げ速度を設定
engine.setProperty('rate', 150)
# 音量を設定
engine.setProperty('volume', 0.9)
# 声を英語に変更
voices = engine.getProperty('voices')
engine.setProperty('voice', voices[1].id)
# テキストを読み上げる
engine.say(text)
# 読み上げを実行
engine.runAndWait()
if __name__ == "__main__":
# 読み上げたいテキスト
text = "Hello! Reading English out loud with Python."
read_text(text)
おわりに
Pythonでも pyttsx3 を使うことで、指定した文字列を音読するツールを簡単に作成可能できました。このライブラリのいいところは、インターネットに接続せずにローカル環境でテキストを音声に変換できます。また、音声の速度や音量、声の種類も簡単にカスタマイズできます。
Discussion