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) # プログラムが終わると再生も終わるので、少し待つ