Pythonでテキストを音声に変換するパッケージがあったので使ってみました。
動画にナレーションをつけるときに活用できそうです。
pyttsx3をpipでインストールする
事前準備として、pyttsx3のパッケージをインストールしておきます。
pip install pyttsx3
でインストール可能です。
pyttsx3の詳しい内容は、https://github.com/nateshmbhat/pyttsx3 に記載されています。
テキストを読み上げさせる
pyttsx3を使ってテキストを読み上げさせていきます。
とりあえず読み上げさせる。
まずは、設定をすべてデフォルトで、何もいじらずに英語と日本語を話させてみます。
「engine.say(text)」でスピーカーから音声が流れます。
import pyttsx3
# オブジェクト生成
engine = pyttsx3.init()
engine.say("I will speak this text")
engine.say("この文章を読みます。")
engine.runAndWait()
私は、Windows11の環境で試していますが、機械的な音声で、英語はぎこちなく、日本語は自然な話し方のようです。
話すスピードを変えてみる
次にスピードを速くしてみます。
「.getProperty(‘rate’)」で読み上げのスピードのrateが取得できます。
「.setProperty(‘rate’, rate)」でスピードが変更できます。
rateは大きくすると早口になり、300だとかなりの早口です。
import pyttsx3
# オブジェクト生成
engine = pyttsx3.init()
#スピードのプロパティを表示
rate = engine.getProperty('rate')
print(rate)
#スピードを変更
rate = 300
engine.setProperty('rate', rate)
engine.say("I will speak this text")
engine.say("この文章を読みます。")
engine.runAndWait()
ボリュームの調整
ボリュームは「engine.getProperty(‘volume’)」で現在値が確認でき、
「engine.setProperty(‘volume’, volume )」で設定ができます。
0が最小、1が最大です。
import pyttsx3
# オブジェクト生成
engine = pyttsx3.init()
# ボリュームの表示
volume = engine.getProperty('volume')
print (volume)
# ボリュームの調整 0~1.0で調整
volume = 0.8
engine.setProperty('volume', volume )
engine.say("I will speak this text")
engine.say("この文章を読みます。")
engine.runAndWait()
音声を変えてみます
次に音声を変えてみます。「.getProperty(‘voices’)」で使用できる音声の種類が取得でき、「.setProperty(‘voice’, voices[0].id)」で設定ができます。
import pyttsx3
# オブジェクト生成
engine = pyttsx3.init()
#音声リストの取得
voices = engine.getProperty('voices')
for voice in voices:
print("*********")
print(voice.name)
print(voice.id)
# 音声リスト2番目を指定してそのIDを設定
engine.setProperty('voice', voices[1].id)
engine.say("I will speak this text")
engine.say("この文章を読みます。")
engine.runAndWait()
私の環境では、voicesの出力結果の2つでした。
*********
Microsoft Haruka Desktop - Japanese
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\TTS_MS_JA-JP_HARUKA_11.0
*********
Microsoft Zira Desktop - English (United States)
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\TTS_MS_EN-US_ZIRA_11.0
コードでは、「engine.setProperty(‘voice’, voices[1].id)」として2番目の「Microsoft Zira Desktop – English (United States)」という英語の音声を指定しました。
その結果、英語は流暢になりましたが、日本語の「”この文章を読みます”」の部分は音声が出力されませんでした。
読み上げた音声をファイルで出力させる
pyttsx3では、音声をファイルで出力することができます。
「engine.save_to_file(text , 保存パス)」でファイルに保存できます。
import pyttsx3
# オブジェクト生成
engine = pyttsx3.init()
# 音声をファイルで保存
text = "この文章を読みます。"
engine.save_to_file(text , 'test.wav')
engine.runAndWait()
8行目のファイルのパスでは拡張子を「wav」にしています。
冒頭のGitHubの記載では、下記のようにmp3で保存できるように記載されていましたが、私の環境ではmp3の出力はできませんでした。
"""Saving Voice to a file"""
# On linux make sure that 'espeak' and 'ffmpeg' are installed
engine.save_to_file('Hello World', 'test.mp3')
engine.runAndWait()
「’test.mp3’」のように拡張子をmp3とすると、ファイル名は「test.mp3」という名前でmp3の拡張子で出力されますが、中身はwavのファイルでした。
(chatGPTに聞いてみた結果を最後に載せておきました。)
上記の全部載せのコード
音声の変更、スピードの変更、ボリュームの変更を全て載せたコードを載せておきます。
import pyttsx3
# 初期化オブジェクト
engine = pyttsx3.init()
#音声リストの取得
voices = engine.getProperty('voices')
for voice in voices:
print("*********")
print(voice.name)
print(voice.id)
# 音声リスト1番目を指定してそのIDを設定
engine.setProperty('voice', voices[0].id)
#スピードのプロパティを表示
rate = engine.getProperty('rate')
print(rate)
#スピードを変更
rate = 150
engine.setProperty('rate', rate)
# ボリュームの表示
volume = engine.getProperty('volume') #getting to know current volume level (min=0 and max=1)
print (volume)
# ボリュームの調整 0~1.0で調整
volume = 1.0
engine.setProperty('volume', volume )
text='この文章を読みます。'
# テキストを読ませる
engine.say(text)
# 音声をファイルで保存
engine.save_to_file(text1 , 'test.wav')
# 実行
engine.runAndWait()
MP3で保存できなかった件をchatGPTに聞いてみた
MP3で保存しても中身がwavになっている件を、今話題のchatGPTに聞いてみました。
Pythonでpyttsx3のパッケージを使って生成されたmp3ファイルは拡張子がmp3ですが、中身はwavのようです。pyttsx3でMP3で保存する方法はありますか?
その結果、以下の回答をもらいました。
pyttsx3はテキストを音声に変換するためのPythonのパッケージで、音声を保存するファイル形式はwavファイル形式のみをサポートしています。そのため、pyttsx3でMP3形式で音声を保存することはできません。
しかし、PythonでMP3形式のファイルを生成するための他のパッケージがあります。例えば、PyDubというパッケージは、wav形式の音声ファイルをMP3形式に変換することができます。
chatGPT
GitHubには、「On linux make sure that ‘espeak’ and ‘ffmpeg’ are installed」という記載があるので環境によってはできるのかも知れませんが、MP3への変換は他のパッケージがフリーソフトで変換することにします。
コメント