UNPKG

umbot

Version:

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

132 lines (131 loc) 4.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Sound = void 0; const isPromise_1 = require("../../utils/isPromise"); const regReplace = /((?:^|\s)#\w+#(?:\s|$))/g; /** * @class Sound * Класс для обработки и воспроизведения звуков в различных платформах. * * Основные возможности: * - Поддержка различных платформ (Алиса, Маруся, VK, Telegram, Viber) * - Использование стандартных и пользовательских звуков * - Встраивание звуков в текстовые сообщения * - Гибкая настройка звукового сопровождения * * Ограничения по платформам: * * Алиса: * - Аудиофайлы: MP3, до 1MB * - Длительность: до 30 секунд * - Стандартные звуки: <speaker audio="alice-xxx"> * - Синтез речи: SSML-разметка * * Маруся: * - Аудиофайлы: MP3, до 1MB * - Длительность: до 30 секунд * - Стандартные звуки: <speaker audio="marusia-xxx"> * - Синтез речи: SSML-разметка * * VK: * - Аудиофайлы: MP3, OGG, до 20MB * - Длительность: до 5 минут * - Голосовые сообщения: OGG (opus) * * Telegram: * - Аудиофайлы: MP3, M4A, до 50MB * - Длительность: без ограничений * - Голосовые сообщения: OGG (opus) * * Viber: * - Аудиофайлы: MP3, WAV, до 10MB * - Длительность: до 3 минут * * @example * ```ts * import { Sound } from './components/sound/Sound'; * * // Создание экземпляра * const sound = new Sound(); * * // Использование своих звуков * sound.sounds = [ * // Звук колокольчика * { * key: '#myKey#', * sounds: ['<speaker audio="alice-xxx">'] * }, * ]; * // Получение текста со звуками * const result = await sound.getSounds('Текст сообщения #myKey#'); * ``` */ class Sound { /** * Массив звуков для воспроизведения. * Каждый элемент массива представляет собой объект с параметрами звука. */ sounds; /** * Флаг использования стандартных звуков. * Если true, используются стандартные звуки платформы. * Актуально для Алисы и Маруси. * * @default true * @example * ```ts * // Использовать стандартные звуки * sound.isUsedStandardSound = true; * * // Использовать только пользовательские звуки * sound.isUsedStandardSound = false; * ``` */ isUsedStandardSound; /** * Конструктор класса Sound. * Инициализирует пустой массив звуков и включает использование стандартных звуков. */ constructor() { this.sounds = []; this.isUsedStandardSound = true; } /** * Получает текст с встроенными звуками для конкретной платформы. * * Процесс работы: * 1. Проверяет наличие текста * 2. Определяет тип приложения * 3. Создает соответствующий обработчик звуков * 4. Применяет звуки к тексту * * @param {string | null} text - Исходный текст для обработки * @param soundProcessing * @param controller */ async getSounds(text, soundProcessing, controller) { if (!text) { return ''; } const res = soundProcessing({ text, usedStandardSound: this.isUsedStandardSound, sounds: this.sounds, }, controller); if (res) { let stringRes; if ((0, isPromise_1.isPromise)(res)) { stringRes = await res; } else { stringRes = res; } if (typeof stringRes === 'string') { return (stringRes.includes('#') ? stringRes.replace(regReplace, ' ').trim() : stringRes); } return stringRes; } return text; } } exports.Sound = Sound;