今日はPythonを使って、YouTubeでよく見かける人気キャラクター「ずんだもん」に喋ってもらいましょう。この記事では、VOICEBOX というすごいソフトウェアを使って、簡単にずんだもんの声を再現する方法をご紹介します。
VOICEBOXのセットアップ
まずは、PythonからVOICEBOXを利用するために、UIを使わないバージョンのvoicevox_engine をインストールしましょう。Dockerイメージが配布されているので、以下のDockerコマンドで簡単に起動できます。
docker run --rm -p '127.0.0.1:50021:50021' voicevox/voicevox_engine:cpu-ubuntu20.04-latest
このコマンドを実行すると、50021ポートでVOICEBOXのAPIが立ち上がります。次に、PythonからこのAPIを利用してみましょう。
Pythonクライアントの作成
Pythonクライアントは以下のように実装します。
from threading import Lock
import requests
from playsound import playsound
import wave
import pyaudio
import time
import urllib.parse
import os
def playwav(file):
# wavファイルの読み込み
with wave.open(file, 'rb') as f:
# PyAudioのインスタンスを生成
p = pyaudio.PyAudio()
# Streamを開く
stream = p.open(format=p.get_format_from_width(f.getsampwidth()),
channels=f.getnchannels(),
rate=f.getframerate(),
output=True)
# チャンクサイズを設定
chunk_size = 1024
# wavファイルを再生
data = f.readframes(chunk_size)
while data:
stream.write(data)
data = f.readframes(chunk_size)
time.sleep(0.5) # 0.5s待つ これがないと文末が途切れる
# StreamとPyAudioインスタンスを終了
stream.stop_stream()
stream.close()
p.terminate()
def voicebox_speech(text):
mutex_lock = Lock()
query = {
'speaker': 1,
'text': text
}
response = requests.post(
'http://127.0.0.1:50021/audio_query?' + urllib.parse.urlencode(query))
query = response.content
headers = {'Content-Type': 'application/json'}
response = requests.post(
'http://127.0.0.1:50021/synthesis?speaker=1', data=query, headers=headers)
with mutex_lock:
with open('audio.wav', 'wb') as f:
f.write(response.content)
playwav("audio.wav")
os.remove("audio.wav")
return True
voicebox_speech("こんにちは、ずんだもんです")
これでPythonクライアントが完成しました。voicebox_speech
関数に喋らせたいテキストを渡すだけで、ずんだもんの声が再生されます。PCの音量を上げて、ぜひお楽しみください。
まとめ
この記事では、VOICEBOXを使ってPythonで簡単にずんだもんの声を再現する方法をご紹介しました。VOICEBOXは非常に使いやすく、Pythonから簡単にアクセスできるため、様々な用途で活用できます。ずんだもんの声を使って楽しいプロジェクトを作ってみてくださいね。