matrix-react-sdk
Version:
SDK for matrix.org using React
66 lines (63 loc) • 8.19 kB
JavaScript
;
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==