umbot
Version:
Мультиплатформенный фреймворк для создания голосовых навыков и чат-ботов с единой бизнес-логикой. Встроенная поддержка ВКонтакте, Telegram, Viber, MAX, Яндекс Алисы, Маруси и Сбера SmartApp. Архитектура на адаптерах позволяет подключать любые другие платф
132 lines (131 loc) • 4.8 kB
JavaScript
;
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;