Как генерировать аудио с использованием модели искусственного интеллекта Text-to-Speech Bark

Как создавать аудио с помощью модели искусственного интеллекта Text-to-Speech Bark

Введение

Bark – это открытая модель текст-в-аудио, разработанная Suno.ai, которая может генерировать высокореалистичную, многоязычную речь включая фоновой шум, музыку и простые звуковые эффекты. Она следует архитектуре GPT, способной отклоняться в неожиданных направлениях от заданного скрипта. Обычные движки текст-в-речи (TTS) создают роботизированные и машинные монотонные звуки. Bark генерирует высокореалистичные и естественно звучащие голоса, используя модели в стиле GPT, и дарит потрясающие ощущения, как если бы вы слушали реальных людей.

Цели обучения

  • Узнать о базовом использовании и функциональности модели Bark, ее ограничениях и приложениях.
  • Научиться генерировать аудиофайлы из текста с помощью кода на Python.
  • Создание больших аудиозаписей с использованием библиотеки NLTK и Bark на языке Python

Эта статья была опубликована в рамках Data Science Blogathon.

Установка Bark

Давайте использовать блокнот Google Colab, чтобы разобраться в функциональности и применении Bark.

Чтобы установить Bark, воспользуйтесь командой pip install git+https://github.com/suno-ai/bark.git.

pip install git+https://github.com/suno-ai/bark.git

Примечание: Не используйте ‘pip install bark’, так как это устанавливает другой пакет, не управляемый Suno.ai.

Генерация аудио с помощью 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 вернет массив аудио numpy на выходе с частотой дискретизации 24кГц. Исторический промпт выбирает выбранного говорящего из списка библиотеки голосов. Затем модель использует Scipy для сохранения звукового файла типа .wav в желаемом месте для дальнейшего использования.

# Текст, который нужно преобразовать в речьtext_prompt1 = """Самолет Learjet 45 с восьмерыми людьми на борту съехал с трассы в четверг"""# генерирование массива аудио для заданного текста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 = """женщина: Привет Шакира, как ты?"""speech_array2 = generate_audio(text_prompt2)# проиграть текст в блокнотеAudio(speech_array2, rate=SAMPLE_RATE)

Генерация невербальной речи с помощью Bark

Bark – это полноценная генеративная модель текст-в-речь, разработанная для исследований и демонстрационных целей. В отличие от предыдущих подходов, входной текстовый промпт преобразуется непосредственно в аудио без использования промежуточных фонем. Он может обобщать произвольные инструкции наряду с речью, такие как тексты песен, звуковые эффекты или другие звуки, не относящиеся к речи. Пользователи также могут создавать невербальные выражения с помощью Bark, такие как Смех, пение, добавление нерешительности и т. д. Ниже приведен список некоторых известных невербальных звуков, которые можно создать с помощью Bark.

  • [смех]
  • [смешки]
  • [вздохи]
  • [музыка]
  • [вздохи]
  • [очищает горло]
  • – или … для нерешительности
  • ♪ для текстов песен
  • ЗАГЛАВНЫЕ БУКВЫ для выделения слова
  • [MAN] и [WOMAN] для установки предпочтения говорящего мужского и женского пола соответственно

Барк может генерировать все виды звуков и, в принципе, не различает речь и музыку. Иногда Барк выбирает генерировать текст в виде музыки, но вы можете помочь ему, добавив музыкальные ноты вокруг ваших текстов.

Проверьте ниже приведенный код на Python для генерации колебания в речи и музыке.

text_prompt3 = """Мне нравится индийская еда, но ... иногда она очень острая"""            #... добавляет колебание в речи.speech_array3 = generate_audio(text_prompt3,history_prompt="en_speaker_4")# play text in notebookAudio(speech_array3, rate=SAMPLE_RATE)

text_prompt4 = """    ♪ 5 маленьких утят отправились плавать однажды ♪"""speech_array4 = generate_audio(text_prompt4)# play text in notebookAudio(speech_array4, rate=SAMPLE_RATE)

Барк имеет возможность полностью клонировать голоса, включая тон, высоту, эмоции и т. д. из входного аудио. Он может быть злоупотреблен для создания речи, используя известные, знаменитые голоса и генерируя фальшивое, вредоносное содержимое. Из-за этой этической проблемы оригинальная библиотека Барк ограничивает историю аудио-подсказок набором синтетических опций, предоставляемых Suno.ai для каждого поддерживаемого языка. Список этих подсказок для говорящих приведен в библиотеке говорящих Барка.

