UNPKG

matrix-react-sdk

Version:
66 lines (63 loc) 8.19 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.BackgroundAudio = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _logger = require("matrix-js-sdk/src/logger"); var _compat = require("./compat"); /* Copyright 2024 New Vector Ltd. Copyright 2024 The Matrix.org Foundation C.I.C. SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only Please see LICENSE files in the repository root for full details. */ const formatMap = { mp3: "audio/mpeg", ogg: "audio/ogg" }; class BackgroundAudio { constructor() { (0, _defineProperty2.default)(this, "audioContext", (0, _compat.createAudioContext)()); (0, _defineProperty2.default)(this, "sounds", {}); } async pickFormatAndPlay(urlPrefix, formats, loop = false) { const format = this.pickFormat(...formats); if (!format) { console.log("Browser doesn't support any of the formats", formats); // Will probably never happen. If happened, format="" and will fail to load audio. Who cares... } return this.play(`${urlPrefix}.${format}`, loop); } async play(url, loop = false) { if (!this.sounds.hasOwnProperty(url)) { // No cache, fetch it const response = await fetch(url); if (response.status != 200) { _logger.logger.warn("Failed to fetch error audio"); } const buffer = await response.arrayBuffer(); const sound = await this.audioContext.decodeAudioData(buffer); this.sounds[url] = sound; } const source = this.audioContext.createBufferSource(); source.buffer = this.sounds[url]; source.loop = loop; source.connect(this.audioContext.destination); source.start(); return source; } pickFormat(...formats) { // Detect supported formats const audioElement = document.createElement("audio"); for (const format of formats) { if (audioElement.canPlayType(formatMap[format])) { return format; } } return null; } } exports.BackgroundAudio = BackgroundAudio; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9nZ2VyIiwicmVxdWlyZSIsIl9jb21wYXQiLCJmb3JtYXRNYXAiLCJtcDMiLCJvZ2ciLCJCYWNrZ3JvdW5kQXVkaW8iLCJjb25zdHJ1Y3RvciIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJkZWZhdWx0IiwiY3JlYXRlQXVkaW9Db250ZXh0IiwicGlja0Zvcm1hdEFuZFBsYXkiLCJ1cmxQcmVmaXgiLCJmb3JtYXRzIiwibG9vcCIsImZvcm1hdCIsInBpY2tGb3JtYXQiLCJjb25zb2xlIiwibG9nIiwicGxheSIsInVybCIsInNvdW5kcyIsImhhc093blByb3BlcnR5IiwicmVzcG9uc2UiLCJmZXRjaCIsInN0YXR1cyIsImxvZ2dlciIsIndhcm4iLCJidWZmZXIiLCJhcnJheUJ1ZmZlciIsInNvdW5kIiwiYXVkaW9Db250ZXh0IiwiZGVjb2RlQXVkaW9EYXRhIiwic291cmNlIiwiY3JlYXRlQnVmZmVyU291cmNlIiwiY29ubmVjdCIsImRlc3RpbmF0aW9uIiwic3RhcnQiLCJhdWRpb0VsZW1lbnQiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJjYW5QbGF5VHlwZSIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvYXVkaW8vQmFja2dyb3VuZEF1ZGlvLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgMjAyNCBOZXcgVmVjdG9yIEx0ZC5cbkNvcHlyaWdodCAyMDI0IFRoZSBNYXRyaXgub3JnIEZvdW5kYXRpb24gQy5JLkMuXG5cblNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vbmx5IE9SIEdQTC0zLjAtb25seVxuUGxlYXNlIHNlZSBMSUNFTlNFIGZpbGVzIGluIHRoZSByZXBvc2l0b3J5IHJvb3QgZm9yIGZ1bGwgZGV0YWlscy5cbiovXG5cbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCJtYXRyaXgtanMtc2RrL3NyYy9sb2dnZXJcIjtcblxuaW1wb3J0IHsgY3JlYXRlQXVkaW9Db250ZXh0IH0gZnJvbSBcIi4vY29tcGF0XCI7XG5cbmNvbnN0IGZvcm1hdE1hcCA9IHtcbiAgICBtcDM6IFwiYXVkaW8vbXBlZ1wiLFxuICAgIG9nZzogXCJhdWRpby9vZ2dcIixcbn07XG5cbmV4cG9ydCBjbGFzcyBCYWNrZ3JvdW5kQXVkaW8ge1xuICAgIHByaXZhdGUgYXVkaW9Db250ZXh0ID0gY3JlYXRlQXVkaW9Db250ZXh0KCk7XG4gICAgcHJpdmF0ZSBzb3VuZHM6IFJlY29yZDxzdHJpbmcsIEF1ZGlvQnVmZmVyPiA9IHt9O1xuXG4gICAgcHVibGljIGFzeW5jIHBpY2tGb3JtYXRBbmRQbGF5PEYgZXh0ZW5kcyBBcnJheTxrZXlvZiB0eXBlb2YgZm9ybWF0TWFwPj4oXG4gICAgICAgIHVybFByZWZpeDogc3RyaW5nLFxuICAgICAgICBmb3JtYXRzOiBGLFxuICAgICAgICBsb29wID0gZmFsc2UsXG4gICAgKTogUHJvbWlzZTxBdWRpb0J1ZmZlclNvdXJjZU5vZGU+IHtcbiAgICAgICAgY29uc3QgZm9ybWF0ID0gdGhpcy5waWNrRm9ybWF0KC4uLmZvcm1hdHMpO1xuICAgICAgICBpZiAoIWZvcm1hdCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJCcm93c2VyIGRvZXNuJ3Qgc3VwcG9ydCBhbnkgb2YgdGhlIGZvcm1hdHNcIiwgZm9ybWF0cyk7XG4gICAgICAgICAgICAvLyBXaWxsIHByb2JhYmx5IG5ldmVyIGhhcHBlbi4gSWYgaGFwcGVuZWQsIGZvcm1hdD1cIlwiIGFuZCB3aWxsIGZhaWwgdG8gbG9hZCBhdWRpby4gV2hvIGNhcmVzLi4uXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5wbGF5KGAke3VybFByZWZpeH0uJHtmb3JtYXR9YCwgbG9vcCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHBsYXkodXJsOiBzdHJpbmcsIGxvb3AgPSBmYWxzZSk6IFByb21pc2U8QXVkaW9CdWZmZXJTb3VyY2VOb2RlPiB7XG4gICAgICAgIGlmICghdGhpcy5zb3VuZHMuaGFzT3duUHJvcGVydHkodXJsKSkge1xuICAgICAgICAgICAgLy8gTm8gY2FjaGUsIGZldGNoIGl0XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCk7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9IDIwMCkge1xuICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKFwiRmFpbGVkIHRvIGZldGNoIGVycm9yIGF1ZGlvXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYnVmZmVyID0gYXdhaXQgcmVzcG9uc2UuYXJyYXlCdWZmZXIoKTtcbiAgICAgICAgICAgIGNvbnN0IHNvdW5kID0gYXdhaXQgdGhpcy5hdWRpb0NvbnRleHQuZGVjb2RlQXVkaW9EYXRhKGJ1ZmZlcik7XG4gICAgICAgICAgICB0aGlzLnNvdW5kc1t1cmxdID0gc291bmQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc291cmNlID0gdGhpcy5hdWRpb0NvbnRleHQuY3JlYXRlQnVmZmVyU291cmNlKCk7XG4gICAgICAgIHNvdXJjZS5idWZmZXIgPSB0aGlzLnNvdW5kc1t1cmxdO1xuICAgICAgICBzb3VyY2UubG9vcCA9IGxvb3A7XG4gICAgICAgIHNvdXJjZS5jb25uZWN0KHRoaXMuYXVkaW9Db250ZXh0LmRlc3RpbmF0aW9uKTtcbiAgICAgICAgc291cmNlLnN0YXJ0KCk7XG4gICAgICAgIHJldHVybiBzb3VyY2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwaWNrRm9ybWF0PEYgZXh0ZW5kcyBBcnJheTxrZXlvZiB0eXBlb2YgZm9ybWF0TWFwPj4oLi4uZm9ybWF0czogRik6IEZbbnVtYmVyXSB8IG51bGwge1xuICAgICAgICAvLyBEZXRlY3Qgc3VwcG9ydGVkIGZvcm1hdHNcbiAgICAgICAgY29uc3QgYXVkaW9FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImF1ZGlvXCIpO1xuXG4gICAgICAgIGZvciAoY29uc3QgZm9ybWF0IG9mIGZvcm1hdHMpIHtcbiAgICAgICAgICAgIGlmIChhdWRpb0VsZW1lbnQuY2FuUGxheVR5cGUoZm9ybWF0TWFwW2Zvcm1hdF0pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZvcm1hdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBUUEsSUFBQUEsT0FBQSxHQUFBQyxPQUFBO0FBRUEsSUFBQUMsT0FBQSxHQUFBRCxPQUFBO0FBVkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBTUEsTUFBTUUsU0FBUyxHQUFHO0VBQ2RDLEdBQUcsRUFBRSxZQUFZO0VBQ2pCQyxHQUFHLEVBQUU7QUFDVCxDQUFDO0FBRU0sTUFBTUMsZUFBZSxDQUFDO0VBQUFDLFlBQUE7SUFBQSxJQUFBQyxnQkFBQSxDQUFBQyxPQUFBLHdCQUNGLElBQUFDLDBCQUFrQixFQUFDLENBQUM7SUFBQSxJQUFBRixnQkFBQSxDQUFBQyxPQUFBLGtCQUNHLENBQUMsQ0FBQztFQUFBO0VBRWhELE1BQWFFLGlCQUFpQkEsQ0FDMUJDLFNBQWlCLEVBQ2pCQyxPQUFVLEVBQ1ZDLElBQUksR0FBRyxLQUFLLEVBQ2tCO0lBQzlCLE1BQU1DLE1BQU0sR0FBRyxJQUFJLENBQUNDLFVBQVUsQ0FBQyxHQUFHSCxPQUFPLENBQUM7SUFDMUMsSUFBSSxDQUFDRSxNQUFNLEVBQUU7TUFDVEUsT0FBTyxDQUFDQyxHQUFHLENBQUMsNENBQTRDLEVBQUVMLE9BQU8sQ0FBQztNQUNsRTtJQUNKO0lBRUEsT0FBTyxJQUFJLENBQUNNLElBQUksQ0FBQyxHQUFHUCxTQUFTLElBQUlHLE1BQU0sRUFBRSxFQUFFRCxJQUFJLENBQUM7RUFDcEQ7RUFFQSxNQUFhSyxJQUFJQSxDQUFDQyxHQUFXLEVBQUVOLElBQUksR0FBRyxLQUFLLEVBQWtDO0lBQ3pFLElBQUksQ0FBQyxJQUFJLENBQUNPLE1BQU0sQ0FBQ0MsY0FBYyxDQUFDRixHQUFHLENBQUMsRUFBRTtNQUNsQztNQUNBLE1BQU1HLFFBQVEsR0FBRyxNQUFNQyxLQUFLLENBQUNKLEdBQUcsQ0FBQztNQUNqQyxJQUFJRyxRQUFRLENBQUNFLE1BQU0sSUFBSSxHQUFHLEVBQUU7UUFDeEJDLGNBQU0sQ0FBQ0MsSUFBSSxDQUFDLDZCQUE2QixDQUFDO01BQzlDO01BQ0EsTUFBTUMsTUFBTSxHQUFHLE1BQU1MLFFBQVEsQ0FBQ00sV0FBVyxDQUFDLENBQUM7TUFDM0MsTUFBTUMsS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDQyxZQUFZLENBQUNDLGVBQWUsQ0FBQ0osTUFBTSxDQUFDO01BQzdELElBQUksQ0FBQ1AsTUFBTSxDQUFDRCxHQUFHLENBQUMsR0FBR1UsS0FBSztJQUM1QjtJQUNBLE1BQU1HLE1BQU0sR0FBRyxJQUFJLENBQUNGLFlBQVksQ0FBQ0csa0JBQWtCLENBQUMsQ0FBQztJQUNyREQsTUFBTSxDQUFDTCxNQUFNLEdBQUcsSUFBSSxDQUFDUCxNQUFNLENBQUNELEdBQUcsQ0FBQztJQUNoQ2EsTUFBTSxDQUFDbkIsSUFBSSxHQUFHQSxJQUFJO0lBQ2xCbUIsTUFBTSxDQUFDRSxPQUFPLENBQUMsSUFBSSxDQUFDSixZQUFZLENBQUNLLFdBQVcsQ0FBQztJQUM3Q0gsTUFBTSxDQUFDSSxLQUFLLENBQUMsQ0FBQztJQUNkLE9BQU9KLE1BQU07RUFDakI7RUFFUWpCLFVBQVVBLENBQTBDLEdBQUdILE9BQVUsRUFBb0I7SUFDekY7SUFDQSxNQUFNeUIsWUFBWSxHQUFHQyxRQUFRLENBQUNDLGFBQWEsQ0FBQyxPQUFPLENBQUM7SUFFcEQsS0FBSyxNQUFNekIsTUFBTSxJQUFJRixPQUFPLEVBQUU7TUFDMUIsSUFBSXlCLFlBQVksQ0FBQ0csV0FBVyxDQUFDdEMsU0FBUyxDQUFDWSxNQUFNLENBQUMsQ0FBQyxFQUFFO1FBQzdDLE9BQU9BLE1BQU07TUFDakI7SUFDSjtJQUNBLE9BQU8sSUFBSTtFQUNmO0FBQ0o7QUFBQzJCLE9BQUEsQ0FBQXBDLGVBQUEsR0FBQUEsZUFBQSIsImlnbm9yZUxpc3QiOltdfQ==