アルの備忘録

本棚が足りずにいいものを探しているがなかなか見つからないので困ってる雑記ブログ

【pyttsx3】Pythonの音声読み上げ機能で「寿限無」を読ませてみた!


 

juliusを使って音声認識が動くのは確認できました。

PythonでJuliusを動かして音声認識システム作ってみた! - アルの備忘録
www.matematetea.com

 

次はPythonで音声読み上げができないだろうかと思っていたら、

pyttsx3を使えば、たった3行で実装できるらしい。

 

それを使って寿限無を読ませてみました!

 




pyttsx3とは

pyttsx3はテキスト読み上げ変換ライブラリです。

py = python

tts = text to speech

x3 = wakaranai

pyttsx3 · PyPI

pypi.org

 

音声読み上げ機能の実装

まずは3行で実装してみます!

手順も簡単です。

pyttsx3のインストール

次のコマンドでpyttsx3をインストールします。


pip install pyttsx3

pyttsx3の実装

3行といっていますが、importは3行に含めていないです。。。

import pyttsx3

engine = pyttsx3.init()
engine.say("音声読み上げライブラリ")
engine.runAndWait()

 

これで動かしてみると「音声読み上げライブラリ」と読み上げてくれます!

けっこういいですね!

 

英語を読み上げる場合

日本語だけでなく、英語でもテキストを読み上げてくれるらしいので試してみます。

import pyttsx3

engine = pyttsx3.init()
# ここで英語を指定する
voices = engine.getProperty('voices')
engine.setProperty("voice", voices[1].id)
engine.say("I will speak this text")
engine.runAndWait()

日本語でもそうですが、超早口ですね。

 

速度の調整

次はテキストを読み上げる速度を調整してみます。

import pyttsx3

engine = pyttsx3.init()
voices = engine.getProperty('voices')
engine.setProperty("voice", voices[1].id)
# ここで速度を調整する
rate = engine.getProperty('rate')
engine.setProperty('rate', rate-50)
engine.say("I will speak this text")
engine.runAndWait()

 

だいぶゆっくりになりましたね。これくらいがちょうどいいかも。

 

音声ファイルの保存

読み上げてくれた音声を録音することができます。

ファイル名を指定してmp3で同階層に保存されます。

import pyttsx3

engine = pyttsx3.init()
voices = engine.getProperty('voices')
engine.setProperty("voice", voices[1].id)
rate = engine.getProperty('rate')
engine.setProperty('rate', rate-50)
# english.mp3というファイル名を指定して録音する
engine.save_to_file("I will speak this text", 'english.mp3')
engine.say("I will speak this text")
engine.runAndWait()

 

寿限無を読ませてみる

短い単語よりも長い文章を読ませてみたい!

そこで寿限無の一節を読ませてみました。テキストはこちら。

 

和尚の書いてくれた紙を熊さんは読み上げる。「ええー、寿限無寿限無、五劫のすり切れ、海砂利水魚の水行末、雲来末、風来末、食う寝るところに住むところ、やぶらこうじのぶらこうじ、パイポパイポ、パイポのシューリンガン、シューリンガンのグーリンダイ、グーリンダイのポンポコピーのポンポコナの長久命の長助、うーん、こう並べてみるとみんなつけてえ名前ばかりですねえ」

# -*- coding: UTF-8 -*-
import pyttsx3

engine = pyttsx3.init()
rate = engine.getProperty('rate')
engine.setProperty('rate', rate-50)
text = "和尚の書いてくれた紙を熊さんは読み上げる。「ええー、寿限無寿限無、五劫のすり切れ、海砂利水魚の水行末、雲来末、風来末、食う寝るところに住むところ、やぶらこうじのぶらこうじ、パイポパイポ、パイポのシューリンガン、シューリンガンのグーリンダイ、グーリンダイのポンポコピーのポンポコナの長久命の長助、うーん、こう並べてみるとみんなつけてえ名前ばかりですねえ」"
engine.say(text)
engine.runAndWait()

 

いざ実行!!!

 

 

いい感じに機会が読み上げてくれました。

実行してみて面白いのが、漢字の読み方。

「寿限無」「ことぶきかぎりむ」

「海砂利水魚」「みじゃりすいぎょ」

「雲来末」「くもくまつ」

「風来末」「かぜらいまつ」

 

特に漢字の読み間違いは辞書データなどを作成して精度高くできないのだろか

pyttsx3でもっと楽しめそうですね!

 

最後まで読んでいただき、ありがとうございます!