Обработка аудио с большим предложением с помощью Барка

Барк ограничивает длину речи до 13-14 секунд. Так что, если вы даете ему очень длинный вводной текст, он разобьет его и произведет вывод только на 14 секунд. Так как Барк – это модель в стиле GPT, его оптимизированная архитектура может произвести речь примерно такой длины. Для генерации более длинной аудиозаписи, вам нужно разделить необходимый текст на более короткие предложения. Затем создайте аудио для каждого из них и объедините все такие аудиофайлы для получения общего аудио.

Следуйте приведенному ниже пошаговому процессу для генерации аудиоречи короткого рассказа с помощью Барка.

Шаг 1: Используйте библиотеку NLTK для разделения длинного текста на предложения и создания списка предложений.

story_1 = """Жил-был заяц, который был другом черепахи. Однажды он предложил черепахе состязаться в гонке. Увидев, как медленно двигалась черепаха, заяц подумал, что выиграет легко. Поэтому он вздремнул, а черепаха продолжала двигаться. Когда заяц проснулся, он увидел, что черепаха уже была у финишной черты. К удивлению зайца, черепаха выиграла гонку, пока он спал.""".replace("\n", " ")sentences = nltk.sent_tokenize(story_1)

Шаг 2: Создайте аудиофайлы для каждого предложения с помощью функции генерации аудио Барка и добавьте четверть секунды тишины после каждого предложения. Создайте цикл for для генерации аудио для предложения, а затем добавьте в него тишину.

SPEAKER = "v2/en_speaker_6"# четверть секунды тишины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: Сцепите последовательность созданных аудиофайлов, а затем проверьте полученный звуковой файл, чтобы прослушать полную речь.

Audio(np.concatenate(pieces), rate=SAMPLE_RATE)

Окончательный объединенный аудиофайл создает хороший голосовой клип, рассказывающий всю историю.

Улучшение генерируемой речи

Если данная текст слишком короткий, Барк самостоятельно добавит немного дополнительного аудио в конце подсказки. Это приводит к генерации плохого звукового вывода. Вот пример.

text_prompt5 = """   что случилось, мой друг?"""speech_array5 = generate_audio(text_prompt5,history_prompt="v2/en_speaker_6")# play text in notebookAudio(speech_array5, rate=SAMPLE_RATE)

Результат выполнения вышеприведенного кода:

В приведенном выше коде, сгенерированный 5-секундный аудиозапись для простой речи имеет последние 3 секунды пустыми. Чтобы преодолеть эту проблему и сгенерировать качественное аудио для таких случаев, попробуйте использовать параметр min_eos_p. Этот параметр в функции генерации текстового семантического значения адаптирует порог Барка для генерации текста. Понизив этот порог вероятности, мы можем остановить генерацию текста и решить проблему добавленного дополнительного аудио.

Вот шаги, которые нужно выполнить, чтобы улучшить сгенерированное аудио:

  1. Используйте функцию generate_text_semantic для генерации семантических токенов из заданного текста.
  2. Уменьшите значение параметра min_eos_p до 0,05 (стандартное значение 0,2).
  3. Используйте функцию 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 могут имитировать речевые образцы и интонацию человека. Благодаря продвинутым технологиям возможно создание более привлекательных и естественных приложений, таких как эмоциональная речь, пение, многоязыковая речь, клонирование голоса и т.д.

Заключение

Bark – это модель генерации текста в речь в стиле GPT с открытым исходным кодом, которая имеет множество применений. Bark используется для создания многоязычных аудиокниг и подкастов, а также для генерации звуковых эффектов для телешоу, видеоигр и т.д. Он особенно полезен в случаях, когда требуется генерация естественного звучания, многоговорочной беседы или создания музыки. Поскольку Bark фокусируется на генерации высоко реалистичных голосов, иногда в аудио генерируется дополнительная фоновая музыка/шум. Если это нежелательно для требуемого случая использования, этот шум можно удалить с помощью некоторых внешних инструментов и программного обеспечения для редактирования.

Основные выводы

  • Bark – это высокореалистичная генеративная модель, которая генерирует звуки, звучащие похоже на человеческие.
  • Это уникальная модель, которая может производить звуковые эффекты, такие как смех, плач и музыка.
  • С помощью Bark вы можете генерировать качественную речь с использованием техник аудиоформатирования и настройки пороговых параметров.

Часто задаваемые вопросы

Материал, показанный в этой статье, не принадлежит Analytics Vidhya и используется по усмотрению автора.