umbot
Version:
Мультиплатформенный фреймворк для создания голосовых навыков и чат-ботов с единой бизнес-логикой. Встроенная поддержка ВКонтакте, Telegram, Viber, MAX, Яндекс Алисы, Маруси и Сбера SmartApp. Архитектура на адаптерах позволяет подключать любые другие платф
237 lines (236 loc) • 9.14 kB
TypeScript
import { YandexRequest } from './YandexRequest';
import { AppContext } from '../../../index';
/**
* Интерфейс для результатов синтеза речи
*/
export interface ITTSResult {
/**
* Имя файла
*/
fileName: string;
/**
* Бинарные данные аудио
*/
audioData: ArrayBuffer;
}
/**
* Класс отвечающий за преобразование текста в аудио файл.
* Преобразование осуществляется через сервис Yandex SpeechKit.
* @see (https://cloud.yandex.ru/docs/speechkit/tts/request) Смотри тут
*
* @example
* ```ts
* import { YandexSpeechKit } from './api/YandexSpeechKit';
*
* // Создание экземпляра с токеном
* const speechKit = new YandexSpeechKit('your-oauth-token');
*
* // Настройка параметров синтеза
* speechKit.lang = YandexSpeechKit.L_RU; // Русский язык
* speechKit.voice = YandexSpeechKit.V_JANE; // Голос Jane
* speechKit.emotion = YandexSpeechKit.E_GOOD; // Доброжелательная интонация
* speechKit.speed = 1.2; // Скорость речи
* speechKit.format = YandexSpeechKit.F_OGGOPUS; // Формат OGG/OPUS
*
* try {
* // Пример с омографами и паузами
* const text = 'Я гот+ов - начать работу';
* const audio = await speechKit.getTts(text);
*
* // Сохранение или воспроизведение аудио
* // audio содержит бинарные данные в выбранном формате
* } catch (error) {
* console.error('Ошибка синтеза речи:', error);
* }
* ```
*/
export declare class YandexSpeechKit extends YandexRequest {
#private;
/**
* Адрес, на который будет отправляться запрос
*/
static readonly TTS_API_URL = "https://tts.api.cloud.yandex.net/speech/v1/tts:synthesize";
/**
* Положительная интонация
*/
static readonly E_GOOD = "good";
/**
* Отрицательная интонация
*/
static readonly E_EVIL = "evil";
/**
* Нейтральная интонация
*/
static readonly E_NEUTRAL = "neutral";
/**
* Голос для синтеза речи Оксана (ru)
*/
static readonly V_OKSANA = "oksana";
/**
* Голос для синтеза речи Джейн (ru)
*/
static readonly V_JANE = "jane";
/**
* Голос для синтеза речи Омаж (ru)
*/
static readonly V_OMAZH = "omazh";
/**
* Голос для синтеза речи Захар (ru)
*/
static readonly V_ZAHAR = "zahar";
/**
* Голос для синтеза речи Ермил (ru)
*/
static readonly V_ERMIL = "ermil";
/**
* Голос для синтеза речи Сильвер (tr)
*/
static readonly V_SILAERKAN = "silaerkan";
/**
* Голос для синтеза речи Эркан (tr)
*/
static readonly V_ERKANYAVAS = "erkanyavas";
/**
* Голос для синтеза речи Элис (en)
*/
static readonly V_ALYSS = "alyss";
/**
* Голос для синтеза речи Ник (en)
*/
static readonly V_NICK = "nick";
/**
* Голос для синтеза речи Алена (ru)
*/
static readonly V_ALENA = "alena";
/**
* Голос для синтеза речи Филипп (ru)
*/
static readonly V_FILIPP = "filipp";
/**
* Русский язык
*/
static readonly L_RU = "ru-RU";
/**
* Английский язык
*/
static readonly L_EN = "en_EN";
/**
* Турецкий язык
*/
static readonly L_TR = "tr-TR";
/**
* Формат файла lpcm
* @see format
*/
static readonly F_LPCM = "lpcm";
/**
* Формат файла oggopus
* @see format
*/
static readonly F_OGGOPUS = "oggopus";
/**
* Текст для озвучивания в кодировке UTF-8
* Можно использовать только одно из полей text и ssml
* Для передачи слов-омографов используйте + перед ударной гласной
* Например: гот+ов или def+ect
* Для паузы между словами используйте -
* Максимальная длина: 5000 символов
*/
text: string | undefined;
/**
* Язык синтеза речи
* ru-RU (по умолчанию) - русский
* en-US - английский
* tr-TR - турецкий
*/
lang: string;
/**
* Голос для синтеза речи
* По умолчанию: oksana
* @see V_OKSANA, V_JANE, V_OMAZH и другие константы
*/
voice: string;
/**
* Эмоциональная окраска голоса
* Поддерживается только для ru-RU и голосов jane/omazh
* good - доброжелательный
* evil - злой
* neutral (по умолчанию) - нейтральный
*/
emotion: string;
/**
* Скорость синтеза речи
* От 0.1 до 3.0
* 3.0 - самый быстрый
* 1.0 (по умолчанию) - средняя скорость
* 0.1 - самый медленный
* Не поддерживается для премиум-голосов
*/
speed: number;
/**
* Формат синтезируемого аудио
* lpcm - без WAV-заголовка
* oggopus (по умолчанию) - OGG контейнер с OPUS кодеком
*/
format: string;
/**
* Частота дискретизации для формата lpcm
* Поддерживаемые значения:
* - 48000 (по умолчанию) - 48 кГц, высокое качество
* - 16000 - 16 кГц, среднее качество
* - 8000 - 8 кГц, низкое качество, подходит для телефонии
*
* @remarks
* Параметр используется только при format = YandexSpeechKit.F_LPCM
* Для format = YandexSpeechKit.F_OGGOPUS игнорируется
*/
sampleRateHertz: number | undefined;
/**
* Идентификатор каталога для авторизации.
* Требуется только для пользовательского аккаунта
* Максимум 50 символов
*/
folderId: number | null;
/**
* Создает экземпляр YandexSpeechKit
* @param oauth Авторизационный токен для синтеза речи
* @param appContext Контекст приложения
*/
constructor(oauth: string | null | undefined, appContext: AppContext);
/**
* Получение голосового текста
* @param text Текст для преобразования в речь
* @returns Возвращает путь к сохраненному файлу и его бинарное содержимое
*
* @remarks
* Поддерживаемые форматы:
* - F_LPCM: RAW PCM без WAV-заголовка
* - F_OGGOPUS: OGG контейнер с OPUS кодеком (рекомендуется)
*
* Особенности текста:
* - Для омографов используйте + перед ударной гласной: гот+ов, з+амок
* - Для паузы между словами используйте -: слово - слово
* - Максимальная длина текста: 5000 символов
*
* Ограничения:
* - Эмоции (emotion) поддерживаются только для ru-RU и голосов jane/omazh
* - Скорость (speed) не поддерживается для премиум-голосов (alena, filipp)
*
* Важно! после выполнения запроса, не забудьте удалить файл с результатом.
*
* @example
* ```ts
* // Пример с LPCM форматом
* speechKit.format = YandexSpeechKit.F_LPCM;
* speechKit.sampleRateHertz = 16000;
* const pcmAudio = await speechKit.getTts('Текст для синтеза');
*
* // Пример с OGG/OPUS
* speechKit.format = YandexSpeechKit.F_OGGOPUS;
* const oggAudio = await speechKit.getTts('Текст для синтеза');
* ```
*
* @see (https://cloud.yandex.ru/docs/speechkit/tts/request) Смотри тут
*/
getTts(text?: string | null): Promise<ITTSResult | null>;
}