matrix-react-sdk
Version:
SDK for matrix.org using React
83 lines (79 loc) • 10.4 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.createAudioContext = createAudioContext;
exports.decodeOgg = decodeOgg;
var _decoderWorkerMin = _interopRequireDefault(require("opus-recorder/dist/decoderWorker.min.wasm"));
var _waveWorkerMin = _interopRequireDefault(require("opus-recorder/dist/waveWorker.min.js"));
var _decoderWorkerMin2 = _interopRequireDefault(require("opus-recorder/dist/decoderWorker.min.js"));
var _logger = require("matrix-js-sdk/src/logger");
var _VoiceRecording = require("./VoiceRecording");
/*
Copyright 2024 New Vector Ltd.
Copyright 2021 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.
*/
// @ts-ignore - we know that this is not a module. We're looking for a path.
function createAudioContext(opts) {
if (window.AudioContext) {
return new AudioContext(opts);
} else if (window.webkitAudioContext) {
// While the linter is correct that "a constructor name should not start with
// a lowercase letter", it's also wrong to think that we have control over this.
// eslint-disable-next-line new-cap
return new window.webkitAudioContext(opts);
} else {
throw new Error("Unsupported browser");
}
}
function decodeOgg(audioBuffer) {
// Condensed version of decoder example, using a promise:
// https://github.com/chris-rudmin/opus-recorder/blob/master/example/decoder.html
return new Promise(resolve => {
// no reject because the workers don't seem to have a fail path
_logger.logger.log("Decoder WASM path: " + _decoderWorkerMin.default); // so we use the variable (avoid tree shake)
const typedArray = new Uint8Array(audioBuffer);
const decoderWorker = new Worker(_decoderWorkerMin2.default);
const wavWorker = new Worker(_waveWorkerMin.default);
decoderWorker.postMessage({
command: "init",
decoderSampleRate: _VoiceRecording.SAMPLE_RATE,
outputBufferSampleRate: _VoiceRecording.SAMPLE_RATE
});
wavWorker.postMessage({
command: "init",
wavBitDepth: 24,
// standard for 48khz (SAMPLE_RATE)
wavSampleRate: _VoiceRecording.SAMPLE_RATE
});
decoderWorker.onmessage = ev => {
if (ev.data === null) {
// null == done
wavWorker.postMessage({
command: "done"
});
return;
}
wavWorker.postMessage({
command: "encode",
buffers: ev.data
}, ev.data.map(b => b.buffer));
};
wavWorker.onmessage = ev => {
if (ev.data.message === "page") {
// The encoding comes through as a single page
resolve(new Blob([ev.data.page], {
type: "audio/wav"
}).arrayBuffer());
}
};
decoderWorker.postMessage({
command: "decode",
pages: typedArray
}, [typedArray.buffer]);
});
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZGVjb2Rlcldvcmtlck1pbiIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX3dhdmVXb3JrZXJNaW4iLCJfZGVjb2Rlcldvcmtlck1pbjIiLCJfbG9nZ2VyIiwiX1ZvaWNlUmVjb3JkaW5nIiwiY3JlYXRlQXVkaW9Db250ZXh0Iiwib3B0cyIsIndpbmRvdyIsIkF1ZGlvQ29udGV4dCIsIndlYmtpdEF1ZGlvQ29udGV4dCIsIkVycm9yIiwiZGVjb2RlT2dnIiwiYXVkaW9CdWZmZXIiLCJQcm9taXNlIiwicmVzb2x2ZSIsImxvZ2dlciIsImxvZyIsImRlY29kZXJXYXNtUGF0aCIsInR5cGVkQXJyYXkiLCJVaW50OEFycmF5IiwiZGVjb2RlcldvcmtlciIsIldvcmtlciIsImRlY29kZXJQYXRoIiwid2F2V29ya2VyIiwid2F2RW5jb2RlclBhdGgiLCJwb3N0TWVzc2FnZSIsImNvbW1hbmQiLCJkZWNvZGVyU2FtcGxlUmF0ZSIsIlNBTVBMRV9SQVRFIiwib3V0cHV0QnVmZmVyU2FtcGxlUmF0ZSIsIndhdkJpdERlcHRoIiwid2F2U2FtcGxlUmF0ZSIsIm9ubWVzc2FnZSIsImV2IiwiZGF0YSIsImJ1ZmZlcnMiLCJtYXAiLCJiIiwiYnVmZmVyIiwibWVzc2FnZSIsIkJsb2IiLCJwYWdlIiwidHlwZSIsImFycmF5QnVmZmVyIiwicGFnZXMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvYXVkaW8vY29tcGF0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgMjAyNCBOZXcgVmVjdG9yIEx0ZC5cbkNvcHlyaWdodCAyMDIxIFRoZSBNYXRyaXgub3JnIEZvdW5kYXRpb24gQy5JLkMuXG5cblNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vbmx5IE9SIEdQTC0zLjAtb25seVxuUGxlYXNlIHNlZSBMSUNFTlNFIGZpbGVzIGluIHRoZSByZXBvc2l0b3J5IHJvb3QgZm9yIGZ1bGwgZGV0YWlscy5cbiovXG5cbi8vIEB0cy1pZ25vcmUgLSB3ZSBrbm93IHRoYXQgdGhpcyBpcyBub3QgYSBtb2R1bGUuIFdlJ3JlIGxvb2tpbmcgZm9yIGEgcGF0aC5cbmltcG9ydCBkZWNvZGVyV2FzbVBhdGggZnJvbSBcIm9wdXMtcmVjb3JkZXIvZGlzdC9kZWNvZGVyV29ya2VyLm1pbi53YXNtXCI7XG5pbXBvcnQgd2F2RW5jb2RlclBhdGggZnJvbSBcIm9wdXMtcmVjb3JkZXIvZGlzdC93YXZlV29ya2VyLm1pbi5qc1wiO1xuaW1wb3J0IGRlY29kZXJQYXRoIGZyb20gXCJvcHVzLXJlY29yZGVyL2Rpc3QvZGVjb2Rlcldvcmtlci5taW4uanNcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCJtYXRyaXgtanMtc2RrL3NyYy9sb2dnZXJcIjtcblxuaW1wb3J0IHsgU0FNUExFX1JBVEUgfSBmcm9tIFwiLi9Wb2ljZVJlY29yZGluZ1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQXVkaW9Db250ZXh0KG9wdHM/OiBBdWRpb0NvbnRleHRPcHRpb25zKTogQXVkaW9Db250ZXh0IHtcbiAgICBpZiAod2luZG93LkF1ZGlvQ29udGV4dCkge1xuICAgICAgICByZXR1cm4gbmV3IEF1ZGlvQ29udGV4dChvcHRzKTtcbiAgICB9IGVsc2UgaWYgKHdpbmRvdy53ZWJraXRBdWRpb0NvbnRleHQpIHtcbiAgICAgICAgLy8gV2hpbGUgdGhlIGxpbnRlciBpcyBjb3JyZWN0IHRoYXQgXCJhIGNvbnN0cnVjdG9yIG5hbWUgc2hvdWxkIG5vdCBzdGFydCB3aXRoXG4gICAgICAgIC8vIGEgbG93ZXJjYXNlIGxldHRlclwiLCBpdCdzIGFsc28gd3JvbmcgdG8gdGhpbmsgdGhhdCB3ZSBoYXZlIGNvbnRyb2wgb3ZlciB0aGlzLlxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbmV3LWNhcFxuICAgICAgICByZXR1cm4gbmV3IHdpbmRvdy53ZWJraXRBdWRpb0NvbnRleHQob3B0cyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgYnJvd3NlclwiKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVPZ2coYXVkaW9CdWZmZXI6IEFycmF5QnVmZmVyKTogUHJvbWlzZTxBcnJheUJ1ZmZlcj4ge1xuICAgIC8vIENvbmRlbnNlZCB2ZXJzaW9uIG9mIGRlY29kZXIgZXhhbXBsZSwgdXNpbmcgYSBwcm9taXNlOlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpcy1ydWRtaW4vb3B1cy1yZWNvcmRlci9ibG9iL21hc3Rlci9leGFtcGxlL2RlY29kZXIuaHRtbFxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAvLyBubyByZWplY3QgYmVjYXVzZSB0aGUgd29ya2VycyBkb24ndCBzZWVtIHRvIGhhdmUgYSBmYWlsIHBhdGhcbiAgICAgICAgbG9nZ2VyLmxvZyhcIkRlY29kZXIgV0FTTSBwYXRoOiBcIiArIGRlY29kZXJXYXNtUGF0aCk7IC8vIHNvIHdlIHVzZSB0aGUgdmFyaWFibGUgKGF2b2lkIHRyZWUgc2hha2UpXG4gICAgICAgIGNvbnN0IHR5cGVkQXJyYXkgPSBuZXcgVWludDhBcnJheShhdWRpb0J1ZmZlcik7XG4gICAgICAgIGNvbnN0IGRlY29kZXJXb3JrZXIgPSBuZXcgV29ya2VyKGRlY29kZXJQYXRoKTtcbiAgICAgICAgY29uc3Qgd2F2V29ya2VyID0gbmV3IFdvcmtlcih3YXZFbmNvZGVyUGF0aCk7XG5cbiAgICAgICAgZGVjb2Rlcldvcmtlci5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICBjb21tYW5kOiBcImluaXRcIixcbiAgICAgICAgICAgIGRlY29kZXJTYW1wbGVSYXRlOiBTQU1QTEVfUkFURSxcbiAgICAgICAgICAgIG91dHB1dEJ1ZmZlclNhbXBsZVJhdGU6IFNBTVBMRV9SQVRFLFxuICAgICAgICB9KTtcblxuICAgICAgICB3YXZXb3JrZXIucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgY29tbWFuZDogXCJpbml0XCIsXG4gICAgICAgICAgICB3YXZCaXREZXB0aDogMjQsIC8vIHN0YW5kYXJkIGZvciA0OGtoeiAoU0FNUExFX1JBVEUpXG4gICAgICAgICAgICB3YXZTYW1wbGVSYXRlOiBTQU1QTEVfUkFURSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVjb2Rlcldvcmtlci5vbm1lc3NhZ2UgPSAoZXYpID0+IHtcbiAgICAgICAgICAgIGlmIChldi5kYXRhID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gbnVsbCA9PSBkb25lXG4gICAgICAgICAgICAgICAgd2F2V29ya2VyLnBvc3RNZXNzYWdlKHsgY29tbWFuZDogXCJkb25lXCIgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB3YXZXb3JrZXIucG9zdE1lc3NhZ2UoXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb21tYW5kOiBcImVuY29kZVwiLFxuICAgICAgICAgICAgICAgICAgICBidWZmZXJzOiBldi5kYXRhLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXYuZGF0YS5tYXAoKGI6IEZsb2F0MzJBcnJheSkgPT4gYi5idWZmZXIpLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfTtcblxuICAgICAgICB3YXZXb3JrZXIub25tZXNzYWdlID0gKGV2KSA9PiB7XG4gICAgICAgICAgICBpZiAoZXYuZGF0YS5tZXNzYWdlID09PSBcInBhZ2VcIikge1xuICAgICAgICAgICAgICAgIC8vIFRoZSBlbmNvZGluZyBjb21lcyB0aHJvdWdoIGFzIGEgc2luZ2xlIHBhZ2VcbiAgICAgICAgICAgICAgICByZXNvbHZlKG5ldyBCbG9iKFtldi5kYXRhLnBhZ2VdLCB7IHR5cGU6IFwiYXVkaW8vd2F2XCIgfSkuYXJyYXlCdWZmZXIoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgZGVjb2Rlcldvcmtlci5wb3N0TWVzc2FnZShcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb21tYW5kOiBcImRlY29kZVwiLFxuICAgICAgICAgICAgICAgIHBhZ2VzOiB0eXBlZEFycmF5LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFt0eXBlZEFycmF5LmJ1ZmZlcl0sXG4gICAgICAgICk7XG4gICAgfSk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBU0EsSUFBQUEsaUJBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLGNBQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFFLGtCQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRyxPQUFBLEdBQUFILE9BQUE7QUFFQSxJQUFBSSxlQUFBLEdBQUFKLE9BQUE7QUFkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFRTyxTQUFTSyxrQkFBa0JBLENBQUNDLElBQTBCLEVBQWdCO0VBQ3pFLElBQUlDLE1BQU0sQ0FBQ0MsWUFBWSxFQUFFO0lBQ3JCLE9BQU8sSUFBSUEsWUFBWSxDQUFDRixJQUFJLENBQUM7RUFDakMsQ0FBQyxNQUFNLElBQUlDLE1BQU0sQ0FBQ0Usa0JBQWtCLEVBQUU7SUFDbEM7SUFDQTtJQUNBO0lBQ0EsT0FBTyxJQUFJRixNQUFNLENBQUNFLGtCQUFrQixDQUFDSCxJQUFJLENBQUM7RUFDOUMsQ0FBQyxNQUFNO0lBQ0gsTUFBTSxJQUFJSSxLQUFLLENBQUMscUJBQXFCLENBQUM7RUFDMUM7QUFDSjtBQUVPLFNBQVNDLFNBQVNBLENBQUNDLFdBQXdCLEVBQXdCO0VBQ3RFO0VBQ0E7RUFDQSxPQUFPLElBQUlDLE9BQU8sQ0FBRUMsT0FBTyxJQUFLO0lBQzVCO0lBQ0FDLGNBQU0sQ0FBQ0MsR0FBRyxDQUFDLHFCQUFxQixHQUFHQyx5QkFBZSxDQUFDLENBQUMsQ0FBQztJQUNyRCxNQUFNQyxVQUFVLEdBQUcsSUFBSUMsVUFBVSxDQUFDUCxXQUFXLENBQUM7SUFDOUMsTUFBTVEsYUFBYSxHQUFHLElBQUlDLE1BQU0sQ0FBQ0MsMEJBQVcsQ0FBQztJQUM3QyxNQUFNQyxTQUFTLEdBQUcsSUFBSUYsTUFBTSxDQUFDRyxzQkFBYyxDQUFDO0lBRTVDSixhQUFhLENBQUNLLFdBQVcsQ0FBQztNQUN0QkMsT0FBTyxFQUFFLE1BQU07TUFDZkMsaUJBQWlCLEVBQUVDLDJCQUFXO01BQzlCQyxzQkFBc0IsRUFBRUQ7SUFDNUIsQ0FBQyxDQUFDO0lBRUZMLFNBQVMsQ0FBQ0UsV0FBVyxDQUFDO01BQ2xCQyxPQUFPLEVBQUUsTUFBTTtNQUNmSSxXQUFXLEVBQUUsRUFBRTtNQUFFO01BQ2pCQyxhQUFhLEVBQUVIO0lBQ25CLENBQUMsQ0FBQztJQUVGUixhQUFhLENBQUNZLFNBQVMsR0FBSUMsRUFBRSxJQUFLO01BQzlCLElBQUlBLEVBQUUsQ0FBQ0MsSUFBSSxLQUFLLElBQUksRUFBRTtRQUNsQjtRQUNBWCxTQUFTLENBQUNFLFdBQVcsQ0FBQztVQUFFQyxPQUFPLEVBQUU7UUFBTyxDQUFDLENBQUM7UUFDMUM7TUFDSjtNQUVBSCxTQUFTLENBQUNFLFdBQVcsQ0FDakI7UUFDSUMsT0FBTyxFQUFFLFFBQVE7UUFDakJTLE9BQU8sRUFBRUYsRUFBRSxDQUFDQztNQUNoQixDQUFDLEVBQ0RELEVBQUUsQ0FBQ0MsSUFBSSxDQUFDRSxHQUFHLENBQUVDLENBQWUsSUFBS0EsQ0FBQyxDQUFDQyxNQUFNLENBQzdDLENBQUM7SUFDTCxDQUFDO0lBRURmLFNBQVMsQ0FBQ1MsU0FBUyxHQUFJQyxFQUFFLElBQUs7TUFDMUIsSUFBSUEsRUFBRSxDQUFDQyxJQUFJLENBQUNLLE9BQU8sS0FBSyxNQUFNLEVBQUU7UUFDNUI7UUFDQXpCLE9BQU8sQ0FBQyxJQUFJMEIsSUFBSSxDQUFDLENBQUNQLEVBQUUsQ0FBQ0MsSUFBSSxDQUFDTyxJQUFJLENBQUMsRUFBRTtVQUFFQyxJQUFJLEVBQUU7UUFBWSxDQUFDLENBQUMsQ0FBQ0MsV0FBVyxDQUFDLENBQUMsQ0FBQztNQUMxRTtJQUNKLENBQUM7SUFFRHZCLGFBQWEsQ0FBQ0ssV0FBVyxDQUNyQjtNQUNJQyxPQUFPLEVBQUUsUUFBUTtNQUNqQmtCLEtBQUssRUFBRTFCO0lBQ1gsQ0FBQyxFQUNELENBQUNBLFVBQVUsQ0FBQ29CLE1BQU0sQ0FDdEIsQ0FBQztFQUNMLENBQUMsQ0FBQztBQUNOIiwiaWdub3JlTGlzdCI6W119