「テキストから音声を生成する方法:AIモデルBarkを使用する」
「音声合成へのテキスト変換:AIモデルBarkを使った手法」
紹介
Barkは、Suno.aiが作成したオープンソースの完全生成的なテキストから音声へのモデルであり、背景音、音楽、単純な効果音を含む非常にリアルな多言語音声を生成することができます。GPTスタイルのアーキテクチャに従い、与えられたスクリプトから予期せぬ方法で逸脱することができます。通常のテキスト読み上げ(TTS)エンジンは、ロボットのようで機械生成の単調な音声を生成します。Barkは、GPTスタイルのモデルを使用して非常にリアルで自然な声を生成し、実際の人間のように素晴らしい体験を提供します。
学習目標
- Barkモデルの基本的な使用法と機能、制限、アプリケーションについて学ぶ。
- Pythonコードを使用してテキストからオーディオファイルを生成する方法を学ぶ。
- NLTKとBarkライブラリを使用して大量の音声を生成する。
この記事は、データサイエンスブログマラソンの一環として掲載されました。
Barkのインストール
Barkの機能とアプリケーションを理解するために、Google Colabノートブックを使用しましょう。
Barkをインストールするには、コマンドpip install git+https://github.com/suno-ai/bark.gitを使用します。
- 「AIを使って顔のないYouTubeチャンネルを始めよう」
- 「DALL·E 3の最も優れた20の使用例とプロンプト」
- NVIDIAは、NTT DOCOMOと協力して世界初のGPU加速5Gネットワークを立ち上げます
pip install git+https://github.com/suno-ai/bark.git
注意:Suno.aiによって管理されていない異なるパッケージがインストールされる可能性のある’bark’を使用しないでください。
Barkを使用してオーディオを生成する
Barkは、英語、中国語、フランス語、ヒンディー語、ドイツ語などさまざまな言語をサポートしています。また、サポートされている言語のための複数の音声プロンプトを含むBarkスピーカーライブラリもサポートしています。こちらのスピーカーライブラリのリストをご確認ください。こちら。
Barkには、バックグラウンドノイズ、オーディトリウム、開始時の静寂などの事前定義されたタグ/ノートがあり、スピーカーの使用方法を理解するのに役立ちます。ユーザーの要件に基づいてこれらのタグを使用してPythonコードで適切なプロンプトを設定することができます。
以下のPythonコードは、選択したスピーカーに基づいてオーディオファイルを生成します。
from bark import SAMPLE_RATE, generate_audio, preload_models# import Audio to listen to generate audio array in notebook.from IPython.display import Audio
指定されたテキスト入力に対して、generate_audio関数は24kHzのサンプル周波数で出力としてnumpyオーディオ配列を返します。history_promptはスピーカーライブラリリストから選択したスピーカーを拾います。その後、モデルはScipyを使用して.wav形式のサウンドファイルを指定した場所に保存します。
# テキストを音声に変換する必要がある場合text_prompt1 = """8人乗りのリアージェット45機が木曜日に脱線しました。"""# テキストに対するオーディオnumpy配列を生成speech_array1 = generate_audio(text_prompt1, history_prompt="en_speaker_6")# ノートブックでテキストを再生するAudio(speech_array1, rate=SAMPLE_RATE)import scipyscipy.io.wavfile.write("bark_out1.wav", rate=SAMPLE_RATE,data=speech_array1)
Barkは、与えられたテキスト内のスクリプトを自動的に検出し、指定されていない場合は適切な言語のスピーカーで音声を生成します。ナレーター、男性、女性などの特定のスピーカープロンプトを使用して特定の音声スピーチを生成することもできますが、競合するオーディオ履歴プロンプトが指定されている場合は常に尊重されるわけではありません。
text_prompt2 = """woman: こんにちは、シャキーラ、元気ですか?"""speech_array2 = generate_audio(text_prompt2)# ノートブックでテキストを再生するAudio(speech_array2, rate=SAMPLE_RATE)
Barkを使用して非言語の音声を生成する
Barkは、研究とデモのために開発された完全生成的なテキスト読み上げモデルです。従来のアプローチとは異なり、入力テキストプロンプトは音素の中間使用なしで直接オーディオに変換されます。そのため、音声以外の任意の指示、例えば音楽の歌詞、効果音、非音声の音などにも一般化することができます。Barkを使用して笑い声、歌唱、ためらいの追加などの非言語コミュニケーションを行うこともできます。以下は、Barkを使用して生成できるいくつかの既知の非言語音声のリストです。
- [laughter]
- [laughs]
- [sighs]
- [music]
- [gasps]
- [clears throat]
- — または … ためのためらい
- ♪ 歌詞のための
- CAPITALIZATIONは単語の強調を示すための
- [MAN] および [WOMAN] は男性および女性のスピーカーに対してBarkのバイアスを示すための
Barkはあらゆる種類の音声を生成することができ、原則として音声と音楽の違いを認識しません。時にはBarkはテキストを音楽として生成することもありますが、歌詞の周りに音符を追加することで手助けすることができます。
話し言葉や音楽にためらいを生成するためのPythonコードは以下の通りです。
text_prompt3 = """私はインド料理が好きですが...時々とっても辛いです""" #... 話し言葉にためらいを生成します.speech_array3 = generate_audio(text_prompt3,history_prompt="en_speaker_4")# テキストを再生するnotebookAudio(speech_array3, rate=SAMPLE_RATE)
text_prompt4 = """ ♪ 5匹の小さなアヒルが一日中泳いでいました ♪"""speech_array4 = generate_audio(text_prompt4)# テキストを再生するnotebookAudio(speech_array4, rate=SAMPLE_RATE)
Barkは入力音声から音色、音程、感情などを含め、声を完全に複製する能力を持っています。しかし、既知の有名な声を使用し詐欺的で悪意のあるコンテンツを生成するために不正に使用される可能性があります。この倫理的な問題のため、元のBarkライブラリは、サポートされる各言語のためにSuno.aiが提供する一部の完全な合成オプションに制限を設けています。これらのスピーカープロンプトのリストは、Barkスピーカーライブラリに記載されています。
Barkを使用した長いセンテンスのオーディオ処理
Barkは出力音声の長さを13-14秒に制限しています。ですので、非常に長い入力テキストを与えると、テキストが分断されて14秒の出力のみが生成されます。BarkはGPTスタイルのモデルであり、最適化されたアーキテクチャでは、おおよそこの長さの音声のみを生成することができます。より長い音声を生成する場合は、必要なテキストをより小さな文に分割し、それぞれの文のために音声を生成し、これらの音声ファイルを組み合わせて全体の音声生成を行う必要があります。
Barkを使用して短編の音声を生成するためのステップバイステップのプロセスに従ってください。
ステップ1:NLTKライブラリを使用して長いテキストを文に分割し、文のリストを生成します。
story_1 = """ある日、ホームズとワトソンはロンドンでミステリーの事件を解決していました。""".replace("\n", " ")sentences = nltk.sent_tokenize(story_1)
ステップ2:Barkの音声生成関数を使用して、各文の音声ファイルを生成し、各文の後に1/4秒の無音を追加します。文ごとに音声を生成するためのforループを作成し、それに無音を追加します。
SPEAKER = "v2/ja_speaker_6"# 1/4秒の無音silence = np.zeros(int(0.25 * SAMPLE_RATE))pieces = []for sentence in sentences: audio_array = generate_audio(sentence,history_prompt=SPEAKER) pieces += [audio_array, silence.copy()]
ステップ3:生成されたオーディオファイルのシーケンスを連結し、全体の音声を再生できる1つのサウンドファイルを確認します。
Audio(np.concatenate(pieces), rate=SAMPLE_RATE)
最終的に連結されたオーディオファイルは、物語の全体の語りの良い音声クリップを生成します。
生成された音声の改善
与えられたテキストが短すぎる場合、Barkは自動的にプロンプトの最後に少し余分な音声を追加します。これにより、悪質なオーディオ出力が生成されます。以下に例を示します。
text_prompt5 = """ おい、友よ、何があったんだ?"""speech_array5 = generate_audio(text_prompt5,history_prompt="v2/ja_speaker_6")# テキストを再生するnotebookAudio(speech_array5, rate=SAMPLE_RATE)
上記のコードの出力:
上記のコードでは、単純な話し言葉の5秒間の音声が最後の3秒間が空白です。この問題を克服し、このようなケースのために良質な音声を生成するために、パラメータmin_eos_pを使用してみてください。このパラメータはgenerate_text_semantic関数においてBarkがテキストを生成するための閾値を調整します。この確率の閾値を下げることにより、テキストの生成を停止させ、余分な音声の問題を解決することができます。
生成された音声を改善するための手順は以下の通りです:
- generate_text_semantic関数を使用して、与えられたテキストから意味トークンを生成します。
- min_eos_pパラメータの値を0.05に減らします(デフォルト値は0.2です)。
- semantic_to_waveform関数を使用して、numpyオーディオ配列を生成します。
min_eos_pの確率閾値が低くなるため、テキスト生成が早期に停止し、2秒の小さなオーディオクリップが生成されます。詳細については、以下のリファレンスコードをご確認ください。
from bark.api import semantic_to_waveformfrom bark.generation import (generate_text_semantic,preload_models)semantic_token5 = generate_text_semantic(text_prompt5,history_prompt="v2/en_speaker_6", min_eos_p=0.05) # this controls how likely the generation is to endspeech_array6 = semantic_to_waveform(semantic_token5, history_prompt="v2/en_speaker_6")# play text in notebookAudio(speech_array6, rate=SAMPLE_RATE)
テキスト読み上げ技術の新興トレンド
従来のテキスト読み上げモデルは、ロボット的で機械的な単調な音声しか生成しなかったため、利用範囲が限られていました。最新のTTSモデルでは、深層学習アルゴリズムにより、人間の話し方やイントネーションを模倣することができます。技術の進歩により、感情TTS、歌唱TTS、多言語対応TTS、音声クローンなど、より魅力的で自然な人間の話し声を模倣するアプリケーションを作成することが可能になりました。
結論
BarkはオープンソースのGPTスタイルのテキスト読み上げモデルで、さまざまな応用が可能です。Barkの使用例には、多言語のオーディオブックやポッドキャストの作成、テレビ番組やビデオゲームの効果音の生成などがあります。自然な音声出力、複数話者による対話、音楽制作が必要なケースに非常に役立ちます。Barkは高度にリアルな人間らしい声を生成することを重視しているため、時にはオーディオに余分な背景音楽やノイズが生成されることがあります。使用目的に不要な場合は、外部の編集ツールやソフトウェアを使用してこのノイズを除去することができます。
要点
- Barkは高度にリアルな生成モデルであり、人間のような自然な音声出力を生成します。
- 笑ったり泣いたり、音楽などの効果音を生成するなど、ユニークなモデルです。
- Barkを使用して高品質な音声を生成するには、オーディオのフォーマット技術や閾値パラメータの調整が必要です。
よくある質問
この記事で紹介されているメディアはAnalytics Vidhyaの所有ではなく、著者の裁量により使用されています。
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles