LoginSignup
7
5

音声生成AI「OpenVoice」と音声データセット「moe-speech」を使って好きなキャラクター音声を合成する

Last updated at Posted at 2024-03-02

OpenVoiceとは

OpenVoiceは、リファレンススピーカーの短い音声だけで、その声を複製し、多言語の音声を生成することができる、音声クローニングツールです。

OpenVoiceは、リファレンススピーカーの声色を再現するだけでなく、感情、アクセント、リズム、ポーズ、イントネーションなどの音声スタイルをきめ細かく制御することができます。

また、OpenVoiceは、トレーニングセットに含まれていない言語に対しても、ゼロショットのクロスリンガル音声クローニングを実現します。

(引用元:https://research.myshell.ai/open-voice)

中国語と英語であれば、こちらから気軽に試すことができます。

また、ソースコードはこちらにあります。

Hugging FaceのUI上では、日本語の音声合成が出来ないため、この記事では上のGithubリポジトリ内にあるノートブックを使って、クロスリンガル音声クローニングを行います。

OpenVoiceの仕組みとしては、以下の図解のようになっているようです。

image.png

  1. アクセントや感情、イントーネーションをコントロールしたベーススピーカーの音声を合成
  2. ベーススピーカーのトーンカラー(声色)を抽出
  3. リファレンススピーカーのトーンカラー(声色)を抽出
  4. ベーススピーカーの音声からベーススピーカーの声色のみを消去し、リファレンススピーカーの声色を当てはめる

このようなことを行っていると筆者は解釈しました。

なお、クロスリンガルの音声クローニング(demo_part2.ipynb)では、少し異なります。
1.の部分で、感情等をコントロールすることができません。ベーススピーカーの合成にOpenAIのTTS(Text-to-Speech)を用いているためです。場合によっては自ら録音した音声を用いても良いかもしれません。

moe-speechとは

  • 日本人プロ声優による高音質でノイズ・BGM等無しのキャラクター音声データセット(男性・女性キャラクター両方含む)
  • 1音声は2-15秒のモノラル44.1kHz 16bit wavファイル
  • キャラクターごとにフォルダ分けされている(各キャラクターは匿名化され、ランダムな8文字の英数字による識別子を持つ)
  • 現在は合計473キャラクター、約39万の音声ファイル、合計約623時間、184GBの音声が含まれる
  • TTS等のタスクに使える質になるよう、機械的に音声の質によりフィルタリング済み

(引用元:https://huggingface.co/datasets/litagin/moe-speech?not-for-all-audiences=true)

今回やること

ざっくり言うと、OpenVoiceのリファレンススピーカーとして、moe-speechの好きな音声を使おうということです。

Amazon PollyやOpenAI TTSは、なかなか流暢な日本語を生成してくれますが、キャラクター(声質)が限られているため、ボイスコミックやオーディオブックを作るには不十分という感じでした。

moe-speechの豊富なデータセットがあれば、狙い通りのキャラクター音声を生成できる可能性が高まります。

こちらの、Obtain Tone Color Embeddingのところを、以下のように書き換えましょう。

base_speaker = f"{output_dir}/openai_source_output.mp3"
source_se, audio_name = se_extractor.get_se(base_speaker, tone_color_converter, vad=True)

#reference_speaker = 'resources/example_reference.mp3' ←元のコード
reference_speaker="../moe-speech/data/1ba0d17b/wav/1ba0d17b_010.wav"
target_se, audio_name = se_extractor.get_se(reference_speaker, tone_color_converter, vad=True)

reference_speakerのパスを、ダウンロードしてきたmoe-speechデータセットの任意の音声ファイルのパスに書き換えます。

そして、その下のtext=[]の中に、生成したい日本語を入れましょう。リストですが、一つだけ入れれば良いです。

以下の文章を入れてみました。桃太郎の冒頭です。

むかしむかし、あるところに、おじいさんとおばあさんが住んでいました。  
おじいさんは山へ芝刈りに、おばあさんは川へ洗濯に行きました。

以下にいくつか、リファレンスとクローニングの結果を挙げます。

1)男性

2)女性

ちなみに、同じリファレンスでも試行ごとにクローニングの結果は少し異なります。声質というよりアクセントや速度が変わっています。

いかがでしょうか?多少変わってしまってはいますが、同じ系統であることは確かなようです。

リファレンススピーカーを変えればいくらでも違うキャラクターの音声を生成できるので、オーディオドラマやボイスコミックへの応用が期待出来ます。

7
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5