はじめに
皆さんは自分の音声で文章を読み上げてくれる機能が欲しくなったことがあるでしょうか?
ちなみに私はありません。
というのは置いておいて…今回はMicrosoftが発表した音声合成モデル VALL-E Xを試しに使ってみたいと思います。
VALL-E Xの面白いポイントはただ準備したテキストを読み上げてくれるのはもちろん、3~10秒程度の音声を準備することで再学習なしのzero-shotで思い通りの声色を生成できることです!(言い過ぎかもしれません)
ということで試してみます。
Install
今回はこちらのGitHub Repositoryを使わせていただきます。
インストールは以下で終わりです。
git clone https://github.com/Plachtaa/VALL-E-X.git
cd VALL-E-X
pip install -r requirements.txt
これ以外に、ffmpegを追加で入れる必要がありそうでした。
モデルのcheckpoint等のファイルは初回実行時に勝手にダウンロードされます。
Basic Generation
まずは通常の音声合成を試してみます。
from scipy.io.wavfile import write as write_wav
import utils
from utils.generation import SAMPLE_RATE, generate_audio, preload_models
text_prompt = "こんにちは。今日はいい天気ですね。"
save_file = "vallex_generation.wav"
preload_models()
audio_array = generate_audio(text_prompt)
write_wav(save_file, SAMPLE_RATE, audio_array)
試すとかわいらしい系の声で読み上げてくれます。
Voice Cloning
ではいよいよ自分の声で読み上げてもらいます。
from scipy.io.wavfile import write as write_wav
import utils
from utils.prompt_making import make_prompt
from utils.generation import SAMPLE_RATE, generate_audio, preload_models
# プロンプトの設定!
model_name = "test"
sample_voice = "sample.wav"
sample_transcript = "夜に吹く風のヒューヒューという音が私を不安にさせる。"
text_prompt = "こんにちは。今日はいい天気ですね。"
save_file = "vallex_cloning.wav"
preload_models()
# プロンプト追加!
make_prompt(name=model_name, audio_prompt_path=sample_voice, transcript=sample_transcript)
audio_array = generate_audio(text_prompt, language="ja", prompt=model_name)
write_wav(save_file, SAMPLE_RATE, audio_array)
先ほどのBasic Cloningとの差分はプロンプト作成部分です。
model_name
で好きなプロンプト名を指定し、sample_wav
で使用する音声ファイルのパスを、sample_transcript
で音声ファイル内の文字起こしを設定しています。
これで出力されたvallex_cloning.wavが自分の声で読み上げられた音声です。
所感としては不自然な読み方をするときもあるが、数回やっているうちに一回はいい感じのものが生成される印象でした。(おそらく生成時にランダムノイズ的なのを使っているため?実行ごとに結果が少し変わる)
とはいえ、zero-shotでここまでできるのか~と感じました。
ちなみに、text_promptを英語にして、generate_audioの引数のlanguageをenにすると英語でも読み上げてくれます。
まとめ
zero-shotでここまでできるのはすごい!
Qiitaってwavファイル貼れないのでしょうか?皆様も是非お手元でお試しください。