UNPKG

umbot

Version:

Мультиплатформенный фреймворк для создания голосовых навыков и чат-ботов с единой бизнес-логикой. Встроенная поддержка ВКонтакте, Telegram, Viber, MAX, Яндекс Алисы, Маруси и Сбера SmartApp. Архитектура на адаптерах позволяет подключать любые другие платф

237 lines (236 loc) 9.14 kB
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>; }