Pythonで音声合成してみた (gTTSで2倍速バックグラウンド再生)

スポンサーリンク

gTTSを使って自分の欲しい音声合成処理ができたので、その備忘録です。

ネットで探せば簡単にgTTSを使ったサンプルは見つかるけど、発話がゆっくり過ぎてツライ・・・なので2倍速にして再生。
あと、mp3データをファイルに保存したくないので、ファイル保存なしバージョンも。
あと、再生が終わるまで待ちたくないので、再生終了を待たないバージョンも。


主な材料、環境

ハード: Raspberry Pi 3 model B
OS: Raspberry Pi OS (32bit)

家にあった適当なUSBオーディオ変換アダプタ

特価で250円ぐらいで買ったスピーカー


準備

必要に応じてパッケージインストール

pip install pydub gtts simpleaudio


gTTSで音声合成

mp3ファイルを作り、そのファイルを2倍速再生

from gtts import gTTS
from pydub import AudioSegment
from pydub.playback import play

gTTS(text='ピカチュー、エレキネット', lang='ja').save('tmp.mp3')
af = AudioSegment.from_mp3('tmp.mp3').speedup(playback_speed=2.0, chunk_size=50, crossfade=0)
play(af)


ファイルに保存せずに2倍速再生。再生完了まで待つ

こちらのコードを利用。(mp3データの再生を様々なパッケージで試してくれている)

from io import BytesIO
from gtts import gTTS
from pydub import AudioSegment
from pydub.playback import play

fp = BytesIO()
gTTS(text='ピカチュー、アイアンテーーーーーール', lang='ja').write_to_fp(fp)
fp.seek(0)
af = AudioSegment.from_file(fp, format="mp3").speedup(playback_speed=2.0, chunk_size=50, crossfade=0)
play(af)


ファイルに保存せずに2倍速再生。再生完了まで待たない

import time

import simpleaudio
from gtts import gTTS
from pydub import AudioSegment
from pydub.playback import play

fp = BytesIO()
gTTS(text='ピカチュー、1000万ボルト!', lang='ja').write_to_fp(fp)
fp.seek(0)
seg = AudioSegment.from_file(fp, format="mp3").speedup(playback_speed=2.0, chunk_size=50, crossfade=0)

simpleaudio.play_buffer(
    seg.raw_data,
    num_channels=seg.channels,
    bytes_per_sample=seg.sample_width,
    sample_rate=seg.frame_rate
)
time.sleep(3)  # プログラムが終わると再生も終わるので、少し待つ


www.sato-susumu.com