Руководство по эксплуатации Audiogram
О продукте
Audiogram – это сервис на базе нейронных сетей и методов машинного обучения для распознавания и синтеза речи. Audiogram позволяет выполнять:
-
Синхронное распознавание речи. В этом случае сервис получает запрос с аудиофайлом, который необходимо расшифровать, и возвращает распознанный текст. Данный способ выполняется последовательно и считается наиболее точным. Подходит, например, для расшифровки телефонных разговоров.
-
Асинхронное (отложенное) распознавание речи. Этот способ позволяет распознавать крупные аудиофайлы (размером до 1 ГБ) за период до 8 часов. Необходимо сохранить аудиофайл в s3-хранилище, а затем отправить в Audiogram запрос на отложенное распознавание, содержащий путь к аудиофайлу и параметры распознавания. Во время распознавания можно проверить статус или отменить задачу. Когда распознавание будет закончено, Audiogram сохранит результаты распознавания в s3 рядом с аудио.
-
Потоковое распознавание речи. В случае потокового распознавания устанавливается соединение с Audiogram, по которому речь говорящего отправляется на распознавание частями в режиме online. Сервис возвращает результаты расшифровки по мере обработки. Данный способ подходит, например, для создания голосовых помощников или субтитров к видео.
-
Синхронный синтез речи. При синхронном синтезе запрос к Audiogram содержит текст, который необходимо озвучить, и дополнительную информацию по голосу, частоте дискретизации и кодировке. В ответ возвращается аудиофайл с озвученным текстом. Этот способ может использоваться, например, для озвучивания книг.
-
Потоковый синтез речи. При потоковом синтезе текст отправляется в Audiogram и озвучивается по частям. Потоковый синтез подходит, например, для создания ответных реплик голосовых помощников, так как позволяет достичь эффекта живого общения без неестественных пауз.
-
Сбор аудиоартефактов. Аудиофайлы, поступающие в Audiogram на распознавание речи, сохраняются в отдельном хранилище и могут быть использованы для обучения и усовершенствования ML-моделей, отвечающих за расшифровку речи.
-
Управление клиентами и просмотр статистики. Это можно сделать с помощью удобного веб-клиента в любом браузере.
Термины в документе
-
Audiogram (также Продукт, Система) – сервис, выполняющий услуги по распознаванию речи (превращению аудиозаписей с речью в текст) и синтезированию речи (озвучиванию текстов).
-
ASR (Automatic Speech Recognition) – запрос на распознавание речи.
-
TTS (Text-to-Speech) – запрос на синтезирование речи.
-
ML-модель (также нейросеть, искусственный интеллект) – программа, обученная распознаванию определенных типов закономерностей, которая используется в Audiogram для автоматизации и ускорения выполнения запросов на синтез и распознавание речи. В Audiogram используются различные ML-модели (в зависимости от типа запроса и деталей запросов).
-
Бот (также чат-бот, электронный помощник) – программа, отвечающая на запросы пользователей и имитирующая живое общение между людьми.
Демонстрация Audiogram
Вы можете бесплатно попробовать отправить какой-нибудь текст на озвучку или аудиофайл на распознавание, используя демонстрационную форму Audiogram, которая доступна на основной странице продукта.
Варианты поставки Audiogram
Возможны 2 варианта поставки Audiogram:
-
SaaS: Audiogram установлен в облаке MTS AI. Доступ к сервису осуществляется через подключение по API (gRPC).
-
On-premise: Audiogram развернут и функционирует в инфраструктуре заказчика.
Справочник API
Синхронное распознавание речи
Распознавание речи - это процесс преобразования аудио в текст. Синхронное распознавание речи работает следующим образом - вы отправляете в Audiogram запрос с аудио, речь из которого необходимо распознать, а в ответ получаете результаты распознавания.
Синхронное распознавание бывает 2 видов:
-
потоковое: В этом случае между клиентским приложением и Audiogram устанавливается соединение. Речь поступает на распознавание частями (чанками), по мере записи аудиосигнала. Audiogram выполняет и возвращает результаты распознавания также по частям. Чаще всего потоковое распознавание используется для создания голосовых помощников.
-
файловое синхронное: клиентское приложение отправляет в Audiogram запрос с файлом, речь из которого надо распознать. Audiogram выполняет распознавание и возвращает результат в ответе на запрос. Файловое синхронное распознавание используют, когда необходимо транскрибировать речь из небольших аудиофайлов, записанных заранее.
Для работы с Audiogram Заказчикам предлагается gRPC контракт (proto-файлы), который можно использовать, например, для создания собственного клиентского приложения.
Важно! Есть 2 вида gRPC контрактов:
-
Через полную конфигурацию запроса: позволяет самостоятельно настраивать все параметры распознавания речи.
-
Через пресеты: под Заказчика заранее создается конфигурация распознавания речи (пресет), которая скрывает все настройки. Этот вид контракта позволяет пользователям избежать непреднамеренных ошибок конфигурации.
В следующих секциях подробнее рассмотрим эти контракты.
Через полную конфигурацию запроса
Для создания клиентского приложения, которое будет отправлять в Audiogram запросы на распознавание речи через полную конфигурацию настроек, вам понадобятся следующие .proto-файлы:
Основной контракт:
- stt_v3.proto - основной контракт, по которому происходит распознавание речи.
Зависимости:
- stt_response.proto - конфигурация ответа на запрос на распознавание речи.
- response_header.proto - структура, содержащая временную метку ответа сервиса; позволяет отследить сетевые задержки.
Примечание 1: Для создания собственного клиентского приложения можно использовать любой язык программирования, который есть в библиотеке для работы с gRPC. Подробную информацию об этом протоколе можно посмотреть на https://grpc.io
Примечание 2: Максимальная длина сообщения, принимаемого от клиентских приложений по gRPC (в байтах): 62914560
stt_v3.proto
Методы
FileRecognize
Выполняет распознавание речи в файловом режиме.
| Имя метода | Тип запроса | Тип ответа | Описание |
|---|---|---|---|
| FileRecognize | FileRecognizeRequest | mts.ai.audiogram.stt_response.v1.FileRecognizeResponse | Метод распознавания аудиофайла целиком. Ожидает аудиофайл, в этом же соединении возвращает результат и закрывает соединение. |
Recognize
Выполняет распознавание речи в потоковом режиме.
| Имя метода | Тип запроса | Тип ответа | Описание |
|---|---|---|---|
| Recognize | stream RecognizeRequest | stream mts.ai.audiogram.stt_response.v1.RecognizeResponse | Этот метод позволяет проводить распознавание речи в потоковом режиме. Клиент устанавливает соединение с Audiogram и отправляет аудио на распознавание по кускам (чанками). Рекомендуется делать длительность чанка от 250 до 500 миллисекунд (мс). Распознавание проходит по мере поступления аудиоданных и заканчивается, когда поток закрывается клиентом. |
GetModelsInfo
Запрашивает список моделей для распознавания речи.
| Имя метода | Тип запроса | Тип ответа | Описание |
|---|---|---|---|
| GetModelsInfo | google.protobuf.Empty | ModelsInfo | Метод запроса списка моделей для распознавания речи. Ничего не принимает в качестве аргументов, возвращает список доступных моделей. |
Сообщения PROTOBUF
FileRecognizeRequest
Запрос на распознавание аудио в файловом режиме.
| Поле | Тип | Описание |
|---|---|---|
| config | RecognitionConfig | Конфигурация распознавания. |
| audio | bytes | Аудио для распознавания. |
RecognizeRequest
Запрос на распознавание аудио в потоковом режиме.
Первое сообщение типа RecognizeRequest должно содержать данные в поле «config» и не должно содержать данные в поле «audio». Все последующие сообщения RecognizeRequest, наоборот, не должны иметь данных в поле «config», а в поле «audio» передаются аудиоданные. Аудиобайты должны быть закодированы, как указано в RecognitionConfig.
| Поле | Тип | Описание |
|---|---|---|
| config | StreamRecognitionConfig | Конфигурация распознания. |
| audio | bytes | Аудиофрагменты для распознания. При распознавании речи в потоковом режиме Audiogram принимает аудио по кускам (чанками). Рекомендуется делать чанки длительностью от 250 до 500 миллисекунд. |
SubstitutionDictionaryConfig
Конфигурация подключения словарей автозамены (нормализации текста), которые корректируют финальный текстовый результат распознавания.
При распознавании речи модель иногда расшифровывает слова буквально (на слух), либо допускает специфические ошибки в названиях брендов, аббревиатурах или профессиональном сленге. Словарь автозамены принудительно меняет «сырой» текст на правильный (например, трансформирует услышанное "эм тэ эс" в "МТС").
Существует два способа добавить замены через dictionary_name (рекомендуемый) и dictionary_data.
| Поле | Тип | Описание |
|---|---|---|
| dictionary_name | string | Словарь автозамены передается по имени. |
| dictionary_data | string | Содержимое словаря передается прямо внутри текущего gRPC-запроса. |
Способ 1. Загрузка через dictionary_name (рекомендуется)
Клиент передает словарь замен в формате CSV. После проверки (валидации) таблица включается в ближайший релиз, а клиенту направляется уведомление с ее названием. Чтобы применить изменения, клиент отправляет запрос с указанием dictionary_name.
Способ 2. Загрузка через dictionary_data (напрямую)
Клиент самостоятельно передает данные в параметре dictionary_data. В этом случае изменения вступают в силу мгновенно. Корректность передаваемых данных целиком лежит на стороне клиента.
Формат передачи данных (dictionary_data)
Синтаксис и разделители:
-
Каждый новый вариант замены передается с новой строки (разделитель строк — \n).
-
Внутри строки элементы разделяются точкой с запятой ";".
-
Первое значение — исходный текст (что заменяем).
-
Последующие значения — варианты замены (на что заменяем).
Пример:
мтс;эмтэес;мэтэсэ
wifi;вайфай
цифра;число;буква
Ограничение: Замена словосочетаний не поддерживается — исходным значением (первым словом) может быть только одно слово.
Например, так нельзя:
мтс;эм тэес;
Ограничения
Для сохранения минимальной задержки (рост latency не более 3 мс), рекомендуется передавать до 100 замен (размер dictionary_data — до 5 КБ).
Как рассчитывается количество замен:
Замена — это каждая пара вида «исходное слово -> вариант замены».
- слово1;замена1 — 1 замена;
- слово1;замена1;замена2;замена3 — 3 замены (так как для одного слова указаны три варианта).
RecognitionConfig
Конфигурация распознавания при вызове метода FileRecognize.
| Поле | Тип | Описание |
|---|---|---|
| encoding | enum AudioEncoding | Формат аудиоданных (кодировка). |
| sample_rate_hertz | uint32 | Частота дискретизации аудиоданных в герцах. |
| language_code | string | Язык, используемый в аудиофайле. |
| audio_channel_count | uint32 | Количество каналов во входных аудиоданных. |
| split_by_channel | bool | Этот флаг работает только для распознавания в файловом режиме. При его включении каждый канал будет распознаваться отдельно. Может применяться, например, для аудио из колл-центров, где в одном канале голос клиента, а в другом - оператора. |
| model | string | Модель распознавания. |
| enable_word_time_offsets | bool | Флаг, включающий вывод временных меток слов (которые возвращаются в поле word структуры WordInfo). |
| va_config | VoiceActivityConfig | Конфигурация Voice Activity. |
| va_response_mode | VoiceActivityMarkEventsMode | Режим отправки разметки клиенту. По умолчанию – VA_DISABLE. |
| genderage_config | GenderAgeEmotionConfig | Конфигурация модели по определению пола, возраста и эмоционального настроя говорящего. |
| antispoofing_config | AntiSpoofingConfig | Конфигурация антиспуфинга. |
| context_dictionary | ContextDictionaryConfig | Конфигурация распознавания речи с участием словаря. |
| punctuation_config | PunctuationConfig | Конфигурация модели проставления пунктуации. |
| denormalization_config | DenormalizationConfig | Конфигурация модели денормализации чисел (перевод текстового представления числа в цифровую, например, "пять объектов > 5 объектов"). |
| speaker_labeling_config | SpeakerLabelingConfig | Конфигурация диаризации (определение принадлежности распознаваемых фраз к определенным спикерам и разделение аудио на сегменты, относящиеся к определенным спикерам) |
| substitution_dictionary_config | SubstitutionDictionaryConfig | Конфигурация подключения словарей автозамены (нормализации текста), которые корректируют финальный текстовый результат распознавания. |
VoiceActivityMarkEventsMode
Режим отправки разметки VoiceActivity клиенту.
| Имя | Значение | Описание |
|---|---|---|
| VA_DISABLE | 0 | Отключает отправку отметок VoiceActivityMark. |
| VA_ENABLE | 1 | Включает отправку отметок VoiceActivityMark синхронно вместе с транскрипцией. |
| VA_ENABLE_ASYNC | 2 | Включает отправку отметок VoiceActivityMark асинхронно (как только будет получена разметка, не дожидаясь работы asr). Для файлового режима работает идентично ENABLE. |
StreamRecognitionConfig
Конфигурация распознавания при вызове метода Recognize.
| Поле | Тип | Описание |
|---|---|---|
| config | RecognitionConfig | Конфигурация распознавания. |
| single_utterance | bool | Флаг для включения режима распознавания одной фразы. В этом режиме (при выставленном значении «true») распознавание завершается сервисом сразу после распознавания первой фразы и соединение разрывается. |
| interim_results | bool | Конфигурация для промежуточных результатов: |
AudioEncoding
Поддерживаемые форматы аудиоданных.
| Имя | Значение | Описание |
|---|---|---|
| ENCODING_UNSPECIFIED | 0 | На текущий момент не поддерживается. |
| LINEAR_PCM | 1 | PCM без заголовков с целыми знаковыми 16-битными сэмплами в линейном распределении (PCM 16bit). |
| FLAC | 2 | На текущий момент не поддерживается. |
| MULAW | 3 | PCM без заголовков с 8-битными сэмплами в формате mu-law. |
| ALAW | 20 | PCM без заголовков с 8-битными сэмплами в формате a-law. |
VoiceActivityConfig
Структура данных для хранения всех настроек VoiceActivity.
| Поле | Тип | Описание |
|---|---|---|
| usage | VoiceActivityDetectionAlgorithmUsage | Выбор алгоритма VoiceActivity. При DO_NOT_PERFORM_VOICE_ACTIVITY разметка аудио выключена. Значение по умолчанию - USE_VAD |
| vad_options | VADOptions | Опции алгоритма VAD. Используется при VoiceActivityDetectionAlgorithmUsage = USE_VAD |
| enhanced_vad_options | EnhancedVADOptions | Сообщение типа EnhancedVADOptions |
| target_speech_vad_options | TargetSpeechVADOptions | Сообщение типа TargetSpeechVADOptions |
| vad_v2_options | VADV2Options | Сообщение типа VADV2Options |
VoiceActivityDetectionAlgorithmUsage
Тип используемого алгоритма VoiceActivity.
| Имя | Значение | Описание |
|---|---|---|
| USE_VAD | 0 | Включает использование VAD-алгоритма (Voice Activity Detection) для разбиения на фразы. Этот алгоритм определяет окончание фразы по паузам в речи и тишине. |
| DO_NOT_PERFORM_VOICE_ACTIVITY | 1 | Отключает разбиение на фразы по Voice Activity. То есть весь распознанный текст будет получен в виде одной фразы. |
| USE_ENHANCED_VAD | 3 | Включает улучшенную и более современную версию алгоритма VAD, который разбивает аудиопоток на фразы. Универсально подходит для всех типов задач. |
| USE_TARGET_SPEECH_VAD | 4 | Включает использование алгоритма Target Speech VAD. Он основан на алгоритме Enhanced VAD, но отличается тем, что научен работать в шумной среде, где выделяет речь только основного спикера. Может не услышать тихую или неразборчивую речь. |
| USE_VAD_V2 | 5 | Включает использование более продвинутого алгоритма распознавания голоса VAD_V2. |
VADOptions
Настройки работы алгоритма VAD.
| Поле | Тип | Описание |
|---|---|---|
| threshold | float | Порог срабатывания VAD. Если вероятность речи выше порога, значит обработанный чанк содержит речь. Возможные значения: (0, 1.0). Значение по умолчанию для распознавания в файловом режиме - 0.1. Значение по умолчанию для распознавания в потоковом режиме - 0.9 |
| speech_pad_ms | int32 | Отступ, добавляемый к границам найденных фрагментов (если speech_pad_ms < 0, отступ будет "внутрь" фрагмента). Опция применима только для распознавания речи в файловом режиме (для FileRecognize запросов). Единицы измерения - миллисекунды. Значение по умолчанию - 300 |
| min_silence_ms | uint32 | Если между двумя фрагментами речи встречается пауза короче min_silence_ms, то такая пауза не учитывается и фрагменты объединяются в один. Единицы измерения - миллисекунды. Возможные значения: min_silence_ms >= 0. Значение по умолчанию - 1000 мс |
| min_speech_ms | uint32 | Минимальная продолжительность речи. Фрагменты короче min_speech_ms не учитываются. Опция применима только для распознавания речи в файловом режиме (для FileRecognize запросов). Единицы измерения - миллисекунды. Возможные значения: min_speech_ms >= 0. Значение по умолчанию - 250 |
| mode | VoiceActivityDetectionMode | Выбор типа разметки VAD-ом аудиофайла для запроса в файловом режиме. |
VoiceActivityDetectionMode
Выбор типа разметки аудио с помощью VAD.
| Имя | Значение | Описание |
|---|---|---|
| VAD_MODE_DEFAULT | 0 | Значение по умолчанию для распознавания в файловом режиме - SPLIT_BY_PAUSES, для распознавания в потоковом режиме - ONLY_SPEECH. |
| SPLIT_BY_PAUSES | 1 | Аудио разделяется по паузам (ничего не вырезается). |
| ONLY_SPEECH | 2 | Вырезаются только сегменты с речью. |
VADV2Options
Настройки работы алгоритма VAD_V2.
| Поле | Тип | Описание |
|---|---|---|
| min_silence_ms | int32 | Если между двумя фрагментами речи встречается пауза короче min_silence_ms, то такая пауза не учитывается и фрагменты объединяются в один. Единицы измерения - миллисекунды. Возможные значения: min_silence_ms >= 0. Значение по умолчанию - 1000 мс |
| beginning_threshold | float | Порог срабатывания модели для поиска начала речи. Используется для поиска начала фразы. Если в текущий момент вероятность речи превысила порог beginning_threshold, то считается, что обнаружено начало речи. Значение порога - от 0 до 1. |
| ending_threshold | float | Порог срабатывания модели для поиска конца речи. Используется для поиска конца фразы. Если ранее было обнаружено начало речи, то конец речи наступает в момент, когда вероятность наличия речи становится ниже порога ending_threshold. Значение порога - от 0 до 1. Должно быть меньше, чем beginning_threshold. |
EnhancedVADOptions
| Поле | Тип | Описание |
|---|---|---|
| beginning_window_ms | int32 | Размер окна (в миллисекундах), для сглаживания вероятности наличия речи в каждый момент времени. Для каждого момента времени вероятность наличия речи считается как средняя вероятность за предыдущее окно размером beginning_window_ms. Размер окна не должен превышать размер чанка и должен быть кратен 40мс. Используется для поиска границы начала речи. |
| beginning_threshold | float | Порог срабатывания модели для поиска начала речи. Используется для поиска начала фразы. Если в текущий момент вероятность речи превысила порог beginning_threshold, то считается, что обнаружено начало речи. Значение порога - от 0 до 1. |
| ending_window_ms | int32 | Размер окна (в миллисекундах), для сглаживания вероятности наличия речи в каждый момент времени. Для каждого момента времени вероятность наличия речи считается как средняя вероятность за "будущее" окно (в пределах чанка) размером ending_window_ms. Размер окна не должен превышать размер чанка и должен быть кратен 40мс. Используется для поиска границы конца речи. |
| ending_threshold | float | Порог срабатывания модели для поиска конца речи. Используется для поиска конца фразы. Если ранее было обнаружено начало речи, то конец речи наступает в момент, когда вероятность наличия речи становится ниже порога ending_threshold. Значение порога - от 0 до 1. Должно быть меньше, чем beginning_threshold. |
TargetSpeechVADOptions
| Поле | Тип | Описание |
|---|---|---|
| beginning_window_ms | int32 | Размер окна (в миллисекундах), для сглаживания вероятности наличия речи в каждый момент времени. Для каждого момента времени вероятность наличия речи считается как средняя вероятность за предыдущее окно размером beginning_window_ms. Размер окна не должен превышать размер чанка и должен быть кратен 40мс. Используется для поиска границы начала речи. |
| beginning_threshold | float | Порог срабатывания модели для поиска начала речи. Используется для поиска начала фразы. Если в текущий момент вероятность речи превысила порог beginning_threshold, то считается, что обнаружено начало речи. Значение порога - от 0 до 1. |
| ending_window_ms | int32 | Размер окна (в миллисекундах), для сглаживания вероятности наличия речи в каждый момент времени. Для каждого момента времени вероятность наличия речи считается как средняя вероятность за "будущее" окно (в пределах чанка) размером ending_window_ms. Размер окна не должен превышать размер чанка и должен быть кратен 40мс. Используется для поиска границы конца речи. |
| ending_threshold | float | Порог срабатывания модели для поиска конца речи. Используется для поиска конца фразы. Если ранее было обнаружено начало речи, то конец речи наступает в момент, когда вероятность наличия речи становится ниже порога ending_threshold. Значение порога - от 0 до 1. Должно быть меньше, чем beginning_threshold. |
GenderAgeEmotionConfig
Настройки работы сервиса genderage.
| Поле | Тип | Описание |
|---|---|---|
| enable | bool | Флаг, включающий модуль определения пола, возраста и эмоционального настроя говорящего. Примечание: пол ребенка в настоящий момент не определяется. |
AntiSpoofingConfig
Конфигурация антиспуфинга.
| Поле | Тип | Описание |
|---|---|---|
| FAR | float | Допустимый процент принятия ботов за людей. |
| FRR | float | Допустимый процент отклонения людей (принятия их за ботов). |
| max_duration_for_analysis_ms | uint32 | Максимальная длительность анализа (в миллисекундах). Значение по умолчанию - 5000 миллисекунд. |
| enable | bool | Флаг, включающий модуль определения является ли аудио, поступившее на распознавание, спуфинг-атакой. |
ContextDictionaryConfig
Конфигурация распознавания речи с участием словаря.
| Поле | Тип | Описание |
|---|---|---|
| dictionary_name | string | Название словаря. |
| weight | float | Вес указанного словаря в процессе распознавания. |
PunctuationConfig
Конфигурация модели капитализации и расстановки знаков препинания.
| Поле | Тип | Описание |
|---|---|---|
| enable | bool | Флаг, включающий модуль капитализации и расстановки знаков препинания. |
DenormalizationConfig
Конфигурация модели денормализации чисел.
| Поле | Тип | Описание |
|---|---|---|
| enable | bool | Флаг, включающий модуль денормализации чисел. |
SpeakerLabelingConfig
Конфигурация диаризации.
| Поле | Тип | Описание |
|---|---|---|
| enable | bool | Флаг, включающий модуль диаризации. |
| max_speakers | uint32 | Максимальное количество спикеров в аудио. Не является обязательным параметром, но улучшает качество диаризации. Этот параметр рекомендуется передать, если вы не знаете точное количество спикеров в аудио, но точно знаете, что их не больше определенного числа. |
| num_speakers | uint32 | Точное количество спикеров в аудио. Не является обязательным параметром, но улучшает качество диаризации. |
ModelsInfo
Доступные модели распознавания речи.
| Поле | Тип | Описание |
|---|---|---|
| models | repeated ModelInfo | Список доступных моделей. |
| header | mts.ai.audiogram.response_header.v1.ResponseHeader | Сообщение типа ResponseHeader. |
ModelInfo
Информация о модели распознавания речи.
| Поле | Тип | Описание |
|---|---|---|
| name | string | Название модели распознавания речи. |
| sample_rate_hertz | uint32 | Частота дискретизации аудиоданных, с которой модель работает без необходимости перекодировать аудио. |
| language_code | string | Язык, речь на котором может распознавать модель, по умолчанию ru. |
| dictionary_name | repeated string | Название словаря (одного или нескольких), который используется моделью распознавания. |
stt_response.proto
Сообщения PROTOBUF
FileRecognizeResponse
| Поле | Тип | Описание |
|---|---|---|
| response | repeated RecognizeResponse | Результат распознавания. |
| header | mts.ai.audiogram.response_header.v1.ResponseHeader | Сообщение типа ResponseHeader. |
RecognizeResponse
Ответ с результатами распознавания для метода Recognize.
| Поле | Тип | Описание |
|---|---|---|
| hypothesis | SpeechRecognitionHypothesis | Результат распознавания речи. |
| is_final | bool | Флаг, указывающий, что сформирована окончательная гипотеза и меняться она больше не будет: |
| channel | int32 | Идентификатор канала (в настоящее время данный параметр не поддерживается). |
| va_marks | repeated VoiceActivityMark | Voice Activity разметка. Массив меток отправляется только если VoiceActivityMarkEventsMode = VA_ENABLE / VA_ENABLE_ASYNC. При VoiceActivityMarkEventsMode = VA_ENABLE_ASYNC все остальные поля структуры SpeechRecognitionResult могут быть пустые. |
| genderage | SpeakerGenderAgePrediction | Результат работы модели классификации мужчина/женщина/ребенок. Включается флагом enable в GenderAgeEmotionConfig. |
| spoofing_result | repeated SpoofingResult | Результат работы модели антиспуфинга. Включается флагом enable в AntiSpoofingConfig. |
| speaker_info | SpeakerInfo | Информация по спикеру, которому принадлежат распознанные фразы. |
| header | mts.ai.audiogram.response_header.v1.ResponseHeader | Сообщение типа ResponseHeader. |
SpeechRecognitionHypothesis
Результат распознавания речи.
| Поле | Тип | Описание |
|---|---|---|
| transcript | string | Результат работы модели распознавания речи без его последующей обработки сервисами денормализации чисел и расстановки знаков препинания. |
| normalized_transcript | string | Результат работы модели распознавания речи с его последующей обработкой сервисами денормализации чисел и расстановки знаков препинания. |
| confidence | float | Коэффициент достоверности (степень уверенности) распознанных фраз. |
| start_time_ms | uint32 | Временная метка начала распознанной фразы относительно начала аудиопотока. |
| end_time_ms | uint32 | Временная метка конца распознанной фразы относительно начала аудиопотока. |
| words | repeated WordInfo | Результат распознавания речи с разбивкой по словам. |
| normalized_words | repeated WordInfo | В настоящее время не поддерживается. |
WordInfo
Объект, содержащий информацию, относящуюся к распознанному слову.
| Поле | Тип | Описание |
|---|---|---|
| start_time_ms | uint32 | Временная метка начала слова относительно начала аудиопотока. |
| end_time_ms | uint32 | Временная метка конца слова относительно начала аудиопотока. |
| word | string | Распознанное слово. |
| confidence | float | Коэффициент достоверности (степень уверенности) распознанного слова. |
VoiceActivityMark
Определяет разметку голосовой активности во входном акустическом сигнале. Сообщение включает в себя метку времени и тип метки.
| Поле | Тип | Описание |
|---|---|---|
| mark_type | VoiceActivityMarkType | Тип разметки. |
| offset_ms | uint32 | Метка времени с точкой отсчета начала входного акустического сигнала, единицы измерения - миллисекунды. |
VoiceActivityMarkType
Определяет тип метки голосовой активности.
| Имя | Значение | Описание |
|---|---|---|
| VA_MARK_NONE | 0 | Тип метки отсутствия изменения голосовой активности. |
| VA_MARK_BEGIN | 1 | Тип метки начала голосовой активности. |
| VA_MARK_END | 2 | Тип метки конца голосовой активности. |
SpeakerGenderAgePrediction
Пол, возраст и эмоциональная окраска голоса спикера.
| Поле | Тип | Описание |
|---|---|---|
| gender | GenderClass | Значение, определяющее пол. |
| age | AgeClass | Значение, определяющее возраст. |
| emotion | EmotionsRecognition | Значение, определяющее эмоциональную окраску голоса спикера. |
EmotionsRecognition
Эмоциональная окраска голоса спикера.
| Поле | Тип | Описание |
|---|---|---|
| positive | float | Положительный тон. |
| neutral | float | Нейтральный тон. |
| negative_angry | float | Сердитый тон. |
| negative_sad | float | Печальный тон (в данный момент этот параметр не поддерживается). |
GenderClass
Пол говорящего.
| Имя | Значение | Описание |
|---|---|---|
| GENDER_UNDEF | 0 | Пол не определен. |
| GENDER_MALE | 1 | Мужчина. |
| GENDER_FEMALE | 2 | Женщина. |
AgeClass
Возраст говорящего.
| Имя | Значение | Описание |
|---|---|---|
| AGE_UNDEF | 0 | Возраст не определен. |
| AGE_ADULT | 1 | Взрослый. |
| AGE_CHILD | 2 | Ребенок. |
SpoofingResult
Результат работы модели, определяющей является ли аудио, поступившее на распознавание, спуфинг-атакой.
| Поле | Тип | Описание |
|---|---|---|
| result | AttackResult | Результат определения является ли звонок спуфинг-атакой. |
| confidence | float | Уверенность в принятом решении в поле result. |
| start_time_ms | uint32 | Начальная метка временного отрезка, который анализировался на предмет спуфинг-атаки. |
| end_time_ms | uint64 | Конечная метка временного отрезка, который анализировался на предмет спуфинг-атаки. |
AttackResult
Информация - является ли аудио, поступившее на распознавание, спуфинг-атакой или голос принадлежит человеку.
| Имя | Значение | Описание |
|---|---|---|
| ATTACK_DETECTED | 0 | Зафиксирована спуфинг-атака (бот пытается выдать себя за человека). |
| GENUINE | 1 | Голос принадлежит человеку. |
SpeakerInfo
Информация по спикеру, которому принадлежат распознанные фразы.
| Поле | Тип | Описание |
|---|---|---|
| speaker_id | uint32 | Идентификатор (ID) спикера, которому принадлежат распознанные фразы. |
response_header.proto
Сообщения PROTOBUF
ResponseHeader
| Поле | Тип | Описание |
|---|---|---|
| timestamp | uint64 | Время отправки ответа на стороне Audiogram. Позволяет высчитать сетевую задержку. |
Через пресеты
Для создания клиентского приложения, которое будет отправлять в Audiogram запросы на распознавание речи через пресеты (заранее созданные под Заказчика конфигурации настроек запроса), вам понадобятся следующие .proto-файлы:
Основной контракт:
- stt_presets.proto - основной контракт, по которому происходит распознавание речи.
Зависимости:
- stt_response.proto - конфигурация ответа на запрос на распознавание речи. Описание этого .proto-файла представлено в секции stt_response.proto
- response_header.proto - структура, содержащая временную метку ответа сервиса; позволяет отследить сетевые задержки. Описание этого .proto-файла представлено в секции response_header.proto
Примечание 1: Для создания собственного клиентского приложения можно использовать любой язык программирования, который есть в библиотеке для работы с gRPC. Подробную информацию об этом протоколе можно посмотреть на https://grpc.io
Примечание 2: Максимальная длина сообщения, принимаемого от клиентских приложений по gRPC (в байтах): 62914560
stt_presets.proto
Методы
FileRecognize
| Имя метода | Тип запроса | Тип ответа | Описание |
|---|---|---|---|
| FileRecognize | FileRecognizeRequest | mts.ai.audiogram.stt_response.v1.FileRecognizeResponse | Выполняет распознавание речи в файловом режиме (синхронном). |
Recognize
| Имя метода | Тип запроса | Тип ответа | Описание |
|---|---|---|---|
| Recognize | stream RecognizeRequest | stream mts.ai.audiogram.stt_response.v1.RecognizeResponse | Выполняет распознавание речи в потоковом режиме. |
Сообщения PROTOBUF
Preset
Эта структура содержит информацию о пресете настроек, который необходимо использовать для распознавания речи.
| Поле | Тип | Описание |
|---|---|---|
| preset_name | string | Название пресета. |
| preset_version | int32 | Версия пресета. |
Название и версию пресета, который вам надо использовать, можно получить у менеджеров Audiogram.
FileRecognizeRequest
Конфигурация файлового (синхронного) распознавания.
| Поле | Тип | Описание |
|---|---|---|
| preset | Preset | Сообщение типа Preset (описано выше). |
| audio | bytes | В это поле надо передать байты аудио, речь из которого необходимо распознать. |
RecognizeRequest
Конфигурация потокового распознавания.
| Поле | Тип | Описание |
|---|---|---|
| preset | Preset | Сообщение типа Preset (описано выше). |
| audio | bytes | В это поле надо передать чанки (байты аудио), речь из которого необходимо распознать. |
Асинхронное (отложенное) распознавание речи
Распознавание речи - это процесс преобразования аудио в текст. Асинхронное (или отложенное) распознавание позволяет распознать речь из больших аудиофайлов (объемом до 1 ГБ). Чем больше размер аудио, тем дольше займет распознавание (до 8 часов).
Асинхронное распознавание работает следующим образом:
-
Клиент сохраняет аудиофайл (можно несколько, но объем каждого не должен превышать 1 ГБ) в хранилище (например, S3), которое используется Audiogram.
-
Далее, через gRPC API, необходимо поставить Audiogram задачу на асинхронное распознавание. В задаче указывается путь до аудиофайла и ряд других параметров (они описаны в следующих секциях).
-
По истечении некоторого времени, через клиентское приложение необходимо отправить в Audiogram запрос на получение статуса поставленной задачи.
-
Если задача выполнена, можно скачать результаты распознавания. Это делается через HTTP API сервиса audio-archive-back, который входит в состав Audiogram. Результаты асинхронного распознавания сохраняются в хранилище рядом с исходными аудиофайлами.
Для работы с асинхронным распознаванием Заказчикам предлагается gRPC контракт (proto-файлы), который можно использовать, например, для создания собственного клиентского приложения.
Важно! Есть 2 вида gRPC контрактов:
-
Через полную конфигурацию запроса: позволяет самостоятельно настраивать все параметры распознавания речи.
-
Через пресеты: под Заказчика заранее создается конфигурация распознавания речи (пресет), которая скрывает все настройки. Этот вид контракта позволяет пользователям избежать непреднамеренных ошибок конфигурации.
В следующих секциях подробнее рассмотрим эти контракты.
Через полную конфигурацию запроса
Для создания клиентского приложения, которое будет отправлять в Audiogram запросы на асинхронное распознавание речи через полную конфигурацию настроек, вам понадобятся следующие .proto-файлы:
Основной контракт:
- longrunning_stt.proto - основной контракт, по которому происходит асинхронное распознавание речи.
Зависимости:
-
stt_v3.proto - полная конфигурация настроек распознавания речи. Описание этого .proto-файла представлено в секции stt_v3.proto
-
stt_response.proto - конфигурация ответа на запрос на распознавание речи. Описание этого .proto-файла представлено в секции stt_response.proto
-
response_header.proto - структура, содержащая временную метку ответа сервиса; позволяет отследить сетевые задержки. Описание этого .proto-файла представлено в секции response_header.proto
-
longrunning_task.proto - конфигурация задачи на асинхронное распознавание.
Примечание 1: Для создания собственного клиентского приложения можно использовать любой язык программирования, который есть в библиотеке для работы с gRPC. Подробную информацию об этом протоколе можно посмотреть на https://grpc.io
Примечание 2: Максимальная длина сообщения, принимаемого от клиентских приложений по gRPC (в байтах): 62914560
longrunning_stt.proto
Методы
LongRunningRecognize
| Имя метода | Тип запроса | Тип ответа | Описание |
|---|---|---|---|
| LongRunningRecognize | LongRunningRecognizeRequest | mts.ai.audiogram.longrunning_task.v1.Task | Создает задачу на распознавание речи в файловом (асинхронном) режиме. |
GetTaskInfo
| Имя метода | Тип запроса | Тип ответа | Описание |
|---|---|---|---|
| GetTaskInfo | mts.ai.audiogram.longrunning_task.v1.TaskRequest | mts.ai.audiogram.longrunning_task.v1.Task | Получает информацию по задаче на распознавание речи в асинхронном режиме. |
CancelTask
| Имя метода | Тип запроса | Тип ответа | Описание |
|---|---|---|---|
| CancelTask | mts.ai.audiogram.longrunning_task.v1.TaskRequest | mts.ai.audiogram.longrunning_task.v1.Task | Отменяет задачу на распознавание речи в асинхронном режиме. Примечание: нельзя отменить задачу, которая находится в статусе IN_PROGRESS. |
Сообщения PROTOBUF
LongRunningRecognizeRequest
| Поле | Тип | Описание |
|---|---|---|
| config | mts.ai.audiogram.stt.v3.RecognitionConfig | Конфигурация запроса на распознавание речи. |
| s3_audio_path | repeated AudioPath | Это поле содержит один или несколько путей к аудиофайлам, которые надо распознать. |
AudioPath
| Поле | Тип | Описание |
|---|---|---|
| bucket_name | string | Имя s3-контейнера (бакета), в котором хранится аудио, речь из которого необходимо распознать. |
| object_name | string | Имя объекта (аудиофайла), речь из которого необходимо распознать. |
longrunning_task.proto
Сообщения PROTOBUF
Task
Эта структура содержит информацию о поставленной задаче на асинхронное распознавание речи.
| Поле | Тип | Описание |
|---|---|---|
| id | string | Идентификатор задачи. |
| status | Status | Статус задачи. |
| created_at | google.protobuf.Timestamp | Время создания задачи. |
| audio_requests | repeated Audio | Информация об аудиофайлах, которые будут распознаны в рамках задачи. |
| header | mts.ai.audiogram.response_header.v1.ResponseHeader | Сообщение типа ResponseHeader. |
Status
Статус задачи на асинхронное распознавание речи.
| Имя | Значение | Описание |
|---|---|---|
| UNDEFINED | 0 | Статус не определен. |
| NEW | 1 | Новая задача. |
| IN_PROGRESS | 2 | Задача в процессе. |
| COMPLETE | 3 | Задача выполнена. |
| CANCELED | 4 | Задача отменена. |
| ERROR | 5 | Во время выполнения задачи произошла ошибка. |
Audio
Информация об аудиофайлах, которые будут распознаны в рамках задачи.
| Поле | Тип | Описание |
|---|---|---|
| bucket_name | string | Имя s3-контейнера (бакета), в котором хранится аудиофайл, речь из которого необходимо распознать. |
| object_name | string | Имя объекта (аудиофайл), речь из которого необходимо распознать. |
| status | string | Статус задачи на распознавание речи. |
| response_id | string | Идентификатор, который приписывается распознаванию аудиофайла. По нему можно будет скачать результаты распознавания. |
| duration_ms | int32 | Продолжительность аудио в миллисекундах (мс) для обработанных файлов. |
TaskRequest
| Поле | Тип | Описание |
|---|---|---|
| task_id | string | Идентификатор задачи на распознавание речи. Это то же самое, что и id в структуре Task. Только id возвращается в ответ на создание задачи. А затем, если необходимо посмотреть статус этой задачи или отменить ее, нужно вложить значение id в task_id и в запросах на статус или отмену указывать task_id. |
Через пресеты
Для создания клиентского приложения, которое будет отправлять в Audiogram запросы на асинхронное распознавание речи через пресеты (заранее созданные под Заказчика конфигурации настроек запроса), вам понадобятся следующие .proto-файлы:
Основной контракт:
- longrunning_presets.proto - основной контракт, по которому происходит асинхронное распознавание речи через пресеты.
Зависимости:
-
stt_presets.proto - контракт, по которому происходит распознавание речи через пресеты. Описание этого .proto-файла представлено в секции stt_presets.proto
-
longrunning_task.proto - конфигурация задачи на асинхронное распознавание. Описание этого .proto-файла представлено в секции longrunning_task.proto
-
stt_response.proto - конфигурация ответа на запрос на распознавание речи. Описание этого .proto-файла представлено в секции stt_response.proto
-
response_header.proto - структура, содержащая временную метку ответа сервиса; позволяет отследить сетевые задержки. Описание этого .proto-файла представлено в секции response_header.proto
Примечание 1: Для создания собственного клиентского приложения можно использовать любой язык программирования, который есть в библиотеке для работы с gRPC. Подробную информацию об этом протоколе можно посмотреть на https://grpc.io
Примечание 2: Максимальная длина сообщения, принимаемого от клиентских приложений по gRPC (в байтах): 62914560
longrunning_presets.proto
Методы
LongRunningRecognize
| Имя метода | Тип запроса | Тип ответа | Описание |
|---|---|---|---|
| LongRunningRecognize | LongRunningRecognizeRequest | mts.ai.audiogram.longrunning_task.v1.Task | Создает задачу на распознавание речи в файловом (асинхронном) режиме. |
GetTaskInfo
| Имя метода | Тип запроса | Тип ответа | Описание |
|---|---|---|---|
| GetTaskInfo | mts.ai.audiogram.longrunning_task.v1.TaskRequest | mts.ai.audiogram.longrunning_task.v1.Task | Получает информацию по задаче на распознавание речи в асинхронном режиме. |
CancelTask
| Имя метода | Тип запроса | Тип ответа | Описание |
|---|---|---|---|
| CancelTask | mts.ai.audiogram.longrunning_task.v1.TaskRequest | mts.ai.audiogram.longrunning_task.v1.Task | Отменяет задачу на распознавание речи в асинхронном режиме. Примечание: нельзя отменить задачу, которая находится в статусе IN_PROGRESS. |
Сообщения PROTOBUF
LongRunningRecognizeRequest
| Поле | Тип | Описание |
|---|---|---|
| preset | mts.ai.audiogram.stt_presets.v2.Preset | Описание пресета, который необходимо использовать. |
| s3_audio_path | repeated AudioPath | Это поле содержит один или несколько путей к аудиофайлам, которые надо распознать. |
AudioPath
| Поле | Тип | Описание |
|---|---|---|
| bucket_name | string | Имя s3-контейнера (бакета), в котором хранится аудио, речь из которого необходимо распознать. |
| object_name | string | Имя объекта (аудиофайла), речь из которого необходимо распознать. |
Синтез речи
Синтез речи - это процесс преобразования текста в голос. Вы отправляете в Audiogram запрос с текстом, который необходимо озвучить, и дополнительные настройки (каким голосом, с какой интонацией и т. д.). Audiogram выполняет озвучку и в ответе возвращает получившийся аудиофайл.
Синтез речи бывает 2 видов:
-
потоковый: В этом случае текст отправляется в Audiogram и озвучивается частями по мере поступления. Потоковый синтез подходит, например, для создания ответных реплик голосовых помощников, так как позволяет достичь эффекта живого общения без неестественных пауз.
-
файловый: При файловом синтезе весь текст, который необходимо озвучить, поступает в Audiogram целиком. В ответ возвращается аудиофайл с озвучкой. Этот способ может использоваться, например, для озвучивания книг.
Для работы с Audiogram Заказчикам предлагается gRPC контракт (proto-файлы), который можно использовать, например, для создания собственного клиентского приложения.
Важно! Есть 2 вида gRPC контрактов:
-
Через полную конфигурацию запроса: позволяет самостоятельно настраивать все параметры синтеза речи.
-
Через пресеты: под Заказчика заранее создается конфигурация синтеза речи (пресет), которая скрывает все настройки. Этот вид контракта позволяет пользователям избежать непреднамеренных ошибок конфигурации.
В следующих секциях подробнее рассмотрим эти контракты.
Через полную конфигурацию запроса
Для создания клиентского приложения, которое будет отправлять в Audiogram запросы на синтез речи через полную конфигурацию настроек, вам понадобятся следующие .proto-файлы:
Основной контракт:
- tts.proto (потоковый или файловый синтез речи через полную конфигурацию настроек запроса)
Зависимости:
- response_header.proto - структура, содержащая временную метку ответа сервиса; позволяет отследить сетевые задержки. Описание этого .proto-файла представлено в секции response_header.proto
Примечание 1: Для создания собственного клиентского приложения можно использовать любой язык программирования, который есть в библиотеке для работы с gRPC. Подробную информацию об этом протоколе можно посмотреть на https://grpc.io
Примечание 2: Максимальная длина сообщения, принимаемого от клиентских приложений по gRPC (в байтах): 62914560
tts.proto
Методы
StreamingSynthesize
Потоковый синтез речи.
| Имя метода | Тип запроса | Тип ответа | Описание |
|---|---|---|---|
| StreamingSynthesize | SynthesizeSpeechRequest | stream StreamingSynthesizeSpeechResponse | Метод потокового синтеза речи. Разбивает текст на короткие фразы, и возвращает результат по мере их синтеза. |
Synthesize
Синхронный файловый синтез речи.
| Имя метода | Тип запроса | Тип ответа | Описание |
|---|---|---|---|
| Synthesize | SynthesizeSpeechRequest | SynthesizeSpeechResponse | Метод синхронного файлового синтеза речи. Возвращает целый аудиофайл в формате, заданном в encoding с заголовками выбранного контейнера, пригодный для сохранения на диск. |
StreamingVoiceCloning
Потоковый синтез речи с использованием технологии клонирования голоса.
| Имя метода | Тип запроса | Тип ответа | Описание |
|---|---|---|---|
| StreamingVoiceCloning | VoiceCloningRequest | stream StreamingSynthesizeSpeechResponse | Метод потокового синтеза речи с поддержкой клонирования голоса. Позволяет генерировать аудиопоток на основе входящего текста, адаптируя тембр и интонации под предоставленный аудио-эталон. |
VoiceCloning
Синхронный файловый синтез речи с использованием технологии клонирования голоса.
| Имя метода | Тип запроса | Тип ответа | Описание |
|---|---|---|---|
| VoiceCloning | VoiceCloningRequest | SynthesizeSpeechResponse | Метод пакетного синтеза речи с клонированием голоса. Принимает полный текст и аудио-образец, возвращая готовый аудиофайл, синтезированный голосом донора. |
GetModelsInfo
Запрос моделей для синтеза речи.
| Имя метода | Тип запроса | Тип ответа | Описание |
|---|---|---|---|
| GetModelsInfo | google.protobuf.Empty | ModelsInfo | Метод запроса списка моделей для синтеза речи. Ничего не принимает в качестве аргументов, возвращает список доступных моделей. |
Сообщения PROTOBUF
AudioEncoding
Поддерживаемые форматы аудиоданных.
| Имя | Значение | Описание |
|---|---|---|
| ENCODING_UNSPECIFIED | 0 | На текущий момент не поддерживается. |
| LINEAR_PCM | 1 | 1. Если данное поле выбрано при использовании метода Synthesize, то в поле SynthesizeSpeechResponse.audio вернётся WAV linear PCM аудиофайл с заголовком, содержащий целые знаковые 16-битные сэмплы в линейном распределении (PCM 16bit) и заданной частотой дискретизации в соответствии с полем sample_rate_hertz. 2. При использовании метода StreamingSynthesize в поле StreamingSynthesizeSpeechResponse.audio по мере синтеза отправляются чанки linear PCM без заголовка WAV с целыми знаковыми 16-битными сэмплами в линейном распределении (PCM 16bit). |
| FLAC | 2 | На текущий момент не поддерживается. |
| MULAW | 3 | 1. Если данное поле выбрано при использовании метода Synthesize, то в поле SynthesizeSpeechResponse.audio вернётся WAV PCM аудиофайл с заголовком, содержащий 8-битные сэмплы в формате mu-law и заданной частотой дискретизации в соответствии с полем sample_rate_hertz. 2. При использовании метода StreamingSynthesize в поле StreamingSynthesizeSpeechResponse.audio по мере синтеза отправляются чанки PCM без заголовка WAV с 8-битными сэмплами в формате mu-law. |
| ALAW | 20 | 1. Если данное поле выбрано при использовании метода Synthesize, то в поле SynthesizeSpeechResponse.audio вернётся WAV PCM аудиофайл с заголовком, содержащий 8-битные сэмплы в формате a-law и заданной частотой дискретизации в соответствии с полем sample_rate_hertz. 2. При использовании метода StreamingSynthesize в поле StreamingSynthesizeSpeechResponse.audio по мере синтеза отправляются чанки PCM без заголовка WAV с 8-битными сэмплами в формате a-law. |
VoiceStyle
Эмоциональная окраска голоса.
| Имя | Значение | Описание |
|---|---|---|
| VOICE_STYLE_NEUTRAL | 0 | Спокойное состояние. |
| VOICE_STYLE_HAPPY | 1 | Радость. |
| VOICE_STYLE_ANGRY | 2 | Злость. |
| VOICE_STYLE_SAD | 3 | Грусть. |
| VOICE_STYLE_SURPRISED | 4 | Удивление. |
| VOICE_STYLE_CONVERSATIONAL | 5 | Разговорная речь. |
SynthesizeOptions
Опции синтеза.
| Поле | Тип | Описание |
|---|---|---|
| model_type | string | Тип модели. Доступные варианты: 1) high_quality - относится к поколению моделей, которые отличаются улучшенными характеристиками синтеза речи. Используется для озвучки текста в потоковом и файловом режимах. |
| model_sample_rate_hertz | uint32 | Частота дискретизации модели (в герцах). Если поле не указано, то будет подобрана наиболее близкая модель к указанной частоте дискретизации аудио. |
| voice_style | VoiceStyle | Стиль речи. Значение по умолчанию - VOICE_STYLE_NEUTRAL |
| postprocessing_mode | PostprocessingMode | Постобработка аудио. |
| custom_options | map<string, CustomSynthesizeOptionValue> | Дополнительный набор опций по настройке синтеза. В custom_options выносятся экспериментальные настройки, которые еще не прошли полную проверку. На текущий момент список дополнительных настроек пустой, так как этот функционал проходит тестирование. |
CustomSynthesizeOptionValue
Индивидуальные настройки синтеза.
| Поле | Тип | Описание |
|---|---|---|
| int32_value | int32 | Значение типа int32. |
| int64_value | int64 | Значение типа int64. |
| number_value | double | Значение типа double. |
| string_value | string | Значение типа string. |
| bool_value | bool | Значение типа bool. |
PostprocessingMode
Постобработка аудио (удаление фоновых шумов, выравнивание громкости, эквализация и другие улучшения).
| Имя | Значение | Описание |
|---|---|---|
| POST_PROCESSING_DISABLE | 0 | Постобработка выключена. |
| POST_PROCESSING_PHONE_CHANNEL | 1 | Этот параметр больше не поддерживается. |
| POST_PROCESSING_PRETTIFY | 2 | Не рекомендуется использовать этот параметр. |
SynthesizeSpeechRequest
Настройки синтеза для файлового метода синтеза речи.
| Поле | Тип | Описание |
|---|---|---|
| text | string | Текст для синтеза без SSML разметки (необходимо задавать только одно из полей – text или ssml). Если в поле text отправить на озвучку текст с SSML-тегами, Audiogram озвучит не только текст, но и теги. |
| ssml | string | Текст для синтеза в формате SSML (необходимо задавать только одно из полей – text или ssml). Если в поле ssml отправить на озвучку текст без SSML-разметки, вернется ошибка синтеза. |
| language_code | string | Язык, который используется для синтеза. В настоящее время поддерживается только русский язык. |
| encoding | AudioEncoding | Формат аудио данных (кодировка). |
| sample_rate_hertz | int32 | Частота дискретизации синтеза (в герцах). |
| voice_name | string | Имя голоса. Список доступных моделей: женские голоса: мужские голоса: |
| synthesize_options | SynthesizeOptions | Опции синтеза аудио. |
VoiceCloningRequest
Настройки синтеза речи с клонированием голоса.
| Поле | Тип | Описание |
|---|---|---|
| text | string | Текст для синтеза без SSML разметки (необходимо задавать только одно из полей – text или ssml). Если в поле text отправить на озвучку текст с SSML-тегами, Audiogram озвучит не только текст, но и теги. |
| ssml | string | Текст для синтеза в формате SSML (необходимо задавать только одно из полей – text или ssml). Если в поле ssml отправить на озвучку текст без SSML-разметки, вернется ошибка синтеза. |
| language_code | string | Язык, который используется для синтеза. В настоящее время поддерживается только русский язык. |
| encoding | AudioEncoding | Формат аудио данных (кодировка). |
| sample_rate_hertz | int32 | Частота дискретизации синтеза (в герцах). |
| voice_id | string | Уникальный идентификатор клонированного голоса, которым будет озвучен текст. |
StreamingSynthesizeSpeechResponse
Результат работы потокового синтеза речи.
| Поле | Тип | Описание |
|---|---|---|
| audio | bytes | Байты аудиоданных без заголовка, закодированные, как указано в encoding и заданной в sample_rate_hertz частотой дискретизации. Результат синтеза может прийти в нескольких ответах, по мере их синтезирования. |
| header | mts.ai.audiogram.response_header.v1.ResponseHeader | Сообщение типа ResponseHeader. |
SynthesizeSpeechResponse
Результат работы файлового синтеза речи.
| Поле | Тип | Описание |
|---|---|---|
| audio | bytes | В данном поле передаётся целый синтезированный аудиофайл с заголовками в формате, заданном в encoding и заданной в sample_rate_hertz частотой дискретизации. |
| header | mts.ai.audiogram.response_header.v1.ResponseHeader | Сообщение типа ResponseHeader. |
ModelsInfo
Доступные голоса для синтеза речи.
| Поле | Тип | Описание |
|---|---|---|
| models | repeated ModelInfo | Список доступных голосов для синтеза речи. |
| header | mts.ai.audiogram.response_header.v1.ResponseHeader | Сообщение типа ResponseHeader. |
ModelInfo
Информация о модели синтеза речи.
| Поле | Тип | Описание |
|---|---|---|
| name | string | Название модели синтеза речи. |
| sample_rate_hertz | uint32 | Частота дискретизации аудио данных в герцах. |
| language_code | string | Язык, которым озвучивается текст, отправленный на синтез. По умолчанию ru. |
| type | string | Тип модели. Возможные значения: |
Через пресеты
Для создания клиентского приложения, которое будет отправлять в Audiogram запросы на синтез речи через пресеты (заранее созданные под Заказчика конфигурации настроек запроса), вам понадобятся следующие .proto-файлы:
Основной контракт:
- tts_presets.proto (потоковый или файловый синтез речи через заранее созданные пресеты конфигурационных настроек)
Зависимости:
- response_header.proto - структура, содержащая временную метку ответа сервиса; позволяет отследить сетевые задержки. Описание этого .proto-файла представлено в секции response_header.proto
Примечание 1: Для создания собственного клиентского приложения можно использовать любой язык программирования, который есть в библиотеке для работы с gRPC. Подробную информацию об этом протоколе можно посмотреть на https://grpc.io
Примечание 2: Максимальная длина сообщения, принимаемого от клиентских приложений по gRPC (в байтах): 62914560
tts_presets.proto
Методы
StreamingSynthesize
Потоковый синтез речи.
| Имя метода | Тип запроса | Тип ответа | Описание |
|---|---|---|---|
| StreamingSynthesize | SynthesizeSpeechRequest | stream StreamingSynthesizeSpeechResponse | Метод потокового синтеза речи. Разбивает текст на короткие фразы, и возвращает результат по мере их синтеза. |
Synthesize
Синхронный файловый синтез речи.
| Имя метода | Тип запроса | Тип ответа | Описание |
|---|---|---|---|
| Synthesize | SynthesizeSpeechRequest | SynthesizeSpeechResponse | Метод синхронного файлового синтеза речи. Возвращает целый аудиофайл в формате, заданном в encoding с заголовками выбранного контейнера, пригодный для сохранения на диск. |
Сообщения PROTOBUF
Preset
Эта структура содержит информацию о пресете настроек, который необходимо использовать для синтеза речи.
| Поле | Тип | Описание |
|---|---|---|
| preset_name | string | Название пресета. |
| preset_version | int32 | Версия пресета. |
Название и версию пресета, который вам надо использовать, можно получить у менеджеров Audiogram.
SynthesizeSpeechRequest
Настройки синтеза для синтеза речи.
| Поле | Тип | Описание |
|---|---|---|
| text | string | Текст для синтеза без SSML разметки (необходимо задавать только одно из полей – text или ssml). Если в поле text отправить на озвучку текст с SSML-тегами, Audiogram озвучит не только текст, но и теги. |
| ssml | string | Текст для синтеза в формате SSML (необходимо задавать только одно из полей – text или ssml). Если в поле ssml отправить на озвучку текст без SSML-разметки, вернется ошибка синтеза. |
| preset | Preset | Сообщение типа Preset (описано выше). |
StreamingSynthesizeSpeechResponse
Результат работы потокового синтеза речи.
| Поле | Тип | Описание |
|---|---|---|
| audio | bytes | Байты аудиоданных без заголовка, закодированные, как указано в encoding и заданной в sample_rate_hertz частотой дискретизации. Результат синтеза может прийти в нескольких ответах, по мере их синтезирования. |
| header | mts.ai.audiogram.response_header.v1.ResponseHeader | Сообщение типа ResponseHeader. |
SynthesizeSpeechResponse
Результат работы файлового синтеза речи.
| Поле | Тип | Описание |
|---|---|---|
| audio | bytes | В данном поле передаётся целый синтезированный аудиофайл с заголовками в формате, заданном в encoding и заданной в sample_rate_hertz частотой дискретизации. |
| header | mts.ai.audiogram.response_header.v1.ResponseHeader | Сообщение типа ResponseHeader. |
Использование SSML-разметки
SSML (Speech Synthesis Markup Language) – это язык разметки с фиксированным набором тегов и атрибутов, основанный на XML (но без тега xml в начале) и применяемый для синтеза речи. Его можно использовать, чтобы настроить скорость и звучание голоса.
Настройка проводится с помощью SSML-тегов, которые нужно указать в тексте, отправляемом на синтез.
Примечание: текст без тегов необходимо писать в поле SynthesizeSpeechRequest.text
На данный момент в Audiogram поддерживаются следующие SSML-теги:
| Тег | Описание | Параметры тега |
|---|---|---|
| speak | Обязательный тег для работы с SSML. В него должен быть обернут весь текст, отправляемый на синтез. При помощи дополнительных параметров может управлять скоростью и высотой тона (питчем) всего текста. Должен сопровождаться закрывающим тегом <speak> ... </speak>. |
(значения меньше единицы – медленнее, больше – быстрее). Данный параметр является опциональным. Если параметр не указан, его значение по умолчанию = 1.0
Отрицательные значения – низкий тон, положительные – высокий. Данный параметр является опциональным. Если параметр не указан, его значение по умолчанию = 0.0 |
| prosody | Этот тег позволяет управлять скоростью и высотой тона произвольного количества предложений и слов. Например, его можно использовать, чтобы изменить скорость и высоту тона прямой речи, тем самым выделяя ее на фоне речи рассказчика. Тег prosody имеет те же параметры, что и speak, и должен сопровождаться закрывающим тегом <prosody> ... </prosody>. Конструкцию <prosody> ... </prosody> можно использовать внутри конструкции <speak> ... </speak>. |
(значения меньше единицы – медленнее, больше – быстрее). Данный параметр является опциональным. Если параметр не указан, его значение по умолчанию = 1.0
Отрицательные значения – низкий тон, положительные – высокий. Данный параметр является опциональным. Если параметр не указан, его значение по умолчанию = 0.0 |
| break | Добавляет паузу произвольной длины в секундах в любое место. Этот тег является самозакрывающимся - <break />. |
Если вы указываете время паузы, необходимо обязательно вставить единицу измерения s (секунды) после количества секунд - <break time="2s"/> |
| voice | Указывает каким голосом и эмоцией необходимо озвучить текст. Доступен для синтеза только с помощью модели high_quality. | Мужские голоса: - gandzhaev - gavrilov Женские голоса: - borisova - kishchik
- neutral (спокойное состояние) - sad (грусть) - happy (радость) - angry (злость) - surprised (удивление) |
| say-as | Позволяет настроить озвучку разных категорий числительных. Более подробно этот тег описан в следующих секциях. | |
| phoneme | Позволяет озвучивать слова с помощью фонем. Более подробно этот тег описан в следующих секциях. | |
| emphasis | Позволяет интонационно выделить конкретное слово в речи. Доступен только для синтеза в файловом режиме. | Может иметь 2 значения: - medium (используется по умолчанию, если не указывать атрибут) - слово выделяется интонацией со средней силой; - strong - слово выделяется интонацией с повышенной силой. |
Параметры тегов указываются внутри треугольных скобок в виде
<название_тега название_параметра1="величина_параметра1" название_параметра2="величина_параметра2" закрытие тега>
Важно! Обратите внимание на кавычки, в которых указываются величины параметров. Необходимо использовать " (ASCII code 34).
Как поставить ударение в слове
Некоторые слова могут читаться по-разному. Например, «жАркое» или «жаркОе». При помощи SSML-разметки можно указать где надо делать ударение. Для этого после ударной гласной необходимо вставить {'} :
- «жа{'}ркое», чтобы получилось «жАркое»; и
- «жарко{'}е», чтобы получилось «жаркОе».
Важно! В фигурных скобках необходимо использовать одинарную кавычку ' (ASCII code 39).
Дополнительно
-
Если отправить какой-то текст без разметки на озвучку в поле text, а потом этот же текст обернуть только в тег и отправить на озвучку в поле ssml, то текст будет озвучен одинаково.
-
Если текст с SSML-тегами отправить на озвучку в поле text, то Audiogram озвучит не только текст, но и теги. Например, если отправить "Привет мир", то озвучка будет - "спик привет мир спик".
-
Знак ударения {'} синтез не считает ssml-тегом и он будет обработан как ударение и в text, и в ssml.
-
Синтез текста без SSML-разметки и синтез этого же текста с разметкой не будут различаться по нагрузке на систему.
Тег say-as для озвучки числительных
Русский язык относится к группе флективных языков. Это означает, что различные грамматические категории (род, число, падеж и т. д.) выражаются в пределах одного слова при помощи окончаний, суффиксов и других морфологических средств.
Такие нюансы делают русский язык не самым простым для озвучки машиной. ML-модели могут допускать ошибки, особенно при озвучке различных числительных. Избежать ошибок позволяет настройка параметров озвучки при помощи SSML-тега say-as.
В этом разделе рассмотрим как настроить озвучку числительных при помощи тега say-as, но сначала вспомним какие у числительных бывают род, число и падеж, разделим числительные на категории, а также рассмотрим структуру тега say-as.
Род
| Род | Описание | Пример |
|---|---|---|
| masculine | мужской род | один файл |
| feminine | женский род | одна папка |
| neuter | средний род | одно окружение |
Число
Числительные бывают единственного и множественного числа. По умолчанию числительные озвучиваются в единственном числе.
Если необходимо озвучить во множественном числе, это надо указать с помощью значения plural. Примеры представлены в дальнейших описаниях.
| Число | Описание | Пример |
|---|---|---|
| plural | множественное число | три файла |
Падеж
| Падеж | Описание | Пример |
|---|---|---|
| nominative | именительный - отвечает на вопросы кто?/что? | кто?/что? - один рубль |
| genitive | родительный - отвечает на вопросы кого?/чего? | нет кого?/чего? - пяти рублей |
| dative | дательный - отвечает на вопросы кому?/чему? | дать кому?/чему? - четырем администраторам |
| accusative | винительный - отвечает на вопросы кого?/что? | вижу кого?/что? - три файла |
| ablative | творительный - отвечает на вопросы кем?/чем? | установлено кем?/чем? - двумя администраторами |
| prepositional | предложный - отвечает на вопросы о ком?/о чем? | рассказываю о ком?/о чем? - о десяти рублях |
Категории числительных
| Категория числительных | Описание | Пример |
|---|---|---|
| cardinal | количественные числительные | один файл |
| ordinal | порядковые числительные | первый файл |
| date | дата | одиннадцатого августа две тысячи двадцать четвертого |
| time | время | одиннадцать часов двадцать четыре минуты |
| telephone | номер телефона | семь, девятьсот пятнадцать, сто девяносто, ноль семь, ноль два |
| money | денежная сумма | десять рублей пятьдесят копеек |
| split-by | произнесение числа по группам его цифр | сто двадцать три четыреста пятьдесят шесть |
| fraction | дробные числа | две третьих |
| decimal | десятичные дроби | одна целая одна десятая |
| non-roman | правильное произнесение букв, которые можно спутать с римскими цифрами | размер одежды икс эль |
Структура тега say-as
У тега say-as есть ряд обязательных и необязательных атрибутов:
| Элемент | Описание | Обязательность | Пример |
|---|---|---|---|
| say-as | Тег. | Обязательный | <speak><say-as interpret-as="cardinal" format="feminine_nominative">1</say-as> ложка</speak> |
| interpret-as | Атрибут, указывающий категорию числительного. | Обязательный | <speak><say-as interpret-as="cardinal" format="feminine_nominative">1</say-as> ложка</speak> |
| format | Атрибут, указывающий в каком числе, роде и падеже надо озвучить числительное. Если числительное в единственном числе, нужно указать род и падеж. Если числительное во множественном числе, нужно указать plural и падеж. |
Необязательный | <speak><say-as interpret-as="cardinal" format="feminine_nominative">1</say-as> ложка</speak> |
| detail | Дополнительный атрибут, его описание представлено в категориях числительных, в которых он присутствует. | Необязательный | <speak><say-as interpret-as="cardinal" format="nominative" detail = "3">1</say-as> 12345 </speak> |
Рассмотрим структуру тега say-as на конкретном примере. Представим, что нам нужно озвучить фразу "1 ложка". В этом примере 1 - это количественное (cardinal) числительное в единственном числе. Так как слово "ложка" женского рода и в именительном падеже, нужно, чтобы цифра 1 была озвучена как "одна". Действуем следующим образом:
-
Сначала обрамляем фразу в тег speak:
<speak>1 ложка</speak> -
Теперь добавляем тег say-as и его обязательный атрибут interpret-as. Это нужно сделать вокруг числительного. Слово "ложка" должно быть за их пределами:
<speak><say-as interpret-as="cardinal">1</say-as> ложка</speak> -
По умолчанию, если не указать атрибут format, числительное озвучивается в мужском роде, единственном числе и именительном падеже. То есть, если мы оставим как было сделано на шаге 2, фраза будет озвучена как "один ложка". Это неправильно, поэтому добавляем атрибут format, в котором указываем женский род и именительный падеж:
<speak><say-as interpret-as="cardinal" format="feminine_nominative">1</say-as> ложка</speak>
Теперь фраза будет озвучена правильно - "одна ложка".
А теперь рассмотрим пример со множественным числом. Представим, что нам нужно озвучить фразу "нет 5 ложек". В этом примере 5 - количественное (cardinal) числительное. Существительное представлено во множественном числе и родительном (genitive) падеже. Числительное надо озвучить также. Действуем следующим образом:
-
Сначала обрамляем фразу в тег speak:
<speak>нет 5 ложек</speak> -
Теперь добавляем тег say-as и его обязательный атрибут interpret-as. Это нужно сделать вокруг числительного. Слова "нет" и "ложек" должны быть за их пределами:
<speak>нет <say-as interpret-as="cardinal">5</say-as> ложек</speak> -
По умолчанию, если не указать атрибут format, числительное озвучивается в мужском роде, единственном числе и именительном падеже. То есть, если мы оставим как было сделано на шаге 2, фраза будет озвучена как "нет пять ложек". Это неправильно, поэтому добавляем атрибут format, в котором указываем множественное число и родительный падеж:
<speak>нет <say-as interpret-as="cardinal" format="plural_genitive">5</say-as> ложек</speak>
Теперь фраза будет озвучена правильно - "нет пяти ложек".
cardinal
| Описание | Вид | Значение по умолчанию |
|---|---|---|
| Произнесение количественного числительного в указанном роде, числе и падеже. | <speak><say-as interpret-as="cardinal" format="feminine_nominative">1</say-as> ложка</speak> |
Количественное числительное произносится в masculine nominative (в единственном числе). |
Примеры использования:
| Оформление | Как будет озвучено | Комментарий |
|---|---|---|
<speak><say-as interpret-as="cardinal" format="accusative">1</say-as></speak> |
<speak>одного</speak> |
Не указан род в format, раскрываем в masculine accusative. |
<speak><say-as interpret-as="cardinal" format="dative_plural">1</say-as></speak> |
<speak>одним</speak> |
Изменение порядка аргументов внутри format ошибкой не считается. Указаны число (вместо рода) и падеж. Числительное будет озвучено в plural dative. |
<speak><say-as interpret-as="cardinal" format="feminine">1</say-as></speak> |
<speak>одна</speak> |
Не указан падеж в format, раскрываем в feminine nominative. |
<speak><say-as interpret-as="cardinal" format="masculine_plural_dative">1</say-as></speak> |
Error, <speak>один</speak> |
Неконсистентный тег (в format указаны и род, и множественное число) - числительное будет озвучено по умолчанию, но параллельно в лог будет сделана запись об ошибке. |
<speak><say-as interpret-as="cardinal" format="plural_dative">1</say-as></speak> |
<speak>одним</speak> |
Указаны множественное число (вместо рода) и падеж, хотя числительное - 1. Будет озвучено в plural dative. |
<speak><say-as interpret-as="cardinal" format="plural_dative">1</say-as></speak> ложку |
Error |
Произойдет ошибка синтеза, потому что слово "ложку" находится за пределами тега speak. |
<speak><say-as interpret-as="cardinal" format="plural_dative">1 ложку</say-as></speak> |
Error, <speak>одним</speak> |
Неконсистентный тег (слово "ложку" находится внутри тега say-as) - из тега уберется все, кроме числительного, после чего оно будет озвучено по значению format. Также параллельно в лог будет сделана запись об ошибке. |
<speak><say-as interpret-as="cardinal">1</say-as></speak> |
<speak>один</speak> |
Тут не указан format, значит раскрываем по умолчанию в masculine nominative. |
<speak><say-as interpret-as="cardinal">-1</say-as></speak> |
<speak>минус один</speak> |
Если перед числом стоит минус, он будет озвучен. |
<speak>нет <say-as interpret-as="cardinal" format="accusative">1</say-as> ботинка</speak> |
<speak>нет одного ботинка</speak> |
Число внутри тега следует писать без пробелов. Так как в format не указан род, то числительное будет озвучено в masculine accusative. Если необходимо добавить контекст (правый, левый, правый и левый), то его следует писать, сохраняя пробелы как в обычном тексте. |
<speak>нет <say-as interpret-as="cardinal" format="genitive">1</say-as> ботинков</speak> |
<speak>нет одного ботинков</speak> |
Теги не подразумевают склонение контекста. Так как в format не указано множественное число, то числительное будет озвучено в masculine genitive. |
ordinal
| Описание | Вид | Значение по умолчанию |
|---|---|---|
| Произнесение порядкового числительного в указанном роде, числе и падеже. | <speak><say-as interpret-as="ordinal" format="feminine_nominative">1</say-as> этаж</speak> |
Порядковое числительное произносится в masculine nominative (в единственном числе). |
Примеры использования:
| Оформление | Как будет озвучено | Комментарий |
|---|---|---|
<speak><say-as interpret-as="cardinal">1</say-as></speak> |
<speak>первый</speak> |
Тут не указан format, значит раскрываем по умолчанию в masculine nominative. |
<speak><say-as interpret-as="cardinal">-1</say-as></speak> |
<speak>минус первый</speak> |
Если перед числом стоит минус, он будет озвучен. |
<speak><say-as interpret-as="cardinal" format="feminine">1</say-as></speak> |
<speak>первая</speak> |
Не указан падеж в format, раскрываем в feminine nominative. |
<speak><say-as interpret-as="cardinal" format="accusative">1</say-as></speak> |
<speak>первого</speak> |
Не указан род в format, раскрываем в masculine accusative. |
<speak><say-as interpret-as="cardinal" format="plural_dative">1</say-as></speak> |
<speak>первым</speak> |
Указаны число (вместо рода) и падеж, раскрываем в plural dative. |
<speak>нет <say-as interpret-as="cardinal" format="accusative">1</say-as> этажа</speak> |
<speak>нет первого этажа</speak> |
Число внутри тега следует писать без пробелов. Если необходимо добавить контекст, то его следует писать, сохраняя пробелы как в обычном тексте. |
<speak><say-as interpret-as="cardinal" format="dative_plural">1</say-as></speak> |
<speak>первым</speak> |
Изменение порядка аргументов внутри format не считается ошибкой. Указаны число (вместо рода) и падеж, поэтому числительное будет озвучено в plural dative. |
<speak><say-as interpret-as="cardinal" format="masculine_plural_dative">1</say-as></speak> |
Error, <speak>первый</speak> |
Неконсистентный тег (в format указаны и род и множественное число) - числительное будет озвучено по умолчанию. Параллельно в лог будет сделана запись об ошибке. |
<speak><say-as interpret-as="cardinal" format="plural_dative">1 этажам</say-as></speak> |
Error, <speak>первым</speak> |
Неконсистентный тег (слово "этажам" находится внутри тега say-as) - из тега уберется все, кроме числительного, после чего оно будет озвучено по значению format. Также параллельно в лог будет сделана запись об ошибке. |
<speak><say-as interpret-as="cardinal" format="plural_dative">1</say-as></speak> этажам |
Error |
Произойдет ошибка синтеза - слово "этажам" находится за пределами тега speak. |
<speak>нет <say-as interpret-as="cardinal" format="genitive">1</say-as> этажей</speak> |
<speak>нет первого этажей</speak> |
Теги не подразумевают склонение контекста. Так как в format не указано множественное число, то числительное будет озвучено в masculine genitive. |
date
| Описание | Вид | Значение по умолчанию |
|---|---|---|
| Произнесение дат в указанном формате. | <speak><say-as interpret-as="date" format="nominative" detail="d.m.y">11.08.2024</say-as></speak> |
d.m.y в именительном падеже. |
| detail | Описание |
|---|---|
| d.m.y (d-m-y, d/m/y) | Любые комбинации дня, месяца и года, разделенные одним из 3 символов "." или "-" или "/" |
| _fulldate | Полная озвучка даты. |
| _word | Добавление слова "год"/"года" к дате. |
| _fulldate и _word (можно использовать вместе) | Полная озвучка даты и добавление слова "год"/"года" к дате. |
Примеры использования:
| Оформление | Как будет озвучено | Комментарий |
|---|---|---|
<speak><say-as interpret-as="date">11.08.2024</say-as></speak> |
<speak>одиннадцатое августа две тысячи двадцать четвертый</speak> |
Надо озвучить день, месяц и год. detail не указан, по умолчанию d.m.y format не указан, по умолчанию дата будет озвучена в именительном падеже |
<speak><say-as interpret-as="date" detail="d.m.y">11.08.2024</say-as></speak> |
<speak>одиннадцатое августа две тысячи двадцать четвертый</speak> |
В detail день, месяц и год указаны с разделителем. format не указан, по умолчанию дата будет озвучена в именительном падеже |
<speak><say-as interpret-as="date" format="genitive" detail="d.m.y">11.08.2024</say-as></speak> |
<speak>одиннадцатого августа две тысячи двадцать четвертого</speak> |
В detail день, месяц и год указаны с разделителем. format указан - дата будет озвучена в родительном падеже. |
<speak><say-as interpret-as="date" detail="d.m">11.08</say-as></speak> |
<speak>одиннадцатое августа</speak> |
В detail день и месяц указаны с разделителем. format не указан - по умолчанию дата будет озвучена в именительном падеже. |
<speak><say-as interpret-as="date" detail="y">2024</say-as></speak> |
<speak>две тысячи двадцать четвертый</speak> |
В detail только год, разделитель не нужен и не указывается. format не указан - по умолчанию озвучка будет выполнена в именительном падеже. |
<speak><say-as interpret-as="date" detail="m.y">08.2024</say-as></speak> |
<speak>август две тысячи двадцать четвертый</speak> |
В detail месяц и год указаны с разделителем. format не указан - по умолчанию дата будет озвучена в именительном падеже. |
<speak><say-as interpret-as="date" detail="m">08</say-as></speak> |
<speak>август</speak> |
в detail только месяц , разделитель не нужен и не указывается. format не указан, по умолчанию в именительном падеже. |
<speak><say-as interpret-as="date" detail="d">11</say-as></speak> |
<speak>одиннадцатое</speak> |
в detail только день, разделитель не нужен и не указывается. format не указан, по умолчанию озвучка будет выполнена в именительном падеже. |
<speak><say-as interpret-as="date" detail="d-m-y">11-08-2024</say-as></speak> |
<speak>одиннадцатое августа две тысячи двадцать четвертый</speak> |
Используется разделитель (-) format не указан - по умолчанию озвучка будет выполнена в именительном падеже. |
<speak><say-as interpret-as="date" detail="d/m/y">11/08/2024</say-as></speak> |
<speak>одиннадцатое августа две тысячи двадцать четвертый</speak> |
Используется разделитель (/) format не указан - по умолчанию озвучка будет выполнена в именительном падеже. |
<speak><say-as interpret-as="date" detail="m/d/y">08/11/2024</say-as></speak> |
<speak>одиннадцатое августа две тысячи двадцать четвертый</speak> |
"американский" формат дат. format не указан - по умолчанию озвучка будет выполнена в именительном падеже. |
<speak><say-as interpret-as="ordinal" detail="y">2024</say-as></speak> |
Error, <speak>две тысячи двадцать четыре</speak> |
Неконсистентный тег - число будет озвучено по умолчанию как cardinal masculine nominative |
<speak><say-as interpret-as="date" detail="m.y_fulldate">08.24</say-as></speak> |
<speak>август две тысячи двадцать четыре </speak> |
|
<speak><say-as interpret-as="date" detail="d.m.y_word">11.08.2024</say-as></speak> |
<speak>одиннадцатое августа две тысячи двадцать четвертый год</speak> |
Для корректной озвучки необходимо добавить format и указать правильный падеж. |
<speak><say-as interpret-as="date" detail="d.m.y_word_fulldate">11.08.24</say-as></speak> |
<speak>одиннадцатое августа две тысячи двадцать четвертый год</speak> |
Для корректной озвучки необходимо добавить format и указать правильный падеж. |
time
| Описание | Вид | Значение по умолчанию |
|---|---|---|
| Произнесение времени в указанном формате. | <speak><say-as interpret-as="time" format="nominative" detail="h:m">11:24</say-as></speak> |
Часы и минуты через : в именительном падеже (h:m). |
| detail | Описание |
|---|---|
| h:m | Указание формата (hm: часы и минуты или hms: часы, минуты, секунды) и разделителя (: . -) |
Примеры использования:
| Оформление | Как будет озвучено | Комментарий |
|---|---|---|
<speak><say-as interpret-as="time" detail="h:m">11:24</say-as></speak> |
<speak>одиннадцать часов двадцать четыре минуты</speak> |
В detail указаны часы и минуты. format не указан - по умолчанию время будет озвучено в именительном падеже. |
<speak><say-as interpret-as="time" detail="h:m:s">11:24:03</say-as></speak> |
<speak>одиннадцать часов двадцать четыре минуты три секунды</speak> |
В detail указаны часы, минуты и секунды. format не указан - по умолчанию время будет озвучено в именительном падеже. |
<speak><say-as interpret-as="time" format="genitive" detail="h:m">11:24</say-as></speak> |
<speak>одиннадцати часов двадцати четырёх минут</speak> |
Указаны detail и format. Время будет озвучено в родительном падеже. |
<speak><say-as interpret-as="time">11:24</say-as></speak> |
<speak>одиннадцать часов двадцать четыре минуты</speak> |
Не указан ни format, ни detail. По умолчанию время будет озвучено в именительном падеже в формате h:m |
telephone
| Описание | Вид | Значение по умолчанию |
|---|---|---|
| Озвучка российских телефонных номеров (русский формат и полные номера 10-11 цифр; номер начинается с +7, 8 или кода оператора) | <speak><say-as interpret-as="telephone" detail="RU">+7 (909) 2282424</say-as></speak> |
По умолчанию обрабатываются номера телефонов 9-11 цифр (RU). Без + (либо выносить его за say-as) |
Примеры использования:
| Оформление | Как будет озвучено | Комментарий |
|---|---|---|
<speak><say-as interpret-as="telephone">7 (915) 1900702</say-as></speak> |
<speak>семь, девятьсот пятнадцать, сто девяносто ноль семь ноль два</speak> |
|
<speak><say-as interpret-as="telephone" detail="RU">7 (915) 1900702</say-as></speak> |
<speak>семь девятьсот пятнадцать сто девяносто ноль семь ноль два</speak> |
|
<speak><say-as interpret-as="telephone">79151900702</say-as></speak> |
<speak>семь девятьсот пятнадцать сто девяносто ноль семь ноль два</speak> |
|
<speak><say-as interpret-as="telephone">7-915-190-07-02</say-as></speak> |
<speak>семь девятьсот пятнадцать сто девяносто ноль семь ноль два</speak> |
|
<speak><say-as interpret-as="telephone">8 (915) 1900702</say-as></speak> |
<speak>восемь девятьсот пятнадцать сто девяносто ноль семь ноль два</speak> |
|
<speak><say-as interpret-as="telephone">9151900702</say-as></speak> |
<speak>девятьсот пятнадцать сто девяносто ноль семь ноль два</speak> |
|
<speak><say-as interpret-as="telephone">7021</say-as></speak><speak>девятьсот пятнадцать сто девяносто ноль семь ноль два</speak> |
<speak>семь тысяч двадцать один</speak> |
Категория telephone не работает с короткими номерами. Если нужно озвучить как "семьдесят двадцать один" - используйте категорию split-by. |
<speak><say-as interpret-as="telephone">+7 (915) 1900702</say-as></speak> |
Warning, <speak> семь девятьсот пятнадцать сто девяносто ноль семь ноль два</speak> |
Важно выносить + за тэг say-as. Правильно: <speak>+<say-as interpret-as="telephone">7 (915) 1900702</say-as></speak> |
money
| Описание | Вид | Значение по умолчанию |
|---|---|---|
| Произнесение денежной суммы (с возможностью добавления валюты). | <speak><say-as interpret-as="money" format="genitive" detail="RUB">10.65</say-as></speak> |
RUB (рубли) |
| detail | Описание |
|---|---|
| RUB | Российские рубли и копейки |
| USD | Американские доллары и центы |
Примеры использования:
| Оформление | Как будет озвучено | Комментарий |
|---|---|---|
<speak><say-as interpret-as="money" format="nominative"detail="RUB">10.65</say-as></speak> |
<speak>десять рублей шестьдесят пять копеек</speak> |
|
<speak><say-as interpret-as="money" format="nominative"detail="RUB">-10.65</say-as></speak> |
<speak>минус десять рублей шестьдесят пять копеек</speak> |
Если перед числом стоит минус, он будет озвучен. |
<speak><say-as interpret-as="money" format="nominative"detail="RUB">10</say-as></speak> |
<speak>десять рублей</speak> |
Если передается число без точки, то оно будет озвучено как "столько-то рублей". |
<speak><say-as interpret-as="money" format="nominative"detail="RUB">0.65</say-as></speak> |
<speak>шестьдесят пять копеек</speak> |
|
<speak><say-as interpret-as="money" format="nominative"detail="RUB">10.00</say-as></speak> |
<speak>десять рублей</speak> |
|
<speak>нет <say-as interpret-as="money">10.65</say-as></speak> |
<speak>нет десять рублей шестьдесят пять копеек</speak> |
Теги не подразумевают склонения в зависимости от контекста. По умолчанию число будет озвучено в именительном падеже. Чтобы его корректно озвучить в родительном падеже, необходимо добавить атрибут format и указать в нем родительный падеж (genitive). |
<speak><say-as interpret-as="money" format="nominative"detail="USD">10.65</say-as></speak> |
<speak>десять долларов шестьдесят пять центов</speak> |
|
<speak><say-as interpret-as="money">10.65</say-as></speak> |
<speak>десять рублей шестьдесят пять копеек</speak> |
split-by
| Описание | Вид | Значение по умолчанию |
|---|---|---|
| Озвучка чисел группами. | <speak><say-as interpret-as="split-by" detail="3">123456</say-as></speak> |
По умолчанию число озвучивается группами по 1 цифре. |
| detail | Описание |
|---|---|
| 1, 2 или 3 | Указывает как озвучить большое число - по 1, 2 или 3 цифры. Принимает значение от 1 до 3. |
Примеры использования:
| Оформление | Как будет озвучено | Комментарий |
|---|---|---|
<speak><say-as interpret-as="split-by" detail="3">123456</say-as></speak> |
<speak>сто двадцать три четыреста пятьдесят шесть</speak> |
|
<speak><say-as interpret-as="split-by" detail="2">123456</say-as></speak> |
<speak>двенадцать тридцать четыре пятьдесят шесть</speak> |
|
<speak><say-as interpret-as="split-by" detail="1">123456</say-as></speak> |
<speak>один два три четыре пять шесть</speak> |
|
<speak><say-as interpret-as="split-by" detail="3">12345</say-as></speak> |
<speak>сто двадцать три сорок пять</speak> |
Если число не кратно шагу, то оставшаяся последовательность читается отдельно. |
fraction
| Описание | Вид | Значение по умолчанию |
|---|---|---|
| Озвучка дробей. | <speak><say-as interpret-as="fraction" format="nominative">2/3</say-as></speak> |
По умолчанию озвучка осуществляется в именительном падеже без специфичных слов вроде "половина/четверть/треть". |
Примеры использования:
| Оформление | Как будет озвучено | Комментарий |
|---|---|---|
<speak><say-as interpret-as="fraction">2/3</say-as></speak> |
<speak>две третьих</speak> |
|
<speak><say-as interpret-as="fraction">-2/3</say-as></speak> |
<speak>минус две третьих</speak> |
|
<speak><say-as interpret-as="fraction">1/2</say-as></speak> |
<speak>одна вторая</speak> |
|
<speak><say-as interpret-as="fraction">2/3</say-as> чашками</speak> |
<speak>две третьих чашками</speak> |
Тэги не подразумевают склонения контекста. Озвучка выполняется в соответствии со значениями атрибутов. Если format не указан, то по умолчанию озвучка выполняется в именительном падеже. |
decimal
| Описание | Вид | Значение по умолчанию |
|---|---|---|
| Озвучка десятичных дробей. "2/3" не будет обрабатываться в рамках decimal (обработается в рамках fraction). "0.25 стакана" не будет озвучено как "четверть стакана". |
<speak><say-as interpret-as="decimal" format="nominative">1.1</say-as></speak> |
По умолчанию озвучка осуществляется в именительном падеже без специфичных слов вроде "половина/четверть/треть". |
Примеры использования:
| Оформление | Как будет озвучено | Комментарий |
|---|---|---|
<speak><say-as interpret-as="decimal">1.1</say-as></speak> |
<speak>одна целая одна десятая</speak> |
|
<speak><say-as interpret-as="decimal">-1.1</say-as></speak> |
<speak>минус одна целая одна десятая</speak> |
|
<speak><say-as interpret-as="decimal">1.10</say-as></speak> |
<speak>одна целая десять сотых</speak> |
Округления не будет. Если оно нужно, необходимо подать на вход "1.1" вместо "1.10". |
<speak><say-as interpret-as="decimal" format="genitive">1.1</say-as></speak> |
<speak>одной целой одной десятой</speak> |
|
<speak>нет <say-as interpret-as="decimal" format="genitive">1.1</say-as> миллионах</speak> |
<speak>нет одной целой одной десятой миллионах</speak> |
Контекст не склоняется. |
non-roman
| Описание | Вид | Значение по умолчанию |
|---|---|---|
| Озвучка элементов, которые можно принять за римские цифры. Например, "витамин C, размер M, тариф X". |
<speak>Раззмер <say-as interpret-as="non-roman">M</say-as></speak> |
Примеры использования:
| Оформление | Как будет озвучено | Комментарий |
|---|---|---|
<speak>Размер<say-as interpret-as="non-roman"> M</say-as></speak> |
<speak>Размер эм</speak> |
Любые слова, не относящиеся к non-roman числовым значениям должны находится ВНЕ тега say-as. |
<speak>Размер<say-as interpret-as="non-roman"> XL</say-as></speak> |
<speak>Размер икс эль</speak> |
Non-roman значения будут представлены в буквенном виде. |
Тег phoneme для озвучки с помощью фонем
В русском языке, как и в других языках, существуют различные фонетические процессы, из-за которых некоторые слова могут писаться и произноситься по-разному. К таким процессам относятся:
- Оглушение - пишем "книжка", но произносим "кни[ш]ка".
- Озвончение - пишем "отбор", но произносим "о[д]бор".
- Смягчение - пишем "лесть", но в речи смягчаем букву "с" - "ле[с']ть".
- и другие...
Если Вас не устраивает как Audiogram озвучивает какое-то слово, можно использовать SSML-тег phoneme для правильной озвучки при помощи фонем. Примечание: эта функциональность поддерживается только для русского языка.
В этом разделе вкратце разберем что такое фонема и как использовать тег phoneme.
Буквы, звуки и фонемы
В русском языке буквы делятся на гласные и согласные. Каждая буква дает какой-то звук.
Но, если обратить внимание, слышно, что одна и та же буква может давать разные звуки. Например, буква "Я" в слове "клятва" звучит как "а", а в слове "пяти" (не хватает пяти рублей) буква "Я" звучит как "и". А в слове "входят" буква "Я" звучит вроде бы как в "клятве", но все равно не так, как будто не так ярко.
Получается, что буквы обозначают некие множества звуков. Эти множества звуков называются фонемами.
Структура тега phoneme
У тега phoneme есть ряд обязательных атрибутов:
| Элемент | Описание | Обязательность | Пример |
|---|---|---|---|
| phoneme | Тег. Важно! В рамках 1 тега должно быть только 1 слово. |
Обязательный | <speak> <phoneme alphabet="avan" ph="п р' и в' е+ т"> привет</phoneme>! У тебя три непрочитанных сообщения </speak> |
| alphabet="" | Атрибут, указывающий какую фонемную нотацию следует использовать. Важно! Audiogram поддерживает нотацию Аванесова (необходимо указать alphabet = "avan") |
Обязательный | <speak> <phoneme alphabet="avan" ph="п р' и в' е+ т"> привет</phoneme>! У тебя три непрочитанных сообщения </speak> |
| ph="" | Атрибут, содержащий транскрипцию слова, которое необходимо озвучить. | Обязательный | <speak> <phoneme alphabet="avan" ph="п р' и в' е+ т"> привет</phoneme>! У тебя три непрочитанных сообщения </speak> |
Рассмотрим структуру тега phoneme на конкретном примере. Сразу стоит отметить, что работать с тегом phoneme рекомендуется сотруднику, обладающему знаниями о фонетических процессах в русском языке. Это важно, чтобы прописать корректную транскрипцию озвучиваемого слова в атрибуте ph.
Представим, что нам нужно озвучить фразу "Привет, дед!". Допустим, нам не нравится, что в озвучке по умолчанию вторая буква "д" в слове "дед" звучит звонко - "деД" - и мы хотим с помощью тега phoneme ее оглушить, чтобы она звучала естественно - "деТ".
Действуем следующим образом:
-
Сначала обрамляем фразу в тег speak:
<speak>Привет, дед!</speak> -
Теперь добавляем тег phoneme вокруг слова "дед". Помним, что в 1 теге должно быть 1 слово:
<speak>Привет, <phoneme>дед</phoneme>!</speak> -
Добавляем обязательный атрибут alphabet. В нем прописываем avan, так как поддерживается нотация Аванесова:
<speak>Привет, <phoneme alphabet="avan">дед</phoneme>!</speak> -
Добавляем обязательный атрибут ph (список поддерживаемых фонем по концепции Аванесова представлен в следующем разделе).
Первая буква "д" смягчается последующей гласной, поэтому она даст мягкий звук [д']. Буква "е" под ударением - она даст звук [е+]. Вторая буква "д" в речи оглушается, поэтому она даст не твердый звук [д], а твердый звук [т]. В итоге получается:
<speak>Привет, <phoneme alphabet="avan" ph="д' е+ т">дед</phoneme>!</speak>Теперь слово "дед" будет произнесено корректно - с глухим звуком "т" на конце - "деТ".
Список поддерживаемых фонем
| Буква | Фонема (концепция Аванесова) | Пример слова и его транскрипции |
|---|---|---|
| А, а (в ударном слоге) | а+ | два [д в а+] |
| А, а (в предударном слоге) | а | работал [р а б о+ т ъ л] |
| А, а (в остальных случаях) | ъ | оплачивали [а п л а+ ч и в ъ л' и] |
| Б, б (твердая) | б | более [б о+ л' ь й ь] |
| Б, б (мягкая) | б' | рубежа [р у б' и ж а+] |
| В, в (твердая) | в | два [д в а+] |
| В, в (мягкая) | в' | ведущих [в' и д у+ щ и х] |
| Г, г (твердая) | г | говорится [г ъ в а р' и+ ц ъ] |
| Г, г (мягкая) | г' | агентства [а г' е+ н с т в ъ] |
| Д, д (твердая) | д | два [д в а+] |
| Д, д (мягкая) | д' | деньги [д' е+ н' г' и] |
| Е, е (в ударном слоге) | е+ | деньги [д' е+ н' г' и] |
| Е, е (в предударном слоге) | и | инвестировать [ы н в' и с' т' и+ р ъ в ъ т'] |
| Е, е (в остальных случаях) | ь | мнение [м н' е+ н' и й ь] |
| Ё, ё (в ударном слоге) | о+ | счёт [щ о+ т] |
| Ё, ё (в предударном слоге) | и | сёгун [с' и г у+ н] |
| Ё, ё (в остальных случаях) | ь | сёрфингист [с' ь р ф' и н г' и+ с т] |
| Ж, ж | ж | менеджера [м э+ н ъ д ж ъ р ъ] |
| З, з (твердая) | з | развитии [р а з в' и+ т' и и] |
| З, з (мягкая) | з' | землю [з' е+ м л' у] |
| И, и (в ударном слоге) | и+ | пяти [п' и т' и+] |
| И, и (в предударном слоге) | и | финтех [ф' и н' т' е+ х] |
| И, и (в остальных случаях) | и | деньги [д' е+ н' г' и] |
| Й, й | й | новой [н о+ в ъ й] |
| К, к (твердая) | к | как [к а+ к] |
| К, к (мягкая) | к' | покидают [п ъ к' и д а+ й у т] |
| Л, л (твердая) | л | работал [р а б о+ т ъ л] |
| Л, л (мягкая) | л' | оплачивали [а п л а+ ч и в ъ л' и] |
| М, м (твердая) | м | мнение [м н' е+ н' и й ь] |
| М, м (мягкая) | м' | минут [м' и н у+ т] |
| Н, н (твердая) | н | минут [м' и н у+ т] |
| Н, н (мягкая) | н' | деньги [д' е+ н' г' и] |
| О, о (в ударном слоге) | о+ | работал [р а б о+ т ъ л] |
| О, о (в предударном слоге) | а | оплачивали [а п л а+ ч и в ъ л' и] |
| О, о (в остальных случаях) | ъ | сосредоточатся [с ъ с р' ь д а т о+ ч ь ц ъ] |
| О, о (в безударной позиции без редукции) | о | поэзия [п о э+ з' и й ь] |
| П, п (твердая) | п | поступили [п ъ с т у п' и+ л' и] |
| П, п (мягкая) | п' | пяти [п' и т' и+] |
| Р, р (твердая) | р | работал [р а б о+ т ъ л] |
| Р, р (мягкая) | р' | сосредоточатся [с ъ с р' ь д а т о+ ч ь ц ъ] |
| С, с (твердая) | с | если [й е+ с л' и] |
| С, с (мягкая) | с' | обратитесь [а б р а т' и+ т' ь с'] |
| Т, т (твердая) | т | работал [р а б о+ т ъ л] |
| Т, т (мягкая) | т' | пяти [п' и т' и+] |
| У, у (в ударном слоге) | у+ | минут [м' и н у+ т] |
| У, у (в предударном слоге) | у | улучшать [у л у ч ш а+ т'] |
| У, у (в остальных случаях) | у | планирует [п л а н' и+ р у й ь т] |
| Ф, ф (твердая) | ф | штрафы [ш т р а+ ф ы] |
| Ф, ф (мягкая) | ф' | финтех [ф' и н' т' е+ х] |
| Х, х (твердая) | х | финтех [ф' и н' т' е+ х] |
| Х, х (мягкая) | х' | химия [х' и+ м' и й ь] |
| Ц, ц | ц | юстиции [й у с' т' и+ ц ы и] |
| Ч, ч | ч | тысяч [т ы+ с' ь ч] |
| Ш, ш | ш | шестом [ш ы с т о+ м] |
| Щ, щ | щ | ведущих [в' и д у+ щ и х] |
| Ы, ы (в ударном слоге) | ы+ | вы [в ы+] |
| Ы, ы (в предударном слоге) | ы | подыграть [п ъ д ы г р а+ т'] |
| Ы, ы (в остальных случаях) | ы | отдых [о+ д д ы х] |
| Э, э (в ударном слоге) | э+ | этот [э+ т ъ т] |
| Э, э (в предударном слоге) | ы | экстракция [ы к с т р а+ к ц и й ь] |
| Э, э (в остальных случаях) | ъ | Аэрофлот [а ъ р а ф л о+ т] |
| Э, э (в безударной позиции без редукции) | э | алоэ [а л о+ э] |
| Ю, ю (в ударном слоге) | у+ | Юля [й у+ л' ь] |
| Ю, ю (в предударном слоге) | у | включая [ф к л' у ч а+ й ь] |
| Ю, ю (в остальных случаях) | у | ключевых [к л' у ч и в ы+ х] |
| Я, я (в ударном слоге) | а+ | яма [й а+ м ъ] |
| Я, я (в предударном слоге) | и | пяти [п' и т' и+] |
| Я, я (в остальных случаях) | ь | входят [ф х о+ д' ь т] |
Тег emphasis для выделения слов интонацией
Иногда в речи необходимо интонационно выделить некое слово, чтобы сделать правильный смысловой акцент. Например, вопрос "Куда мы сегодня пойдем?". В зависимости от того, что хочет узнать спрашивающий, можно сделать ударение на одном из 3 слов:
- КУДА мы сегодня пойдем?
- Куда МЫ сегодня пойдем?
- Куда мы СЕГОДНЯ пойдем?
Тег emphasis позволяет выделить нужное слово с помощью интонации. Далее рассмотрим структуру тега и как его использовать.
Структура тега emphasis
У тега emphasis есть один необязательный атрибут:
| Элемент | Описание | Обязательность | Пример |
|---|---|---|---|
| emphasis | Тег. Примечание: В рамках 1 предложения рекомендуется использовать 1 тег, а в рамках тега - указать 1 слово, которое необходимо выделить интонацией. Если использовать несколько тегов или указать несколько слов, которые необходимо выделить, возможны ошибки в интонации и произношении. |
Обязательный | <speak>Куда мы <emphasis>сегодня</empasis>пойдем?</speak> (ударение будет сделано на слове "сегодня") |
| strength="" | Атрибут, позволяющий указать с какой силой необходимо сделать ударение. Может иметь 2 значения: - medium (используется по умолчанию, если не указывать атрибут) - слово выделяется интонацией со средней силой; - strong - слово выделяется интонацией с повышенной силой. |
Необязательный | <speak>Куда мы <emphasis strength="strong">сегодня</empasis>пойдем?</speak> (ударение будет сделано на слове "сегодня" с повышенной силой) |
Примечание: Внутри тега emphasis могут быть вложены теги phoneme, say-as, prosody, break, voice. Однако тег emphasis внутри них находиться не может.
Примеры использования SSML-тегов
Пример 1 (весь текст с SSML-разметкой, отправляемый на синтез, должен быть обернут в тег speak):
<speak>Глава 1.
Жаркое лето изменило все планы. Было решено сэкономить на поездке к морю и провести весь отпуск на даче.
«Я уверен вам понравится, поставим бассейн, будем шашлыки жарить» - резюмировал Георгий.
Супруга не разделяла радость: «Я чувствую комары нас съедят».</speak>
Пример 2 (добавляем паузу после «Глава 1.»):
<speak>Глава 1. <break time="1.5s"/>
Жаркое лето изменило все планы. Было решено сэкономить на поездке к морю и провести весь отпуск на даче.
«Я уверен вам понравится, поставим бассейн, будем шашлыки жарить» - резюмировал Георгий.
Супруга не разделяла радость: «Я чувствую комары нас съедят».</speak>
Пример 3 (ставим ударение, чтобы Audiogram правильно произнес «жАркое», а не «жаркОе»):
<speak>Глава 1. <break time="1.5s"/>
Жа{'}ркое лето изменило все планы. Было решено сэкономить на поездке к морю и провести весь отпуск на даче.
«Я уверен вам понравится, поставим бассейн, будем шашлыки жарить» - резюмировал Георгий.
Супруга не разделяла радость: «Я чувствую комары нас съедят».</speak>
Пример 4 (укажем высоту и скорость произнесения всего текста):
<speak speed="0.8" pitch="-0.4">Глава 1. <break time="1.5s"/>
Жа{'}ркое лето изменило все планы. Было решено сэкономить на поездке к морю и провести весь отпуск на даче.
«Я уверен вам понравится, поставим бассейн, будем шашлыки жарить» - резюмировал Георгий.
Супруга не разделяла радость: «Я чувствую комары нас съедят».</speak>
Пример 5 (изменим высоту и скорость произнесения прямой мужской речи):
<speak speed="0.8" pitch="-0.4">Глава 1. <break time="1.5s"/>
Жа{'}ркое лето изменило все планы. Было решено сэкономить на поездке к морю и провести весь отпуск на даче.
<prosody speed="1.1" pitch="-0.2">«Я уверен вам понравится, поставим бассейн, будем шашлыки жарить»</prosody> - резюмировал Георгий.
Супруга не разделяла радость: «Я чувствую комары нас съедят».</speak>
Пример 6 (если для синтеза речи используется модель high_quality, можно указать какими голосами и эмоциональной окраской озвучить прямую речь):
<speak speed="0.8" pitch="-0.4">Глава 1. <break time="1.5s"/>
Жа{'}ркое лето изменило все планы. Было решено сэкономить на поездке к морю и провести весь отпуск на даче.
<prosody speed="1.1" pitch="-0.2"><voice name="gandzhaev" style="happy">«Я уверен вам понравится, поставим бассейн, будем шашлыки жарить»</voice></prosody> - резюмировал Георгий.
Супруга не разделяла радость: <voice name="borisova" style="sad">«Я чувствую комары нас съедят».</voice></speak>
Клонирование голоса
Audiogram поддерживает клонирование голоса. Эта технология используется по запросу абонента для персонализации автоответчика, чтобы научить его разговаривать голосом абонента.
Внимание! Голос человека относится к персональным данным. В соответствии с федеральным законом №152-ФЗ "О персональных данных" их сбор и обработка должны осуществляться с согласия субъекта персональных данных в письменной форме на обработку его персональных данных. Недопустимо использовать голос человека (как настоящий, так и результат клонирования) в противоправных целях - за это грозит административная и уголовная ответственность.
Клонирование голоса осуществляется следующим образом:
-
В Audiogram отправляется запрос на клонирование голоса. В запросе должны быть аудиофайлы с образцами речи, которую необходимо склонировать.
-
Audiogram создает задачу по клонированию и возвращает ее идентификационный номер.
-
Через некоторое время, используя этот номер, необходимо проверить статус задачи.
-
Если задача выполнена, голос склонирован и готов к использованию. Далее, чтобы озвучить им какой-либо текст, необходимо отправить в Audiogram запрос на синтез речи. В запросе передать текст, который необходимо озвучить, и идентификационный номер голоса для озвучки.
Для клонирования голоса предоставляется gRPC-контракт (.proto-файлы), который можно использовать для создания собственного клиентского приложения:
Основной контракт:
- voice_cloning.proto - основной контракт, по которому происходит распознавание речи.
Зависимости:
- stt_v3.proto - контракт, по которому осуществляется распознавание речи. Описание этого .proto-файла представлено в секции stt_v3.proto
- stt_response.proto - конфигурация ответа на запрос на распознавание речи. Описание этого .proto-файла представлено в секции stt_response.proto
- response_header.proto - структура, содержащая временную метку ответа сервиса; позволяет отследить сетевые задержки. Описание этого .proto-файла представлено в секции response_header.proto
voice_cloning.proto
Методы
CloneVoice
| Имя метода | Тип запроса | Тип ответа | Описание |
|---|---|---|---|
| CloneVoice | CloneVoiceRequest | TaskId | Метод клонирования голоса. Возвращает идентификационный номер задачи по клонированию голоса. |
GetTaskInfo
| Имя метода | Тип запроса | Тип ответа | Описание |
|---|---|---|---|
| GetTaskInfo | TaskId | TaskInfo | Этот метод позволяет получить текущий статус задачи по клонированию голоса. |
DeleteVoice
| Имя метода | Тип запроса | Тип ответа | Описание |
|---|---|---|---|
| DeleteVoice | DeleteVoiceRequest | google.protobuf.Empty | Если склонированый голос больше не нужен, этот метод позволяет удалить его из базы. |
Сообщения PROTOBUF
TaskInfo
Информация о задаче по клонированию голоса.
| Поле | Тип | Описание |
|---|---|---|
| voice_id | string | Идентификационный номер склонированного голоса. |
| status | Status | Сообщение типа Status. |
Status
Статус задачи по клонированию голоса.
| Имя | Значение | Описание |
|---|---|---|
| UNDEFINED | 0 | Статус задачи не определен. |
| CREATING | 1 | Клонирование голоса в процессе. |
| READY | 2 | Голос склонирован и готов к использованию. |
| ERROR | 3 | Произошла ошибка. |
AudioFormat
Формат аудиоданных.
| Поле | Тип | Описание |
|---|---|---|
| encoding | mts.ai.audiogram.stt.v3.AudioEncoding | Формат аудиоданных (кодировка). |
| sample_rate_hertz | uint32 | Частота дискретизации аудиоданных в герцах. |
| audio_channel_count | uint32 | Количество каналов во входных аудиоданных. |
CloneVoiceRequest
Настройки запроса на клонирование голоса.
| Поле | Тип | Описание |
|---|---|---|
| audio_format | AudioFormat | Сообщение типа AudioFormat. |
| signal | bytes | В это поле передается аудио с голосом, который необходимо клонировать. |
TaskId
Идентификационный номер задачи по клонированию голоса.
| Поле | Тип | Описание |
|---|---|---|
| val | string | Значение идентификационного номера задачи по клонированию голоса. |
DeleteVoiceRequest
Настройки запроса на удаление клонированного голоса.
| Поле | Тип | Описание |
|---|---|---|
| voice_id | string | Идентификационный номер голоса, который необходимо удалить из базы. |
Метаданные gRPC-запросов
- Каждый запрос к Audiogram API должен содержать токен доступа. Передавайте токен следующим способом:
authorization: Bearer <access_token> - В запросе можно передать уникальный идентификатор, который позволит детально проследить за историей выполнения запроса. Для этого используйте ключ trace-id:
external_trace_id: <id>Список ML-моделей и голосов в Audiogram
Модель для распознавания речи (ASR) или голос для синтеза речи (TTS) следует указывать, используя псевдоним (alias). Это позволяет обновлять модели без необходимости проводить повторную интеграцию клиентов.
Внимание! Если в запросе указана частота дискретизации (sample rate) отличная от значений, поддерживаемых моделью, то:
- в случае распознавания речи (ASR) произойдет перекодирование частоты дискретизации на значение, поддерживаемое моделью (16000 Гц).
- в случае синтеза речи (TTS) будет использована модель с ближайшей частотой дискретизации в большую сторону.
ASR e2e
Alias – это имя модели, которое указывается в конфиге распознавания RecognitionConfig.model
| Alias | Sample rate (Hz) | Описание |
|---|---|---|
| e2e-v3 | 16000 | Модель распознавания речи в файловом и потоковом режимах. |
TTS
Alias – это имя голоса, которое указывается в конфиге распознавания SynthesizeSpeechRequest.voice_name
| Alias | Sample rate (Hz) | Описание |
|---|---|---|
| женские голоса: | ||
| borisova | 8000 | Голос Борисовой 8000 Гц |
| borisova | 22050 | Голос Борисовой 22050 Гц |
| borisova | 44100 | Голос Борисовой 44100 Гц |
| kishchik | 8000 | Голос Кищик 8000 Гц |
| kishchik | 22050 | Голос Кищик 22050 Гц |
| kishchik | 44100 | Голос Кищик 44100 Гц |
| мужские голоса: | ||
| gandzhaev | 8000 | Голос Ганджаева 8000 Гц |
| gandzhaev | 22050 | Голос Ганджаева 22050 Гц |
| gandzhaev | 44100 | Голос Ганджаева 44100 Гц |
| gavrilov | 8000 | Голос Гаврилова 8000 Гц |
| gavrilov | 22050 | Голос Гаврилова 22050 Гц |
| gavrilov | 44100 | Голос Гаврилова 44100 Гц |
Сообщения об ошибках
| Код | Описание |
|---|---|
| PERMISSION_DENIED | Данная ошибка может вернуться в следующих ситуациях: |
| INTERNAL | Не работают внутренние сервисы |
| UNKNOWN | Ошибки, которые пока не обрабатываются на стороне сервиса |
Примеры кода клиентских приложений Audiogram
Для работы с Audiogram необходимо создать клиентское приложение. Примеры кода клиентских приложений собраны в этом разделе. Их можно использовать в качестве образцов при написании сервисов, использующих Audiogram.
Архив содержит следующие примеры кода:
Распознавание речи:
- клиент, выполняющий распознавание речи в файловом режиме
- клиент, выполняющий распознавание речи в потоковом режиме
- клиент, получающий список доступных моделей для распознавания речи
Синтез речи:
- клиент, выполняющий синтез речи в файловом режиме
- клиент, выполняющий синтез речи в потоковом режиме
- клиент, получающий список доступных моделей для синтеза речи
Работа с аудиоархивом:
- клиент, получающий список запросов на распознавание речи
- клиент, позволяющий скачать аудио, полученное на распознавание речи
- клиент, позволяющий скачать разметку голосовой активности
- клиент, позволяющий скачать результат распознавания речи
Внимание! Примеры из архива, перечисленные выше, создавались для stt_v3.proto и tts_v2.proto
В качестве образца кода клиентских приложений для предыдущей версии stt.proto файла используйте следующие примеры: