Pythonでテキストの読み上げ、音声ファイルの作成をやってみた。(pyttsx3)

テーマはPythonのpyttsx3 pythonの話

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への変換は他のパッケージがフリーソフトで変換することにします。

コメント

タイトルとURLをコピーしました