testaugnitorecorder4 1.0.47 → 1.0.48
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/augnitoRecorder.d.ts +1 -0
- package/dist/augnitoRecorder.js +220 -25
- package/dist/augnitoRecorder.js.map +1 -1
- package/package.json +1 -1
|
@@ -41,6 +41,7 @@ export declare class AugnitoRecorder {
|
|
|
41
41
|
pauseAudio(): void;
|
|
42
42
|
resumeAudio(): void;
|
|
43
43
|
stopAudio(shouldSendEOS?: boolean, forceStopForPausedState?: boolean): void;
|
|
44
|
+
isInternetAvailable(): Promise<boolean>;
|
|
44
45
|
getBlob(): Blob;
|
|
45
46
|
log(event: any): void;
|
|
46
47
|
dispose(): void;
|
package/dist/augnitoRecorder.js
CHANGED
|
@@ -365,6 +365,20 @@ function _createClass(Constructor, protoProps, staticProps) {
|
|
|
365
365
|
});
|
|
366
366
|
return Constructor;
|
|
367
367
|
}
|
|
368
|
+
function _defineProperty(obj, key, value) {
|
|
369
|
+
key = _toPropertyKey(key);
|
|
370
|
+
if (key in obj) {
|
|
371
|
+
Object.defineProperty(obj, key, {
|
|
372
|
+
value: value,
|
|
373
|
+
enumerable: true,
|
|
374
|
+
configurable: true,
|
|
375
|
+
writable: true
|
|
376
|
+
});
|
|
377
|
+
} else {
|
|
378
|
+
obj[key] = value;
|
|
379
|
+
}
|
|
380
|
+
return obj;
|
|
381
|
+
}
|
|
368
382
|
|
|
369
383
|
var LOOP_AUDIO = true;
|
|
370
384
|
var WORKLET_PROCESSOR = "worklet-processor";
|
|
@@ -1333,6 +1347,115 @@ var Streamer = /*#__PURE__*/function () {
|
|
|
1333
1347
|
}]);
|
|
1334
1348
|
}();
|
|
1335
1349
|
|
|
1350
|
+
var NetworkMonitor = /*#__PURE__*/function () {
|
|
1351
|
+
function NetworkMonitor() {
|
|
1352
|
+
_classCallCheck(this, NetworkMonitor);
|
|
1353
|
+
}
|
|
1354
|
+
return _createClass(NetworkMonitor, null, [{
|
|
1355
|
+
key: "isBrowserOnline",
|
|
1356
|
+
value:
|
|
1357
|
+
/**
|
|
1358
|
+
* Fast browser-level connectivity signal
|
|
1359
|
+
* @returns {boolean}
|
|
1360
|
+
*/
|
|
1361
|
+
function isBrowserOnline() {
|
|
1362
|
+
return typeof navigator !== "undefined" && navigator.onLine === true;
|
|
1363
|
+
}
|
|
1364
|
+
|
|
1365
|
+
/**
|
|
1366
|
+
* Real internet connectivity check using fetch
|
|
1367
|
+
*
|
|
1368
|
+
* @param {Object} [options]
|
|
1369
|
+
* @param {string} [options.url] - Endpoint to ping
|
|
1370
|
+
* @param {number} [options.timeoutMs] - Timeout in milliseconds
|
|
1371
|
+
* @returns {Promise<boolean>}
|
|
1372
|
+
*/
|
|
1373
|
+
}, {
|
|
1374
|
+
key: "hasInternetConnection",
|
|
1375
|
+
value: (function () {
|
|
1376
|
+
var _hasInternetConnection = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
|
|
1377
|
+
var options,
|
|
1378
|
+
url,
|
|
1379
|
+
timeoutMs,
|
|
1380
|
+
controller,
|
|
1381
|
+
timeoutId,
|
|
1382
|
+
_args = arguments;
|
|
1383
|
+
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
1384
|
+
while (1) switch (_context.prev = _context.next) {
|
|
1385
|
+
case 0:
|
|
1386
|
+
options = _args.length > 0 && _args[0] !== undefined ? _args[0] : {};
|
|
1387
|
+
url = options.url || NetworkMonitor.DEFAULT_URL;
|
|
1388
|
+
timeoutMs = options.timeoutMs || NetworkMonitor.DEFAULT_TIMEOUT;
|
|
1389
|
+
if (NetworkMonitor.isBrowserOnline()) {
|
|
1390
|
+
_context.next = 5;
|
|
1391
|
+
break;
|
|
1392
|
+
}
|
|
1393
|
+
return _context.abrupt("return", false);
|
|
1394
|
+
case 5:
|
|
1395
|
+
controller = new AbortController();
|
|
1396
|
+
timeoutId = setTimeout(function () {
|
|
1397
|
+
return controller.abort();
|
|
1398
|
+
}, timeoutMs);
|
|
1399
|
+
_context.prev = 7;
|
|
1400
|
+
_context.next = 10;
|
|
1401
|
+
return fetch(url, {
|
|
1402
|
+
method: "HEAD",
|
|
1403
|
+
mode: "no-cors",
|
|
1404
|
+
cache: "no-cache",
|
|
1405
|
+
signal: controller.signal
|
|
1406
|
+
});
|
|
1407
|
+
case 10:
|
|
1408
|
+
return _context.abrupt("return", true);
|
|
1409
|
+
case 13:
|
|
1410
|
+
_context.prev = 13;
|
|
1411
|
+
_context.t0 = _context["catch"](7);
|
|
1412
|
+
return _context.abrupt("return", false);
|
|
1413
|
+
case 16:
|
|
1414
|
+
_context.prev = 16;
|
|
1415
|
+
clearTimeout(timeoutId);
|
|
1416
|
+
return _context.finish(16);
|
|
1417
|
+
case 19:
|
|
1418
|
+
case "end":
|
|
1419
|
+
return _context.stop();
|
|
1420
|
+
}
|
|
1421
|
+
}, _callee, null, [[7, 13, 16, 19]]);
|
|
1422
|
+
}));
|
|
1423
|
+
function hasInternetConnection() {
|
|
1424
|
+
return _hasInternetConnection.apply(this, arguments);
|
|
1425
|
+
}
|
|
1426
|
+
return hasInternetConnection;
|
|
1427
|
+
}()
|
|
1428
|
+
/**
|
|
1429
|
+
* Best possible signal for SDK consumers
|
|
1430
|
+
*
|
|
1431
|
+
* @param {Object} [options]
|
|
1432
|
+
* @returns {Promise<boolean>}
|
|
1433
|
+
*/
|
|
1434
|
+
)
|
|
1435
|
+
}, {
|
|
1436
|
+
key: "isOnline",
|
|
1437
|
+
value: (function () {
|
|
1438
|
+
var _isOnline = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(options) {
|
|
1439
|
+
return _regeneratorRuntime().wrap(function _callee2$(_context2) {
|
|
1440
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
1441
|
+
case 0:
|
|
1442
|
+
return _context2.abrupt("return", NetworkMonitor.hasInternetConnection(options));
|
|
1443
|
+
case 1:
|
|
1444
|
+
case "end":
|
|
1445
|
+
return _context2.stop();
|
|
1446
|
+
}
|
|
1447
|
+
}, _callee2);
|
|
1448
|
+
}));
|
|
1449
|
+
function isOnline(_x) {
|
|
1450
|
+
return _isOnline.apply(this, arguments);
|
|
1451
|
+
}
|
|
1452
|
+
return isOnline;
|
|
1453
|
+
}())
|
|
1454
|
+
}]);
|
|
1455
|
+
}();
|
|
1456
|
+
_defineProperty(NetworkMonitor, "DEFAULT_URL", "https://www.google.com/favicon.ico");
|
|
1457
|
+
_defineProperty(NetworkMonitor, "DEFAULT_TIMEOUT", 5000);
|
|
1458
|
+
|
|
1336
1459
|
var AugnitoRecorder = /*#__PURE__*/function () {
|
|
1337
1460
|
function AugnitoRecorder() {
|
|
1338
1461
|
var _config$serverURL, _config$switchToRegul, _config$debounceDelay;
|
|
@@ -1420,26 +1543,40 @@ var AugnitoRecorder = /*#__PURE__*/function () {
|
|
|
1420
1543
|
key: "startAudio",
|
|
1421
1544
|
value: function () {
|
|
1422
1545
|
var _startAudio = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(duration) {
|
|
1423
|
-
var res;
|
|
1546
|
+
var online, res;
|
|
1424
1547
|
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
1425
1548
|
while (1) switch (_context.prev = _context.next) {
|
|
1426
1549
|
case 0:
|
|
1550
|
+
_context.next = 2;
|
|
1551
|
+
return NetworkMonitor.isOnline();
|
|
1552
|
+
case 2:
|
|
1553
|
+
online = _context.sent;
|
|
1554
|
+
if (online) {
|
|
1555
|
+
_context.next = 6;
|
|
1556
|
+
break;
|
|
1557
|
+
}
|
|
1558
|
+
this.onErrorCallback(JSON.stringify({
|
|
1559
|
+
Type: "ERROR",
|
|
1560
|
+
Data: "No internet connection"
|
|
1561
|
+
}));
|
|
1562
|
+
return _context.abrupt("return");
|
|
1563
|
+
case 6:
|
|
1427
1564
|
if (!this.isStreamerStarting) {
|
|
1428
|
-
_context.next =
|
|
1565
|
+
_context.next = 8;
|
|
1429
1566
|
break;
|
|
1430
1567
|
}
|
|
1431
1568
|
return _context.abrupt("return");
|
|
1432
|
-
case
|
|
1569
|
+
case 8:
|
|
1433
1570
|
// Prevent concurrent starts
|
|
1434
1571
|
|
|
1435
1572
|
this.isStreamerStarting = true;
|
|
1436
1573
|
if (!this.shouldPreIntialiseRecorder || !this.streamer) {
|
|
1437
1574
|
this.initialiseStreamer();
|
|
1438
1575
|
}
|
|
1439
|
-
_context.prev =
|
|
1440
|
-
_context.next =
|
|
1576
|
+
_context.prev = 10;
|
|
1577
|
+
_context.next = 13;
|
|
1441
1578
|
return this.streamer.StartStream(duration, this.WebsocketURL);
|
|
1442
|
-
case
|
|
1579
|
+
case 13:
|
|
1443
1580
|
res = _context.sent;
|
|
1444
1581
|
if (!res) {
|
|
1445
1582
|
this.streamer = null;
|
|
@@ -1447,15 +1584,15 @@ var AugnitoRecorder = /*#__PURE__*/function () {
|
|
|
1447
1584
|
this.streamerNotStarted = false;
|
|
1448
1585
|
this.log("Stream Started...");
|
|
1449
1586
|
}
|
|
1450
|
-
case
|
|
1451
|
-
_context.prev =
|
|
1587
|
+
case 15:
|
|
1588
|
+
_context.prev = 15;
|
|
1452
1589
|
this.isStreamerStarting = false;
|
|
1453
|
-
return _context.finish(
|
|
1454
|
-
case
|
|
1590
|
+
return _context.finish(15);
|
|
1591
|
+
case 18:
|
|
1455
1592
|
case "end":
|
|
1456
1593
|
return _context.stop();
|
|
1457
1594
|
}
|
|
1458
|
-
}, _callee, this, [[
|
|
1595
|
+
}, _callee, this, [[10,, 15, 18]]);
|
|
1459
1596
|
}));
|
|
1460
1597
|
function startAudio(_x) {
|
|
1461
1598
|
return _startAudio.apply(this, arguments);
|
|
@@ -1480,21 +1617,79 @@ var AugnitoRecorder = /*#__PURE__*/function () {
|
|
|
1480
1617
|
*/
|
|
1481
1618
|
}, {
|
|
1482
1619
|
key: "stopAudio",
|
|
1483
|
-
value: function
|
|
1484
|
-
var
|
|
1485
|
-
|
|
1486
|
-
|
|
1487
|
-
|
|
1488
|
-
|
|
1489
|
-
|
|
1490
|
-
|
|
1491
|
-
|
|
1492
|
-
|
|
1493
|
-
|
|
1494
|
-
|
|
1495
|
-
|
|
1620
|
+
value: (function () {
|
|
1621
|
+
var _stopAudio = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {
|
|
1622
|
+
var _this$streamer;
|
|
1623
|
+
var shouldSendEOS,
|
|
1624
|
+
forceStopForPausedState,
|
|
1625
|
+
_this$streamer2,
|
|
1626
|
+
online,
|
|
1627
|
+
_args2 = arguments;
|
|
1628
|
+
return _regeneratorRuntime().wrap(function _callee2$(_context2) {
|
|
1629
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
1630
|
+
case 0:
|
|
1631
|
+
shouldSendEOS = _args2.length > 0 && _args2[0] !== undefined ? _args2[0] : true;
|
|
1632
|
+
forceStopForPausedState = _args2.length > 1 && _args2[1] !== undefined ? _args2[1] : false;
|
|
1633
|
+
if (!((_this$streamer = this.streamer) !== null && _this$streamer !== void 0 && _this$streamer.IsStreaming || forceStopForPausedState)) {
|
|
1634
|
+
_context2.next = 13;
|
|
1635
|
+
break;
|
|
1636
|
+
}
|
|
1637
|
+
_context2.next = 5;
|
|
1638
|
+
return NetworkMonitor.isOnline();
|
|
1639
|
+
case 5:
|
|
1640
|
+
online = _context2.sent;
|
|
1641
|
+
if (online) {
|
|
1642
|
+
_context2.next = 9;
|
|
1643
|
+
break;
|
|
1644
|
+
}
|
|
1645
|
+
this.onErrorCallback(JSON.stringify({
|
|
1646
|
+
Type: "ERROR",
|
|
1647
|
+
Data: "No internet connection"
|
|
1648
|
+
}));
|
|
1649
|
+
return _context2.abrupt("return");
|
|
1650
|
+
case 9:
|
|
1651
|
+
(_this$streamer2 = this.streamer) === null || _this$streamer2 === void 0 || _this$streamer2.StopStream(shouldSendEOS);
|
|
1652
|
+
this.streamer = null;
|
|
1653
|
+
this.log("Stream Stopped...");
|
|
1654
|
+
if (this.shouldPreIntialiseRecorder) {
|
|
1655
|
+
this.initialiseStreamer();
|
|
1656
|
+
this.streamerNotStarted = true;
|
|
1657
|
+
}
|
|
1658
|
+
case 13:
|
|
1659
|
+
case "end":
|
|
1660
|
+
return _context2.stop();
|
|
1661
|
+
}
|
|
1662
|
+
}, _callee2, this);
|
|
1663
|
+
}));
|
|
1664
|
+
function stopAudio() {
|
|
1665
|
+
return _stopAudio.apply(this, arguments);
|
|
1496
1666
|
}
|
|
1497
|
-
|
|
1667
|
+
return stopAudio;
|
|
1668
|
+
}())
|
|
1669
|
+
}, {
|
|
1670
|
+
key: "isInternetAvailable",
|
|
1671
|
+
value: function () {
|
|
1672
|
+
var _isInternetAvailable = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3() {
|
|
1673
|
+
var online;
|
|
1674
|
+
return _regeneratorRuntime().wrap(function _callee3$(_context3) {
|
|
1675
|
+
while (1) switch (_context3.prev = _context3.next) {
|
|
1676
|
+
case 0:
|
|
1677
|
+
_context3.next = 2;
|
|
1678
|
+
return NetworkMonitor.isOnline();
|
|
1679
|
+
case 2:
|
|
1680
|
+
online = _context3.sent;
|
|
1681
|
+
return _context3.abrupt("return", online);
|
|
1682
|
+
case 4:
|
|
1683
|
+
case "end":
|
|
1684
|
+
return _context3.stop();
|
|
1685
|
+
}
|
|
1686
|
+
}, _callee3);
|
|
1687
|
+
}));
|
|
1688
|
+
function isInternetAvailable() {
|
|
1689
|
+
return _isInternetAvailable.apply(this, arguments);
|
|
1690
|
+
}
|
|
1691
|
+
return isInternetAvailable;
|
|
1692
|
+
}()
|
|
1498
1693
|
}, {
|
|
1499
1694
|
key: "getBlob",
|
|
1500
1695
|
value: function getBlob() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"augnitoRecorder.js","sources":["../lib/constants.js","../lib/executor.js","../lib/worklet.js","../lib/streamer.js","../lib/augnitoRecorder.js"],"sourcesContent":["export const LOOP_AUDIO = true;\nexport const WORKLET_PROCESSOR = \"worklet-processor\";\nexport const SAMPLE_RATE = 16000;\nconst FRAMES_PER_BLOCK = 128;\n// buffer_size = 1 sec audio = 125 blocks = 16000 frames = 16000 mono samples\nexport const BUFFER_SIZE = 125 * FRAMES_PER_BLOCK;\nexport const SILENCE_IN_SECS = 2;\n\nexport const EOS_MSG = \"EOS\";\nexport const DONE_MSG = \"DONE\";\nexport const PAUSE_MSG = \"PAUSE\";\nexport const PAUSE_SOCKET_MSG = \"PAUSESOCKET\";\nexport const RESUME_SOCKET_MSG = \"RESUMESOCKET\";\nexport const STOP_MSG = \"STOP\";\nexport const CLOSE_MSG = \"CLOSE\";\nexport const CHANNEL_COUNT = 1;\nexport const BITS_PER_SAMPLE = 16;\nexport const NOISE_SUPPRESS_ENABLED = false;\n\nexport const KEEP_ALIVE_TIMEOUT = 120000;\nexport const IDLE_THREAD_INTERVAL = 10000;\nexport const CONSUME_INTERVAL = 100;\nexport const CONNECT_RETRY_TIMEOUT = 10000;\nexport const HEALTHCHECK_INTERVAL = 1000;\nexport const SOCKET_TIMEOUT = 10000;\nexport const MAX_AUDIO_SAMPLES = 16000 * 60 * 30;\n","import {\n KEEP_ALIVE_TIMEOUT,\n IDLE_THREAD_INTERVAL,\n EOS_MSG,\n CONNECT_RETRY_TIMEOUT,\n SOCKET_TIMEOUT,\n HEALTHCHECK_INTERVAL,\n CONSUME_INTERVAL,\n DONE_MSG,\n CLOSE_MSG,\n PAUSE_SOCKET_MSG,\n RESUME_SOCKET_MSG,\n} from \"./constants.js\";\n\nexport class Executor {\n constructor(\n enableLogs,\n eosMessage,\n socketTimeoutInterval,\n shouldSendAudioDataSequence,\n onFinalResult,\n onPartialResult,\n onError,\n onSessionEvent,\n onOtherResults,\n onSpeechResponse,\n bufferSizeInterval,\n switchToRegularSpeechProfile\n ) {\n this.worker;\n this.onFinalResultCallback = onFinalResult;\n this.onErrorCallback = onError;\n this.onPartialResultCallback = onPartialResult;\n this.onSessionEventCallback = onSessionEvent;\n this.onOtherResultsCallback = onOtherResults;\n this.onSpeechResponseCallback = onSpeechResponse;\n this.packetSeqId = 0;\n this.audioDuration = 0;\n this.shouldSendAudioDataSequence = shouldSendAudioDataSequence;\n this.heavyOp;\n this.idleLoop;\n this.lastSent;\n this.enableLogs = enableLogs;\n this.eosMessage = eosMessage ? eosMessage : EOS_MSG;\n this.socketTimeoutInterval = socketTimeoutInterval\n ? socketTimeoutInterval\n : SOCKET_TIMEOUT;\n this.bufferSizeInterval = bufferSizeInterval;\n this.switchToRegularSpeech = switchToRegularSpeechProfile;\n }\n\n // main-thread\n Start(duration, wsUrl) {\n this.audioDuration = duration;\n const workerScript = `\n (() => {\n (${WorkerBlob.toString()})(${JSON.stringify(DONE_MSG)}, ${JSON.stringify(\n this.eosMessage\n )}, ${JSON.stringify(CLOSE_MSG)}, ${JSON.stringify(\n CONNECT_RETRY_TIMEOUT\n )}, ${JSON.stringify(this.socketTimeoutInterval)}, ${JSON.stringify(\n HEALTHCHECK_INTERVAL\n )}, ${JSON.stringify(CONSUME_INTERVAL)}, ${JSON.stringify(\n wsUrl\n )}, ${JSON.stringify(this.enableLogs)}, ${JSON.stringify(\n this.shouldSendAudioDataSequence\n )},${JSON.stringify(PAUSE_SOCKET_MSG)}, ${JSON.stringify(\n RESUME_SOCKET_MSG\n )}, ${JSON.stringify(this.switchToRegularSpeech)}, ${JSON.stringify(\n this.heavyOp\n )});\n })();\n`;\n this.worker = new Worker(\n URL.createObjectURL(\n new Blob([workerScript], {\n type: \"application/javascript\",\n })\n )\n );\n // message received from web-worker\n this.worker.onmessage = (event) => {\n if (this.enableLogs) {\n console.log(\"Augnito [MAIN]: \" + JSON.stringify(event.data));\n }\n var eventData = event.data;\n // const asrText = document.getElementById(\"asrText\");\n if (eventData.type == \"final\") this.onFinalResultCallback(eventData.data);\n else if (eventData.type == \"partial\")\n this.onPartialResultCallback(eventData.data);\n else if (eventData.type == \"meta\")\n this.onSessionEventCallback(eventData.data);\n else if (eventData.type == \"error\") this.onErrorCallback(eventData.data);\n else if (eventData.type == \"other\")\n this.onOtherResultsCallback(eventData.data);\n else if (eventData.type == \"speechResponse\")\n this.onSpeechResponseCallback(eventData.data);\n };\n // main-thread\n this.idleLoop = setInterval(() => {\n const currentTime = +new Date();\n if (this.lastSent && currentTime - this.lastSent > KEEP_ALIVE_TIMEOUT) {\n this.Send(this.eosMessage);\n if (this.enableLogs) {\n console.warn(\n `No data sent since more than ${\n KEEP_ALIVE_TIMEOUT / 1000\n } secs, closing time...`\n );\n }\n }\n }, IDLE_THREAD_INTERVAL);\n }\n\n createAudioPacketHeader(isLastPacket) {\n if (this.audioDuration > 0) {\n this.packetSeqId =\n Math.ceil(this.audioDuration / this.bufferSizeInterval) + 2;\n this.audioDuration = 0;\n }\n this.packetSeqId++;\n const headerSize = 16;\n\n // Create a buffer of the required size\n const buffer = new ArrayBuffer(headerSize);\n\n const view = new DataView(buffer);\n\n // Write '@BSR' as string\n for (let i = 0; i < 4; i++) {\n view.setUint8(i, \"@BSR\".charCodeAt(i));\n }\n\n // Write packet ID (int64)\n view.setBigInt64(4, BigInt(this.packetSeqId), false); // false for big endian\n\n // Write boolean value\n view.setUint8(12, isLastPacket ? 1 : 0);\n return buffer;\n }\n\n appendAudioData(arrayBuffer, audioDataBytes) {\n const totalLength = arrayBuffer.byteLength + audioDataBytes.byteLength;\n const combinedBuffer = new ArrayBuffer(totalLength);\n const combinedArray = new Uint8Array(combinedBuffer);\n combinedArray.set(new Uint8Array(arrayBuffer), 0);\n combinedArray.set(new Uint8Array(audioDataBytes), arrayBuffer.byteLength);\n return combinedBuffer;\n }\n\n // main-thread\n Send(data) {\n this.lastSent = +new Date();\n if (data === CLOSE_MSG) {\n this.worker?.postMessage(CLOSE_MSG);\n clearInterval(this.idleLoop);\n } else if (data === DONE_MSG) {\n // message sent to web-worker\n if (this.shouldSendAudioDataSequence) {\n var binaryHeader = this.createAudioPacketHeader(true);\n this.worker?.postMessage(binaryHeader);\n } else {\n this.worker?.postMessage(DONE_MSG);\n }\n clearInterval(this.idleLoop);\n } else if (data == PAUSE_SOCKET_MSG) {\n this.worker?.postMessage(PAUSE_SOCKET_MSG);\n } else if (data == RESUME_SOCKET_MSG) {\n this.worker?.postMessage(RESUME_SOCKET_MSG);\n } else if (data === this.eosMessage) {\n if (!this.shouldSendAudioDataSequence) this.worker?.postMessage(data);\n } else {\n var audioData = [];\n if (this.shouldSendAudioDataSequence) {\n var binaryHeader = this.createAudioPacketHeader(false);\n audioData = this.appendAudioData(binaryHeader, data);\n } else {\n audioData = data;\n }\n if (audioData !== undefined) {\n // message sent to web-worker - transferrable\n this.worker?.postMessage(audioData, [audioData]);\n }\n }\n }\n\n set HeavyOp(heavyOp) {\n this.heavyOp = heavyOp;\n }\n}\n\nfunction WorkerBlob(\n doneMessage,\n eosMessage,\n closeMessage,\n connectionRetryTimeout,\n socketTimeoutInterval,\n healthcheckInterval,\n consumeInterval,\n wsUrl,\n enableLogs,\n shouldSendAudioDataSequence,\n pauseSocketMessage,\n resumeSocketMessage,\n switchToRegularSpeechProfile,\n heavyOp\n) {\n let lastConnect;\n var lastDataSent;\n var lastDataReceived;\n let lastPingReceived;\n let queue = [];\n let pauseStateAudio;\n let sentPacketsQueue = [];\n let ws;\n let isDone = false;\n let consumer;\n let healthCheck;\n let retrySentPacket = false;\n let packetId = 0;\n let shouldNotReconnect = false;\n let JobID = \"\";\n let shouldPauseSocket = false;\n\n function initConnect() {\n lastConnect = +new Date();\n if (JobID != \"\") {\n ws = new WebSocket(wsUrl + \"&jobid=\" + JobID);\n } else {\n ws = new WebSocket(wsUrl);\n }\n ws.onopen = (event) => {\n if (enableLogs) {\n console.log(\n \"Augnito: WebSocket connection established - \" + JSON.stringify(event)\n );\n }\n if (sentPacketsQueue.length > 0) {\n retrySentPacket = true;\n }\n };\n ws.onmessage = (message) => {\n if (enableLogs) {\n console.log(\n \"Augnito: Message from server - \" + JSON.stringify(message.data)\n );\n }\n lastDataReceived = +new Date();\n operate(message);\n };\n ws.onerror = (error) => {\n console.error(\"WebSocket error: \", error);\n self.postMessage({\n type: \"error\",\n data: JSON.stringify(error),\n });\n // TODO may want to reinitialise\n };\n ws.onclose = (event) => {\n if (enableLogs) {\n console.log(\n \"Augnito: WebSocket connection closed - \" + JSON.stringify(event)\n );\n }\n cleanup();\n };\n lastDataSent = +new Date();\n lastDataReceived = lastDataSent;\n lastPingReceived = +new Date();\n }\n\n // TODO lose the interval and try reading from queue on-add and on-open.\n\n function send(data) {\n if (ws && ws.readyState === WebSocket.OPEN) {\n ws.send(data);\n // This needs to be done to keep the \"lastDataReceived\" value closer to the\n // first \"lastDataSent\" value after ASR is received from the server, so as to\n // not invoke the healthcheck loop and force close the connection.\n var currentTime = +new Date();\n if (lastDataSent <= lastDataReceived) {\n lastDataReceived = currentTime - 1;\n }\n lastDataSent = currentTime;\n return true;\n } else {\n if (data === eosMessage) {\n if (enableLogs) {\n console.warn(\n `Gulping ${eosMessage} as socket seems already closed...`\n );\n }\n cleanup();\n return true;\n }\n if (\n +new Date() - lastConnect > connectionRetryTimeout &&\n !shouldNotReconnect\n ) {\n initConnect();\n }\n return false;\n }\n }\n\n function add(data) {\n queue.push(data);\n }\n\n function operate(message) {\n try {\n if (message.data === \"PING\") {\n lastPingReceived = +new Date();\n self.postMessage({ type: \"ping\", data: message.data });\n } else {\n const data = JSON.parse(message.data);\n if (enableLogs) {\n console.log(\"Augnito [WORKER]: \" + JSON.stringify(data));\n }\n if (data.Type == \"meta\") {\n if (data.JobID) {\n JobID = data.JobID;\n console.log(\"Augnito JobID:\", JobID);\n }\n self.postMessage({ type: \"meta\", data: message.data });\n var metaResponse = JSON.parse(message.data);\n if (\n metaResponse.Event &&\n metaResponse.Event[\"Type\"] === \"INVALID_AUTH_CREDENTIALS\"\n ) {\n shouldNotReconnect = true;\n } else {\n shouldNotReconnect = false;\n }\n } else if (data.Result && data.Result.Final) {\n // should not be called with \"this\", check worker construction for more info.\n var outputText = JSON.stringify(data.Result);\n\n if (heavyOp) {\n outputText = heavyOp(JSON.stringify(data.Result));\n console.log(outputText);\n }\n self.postMessage({ type: \"final\", data: outputText });\n\n // message sent to main-thread\n } else if (data.Result && !data.Result.Final) {\n self.postMessage({\n type: \"partial\",\n data: data.Result.Transcript,\n });\n } else if (data.Type == \"ACK\") {\n //reset queue with only those packets whose seq num is greater than ACK index\n sentPacketsQueue = sentPacketsQueue.filter(\n (x) => x.packetNumber > data.Index\n );\n self.postMessage({ type: \"other\", data: message.data });\n } else if (data.Type == \"ERROR\") {\n if (data.Data == \"Timeout exceeded\") {\n isDone = true;\n cleanup();\n }\n self.postMessage({\n type: \"error\",\n data: message.data,\n });\n } else {\n self.postMessage({\n type: \"speechResponse\",\n data: message.data,\n });\n }\n }\n } catch (e) {\n self.postMessage({\n type: \"error\",\n data: \"invalid response\",\n });\n }\n }\n\n function cleanup() {\n if (isDone) {\n clearInterval(consumer);\n clearInterval(healthCheck);\n queue = [];\n sentPacketsQueue = [];\n self.close();\n }\n }\n\n initConnect();\n consumer = setInterval(() => {\n if (retrySentPacket) {\n for (var i = 0; i < sentPacketsQueue.length; i++) {\n const retryPacket = sentPacketsQueue[i].packetData;\n const res = send(retryPacket);\n if (!res) break;\n }\n retrySentPacket = false;\n } else {\n while (queue.length > 0) {\n const data = queue.shift();\n const isSent = send(data);\n if (!isSent) {\n queue.unshift(data);\n break;\n }\n if (shouldSendAudioDataSequence) {\n const view = new DataView(data);\n packetId = Number(view.getBigInt64(4));\n var sentPacket = { packetNumber: packetId, packetData: data };\n sentPacketsQueue.push(sentPacket);\n }\n }\n }\n }, consumeInterval);\n\n healthCheck = setInterval(() => {\n if (ws && ws.readyState === WebSocket.OPEN) {\n const currentTime = +new Date();\n const isSocketClosingTime = switchToRegularSpeechProfile\n ? lastDataSent > lastDataReceived &&\n currentTime - lastDataReceived > socketTimeoutInterval\n : currentTime - lastPingReceived > socketTimeoutInterval;\n if (isSocketClosingTime) {\n if (enableLogs) {\n console.error(\n `No data received since more than ${\n socketTimeoutInterval / 1000\n } secs, closing time...`\n );\n }\n ws.close();\n }\n }\n }, healthcheckInterval);\n\n self.onmessage = (event) => {\n if (event.data === closeMessage) {\n JobID = \"\";\n isDone = true;\n shouldNotReconnect = true;\n ws.close();\n } else if (event.data === doneMessage) {\n add(eosMessage);\n JobID = \"\";\n if (enableLogs) {\n console.log(\"Augnito: Worker received DONE, time to terminate...\");\n }\n isDone = true;\n } else if (event.data === pauseSocketMessage) {\n shouldPauseSocket = true;\n } else if (event.data === resumeSocketMessage) {\n add(pauseStateAudio);\n shouldPauseSocket = false;\n pauseStateAudio = [];\n } else {\n if (shouldPauseSocket) {\n pauseStateAudio = event.data;\n } else add(event.data);\n }\n };\n}\n","// worklet-thread\nexport const worklet = `class MyAudioWorkletProcessor extends AudioWorkletProcessor {\n constructor() {\n super();\n this.accumulator = [];\n this.pauseSocketStreaming = false;\n this.sampleVal = 0;\n this.sampleSize = 0;\n this.intensityFrameCount = 0;\n this.reset();\n this.isProcessing = true;\n // message received from main-thread\n this.port.onmessage = (e) => {\n console.log(\"Augnito: Worklet received event - \", e.data);\n if (this.sampleSize > 0) {\n this.accumulator.push(this.sampleVal / this.sampleSize);\n }\n \n if (e.data == \"PAUSE\" || e.data == \"STOP\" || e.data == \"PAUSESOCKET\") {\n // append silence to get last word ASR.\n const silenceSize = 16000 * 2;\n for (let i = 0; i < silenceSize; i++) {\n this.accumulator.push(0);\n }\n }\n this.send();\n this.reset();\n if (e.data == \"STOP\") {\n // message sent to main-thread\n this.port.postMessage({type:\"DONE\", value:\"DONE\"});\n this.isProcessing = false;\n \n }\n if(e.data == \"PAUSESOCKET\"){\n this.pauseSocketStreaming = true;\n this.port.postMessage(\"PAUSESOCKET\");\n } else if(e.data == \"RESUMESOCKET\"){\n this.pauseSocketStreaming = false;\n } \n };\n }\n\n static get parameterDescriptors() {\n return [\n {\n name: \"sampleRate\",\n defaultValue: 16000,\n minValue: 16000,\n maxValue: 6 * 16000,\n },\n {\n name: \"bufferSizeInterval\",\n defaultValue: 1,\n minValue: 1,\n maxValue: 100,\n },\n {\n name: \"pausedBufferInterval\",\n defaultValue: 1,\n minValue: 0,\n maxValue: 100,\n },\n {\n name: \"shouldReadIntensity\",\n defaultValue: false,\n minValue: 0,\n maxValue: 1,\n },\n ];\n }\n\n // 128 frames\n process(inputList, outputList, params) {\n const input = inputList[0];\n if (input && input.length && input[0].length) {\n const channelData = input[0];\n const output = outputList[0];\n const inputSampleRate = params.sampleRate[0];\n const sampleRatio = inputSampleRate / 16000\n const bufferSizeInterval = params[\"bufferSizeInterval\"][0];\n const pausedBufferInterval = params[\"pausedBufferInterval\"][0];\n const shouldReadIntensity = params[\"shouldReadIntensity\"][0];\n\n let sumSquares = 0; // For intensity\n let sampleCount = 0;\n\n // console.log(\"BufferSizeInterval\", bufferSizeInterval);\n // Jackpot\n input[0].forEach((float32Element, index) => {\n const int16Element = Math.min(1, Math.max(-1, float32Element)) * 0x7fff;\n this.sampleVal += int16Element;\n this.sampleSize += 1;\n // Accumulate for intensity (RMS)\n sumSquares += float32Element * float32Element;\n sampleCount++;\n \n\n if (this.sampleSize >= sampleRatio) {\n const fraction = this.sampleSize - sampleRatio \n this.sampleVal -= fraction * int16Element;\n\n this.accumulator.push(this.sampleVal / sampleRatio);\n \n this.sampleVal = fraction * int16Element;\n this.sampleSize = fraction;\n }\n\n // Comment this when streaming microphone audio\n // output[0][index] = float32Element;\n });\n if(this.pauseSocketStreaming){\n if (this.accumulator.length >= 125 * 128 * pausedBufferInterval) {\n this.send();\n }\n } else{\n if (this.accumulator.length >= 125 * 128 * bufferSizeInterval) {\n this.send();\n }\n }\n if(shouldReadIntensity){\n \n // Throttled intensity post\n this.intensityFrameCount = (this.intensityFrameCount || 0) + 1;\n if (this.intensityFrameCount >= 15 && sampleCount > 0) {\n const rms = Math.sqrt(sumSquares / sampleCount);\n const normalized = Math.min(1, rms); // [0–1] scale\n this.port.postMessage({ type: 'intensity', value: normalized });\n this.intensityFrameCount = 0;\n }\n }\n }\n return this.isProcessing;\n }\n\n send() {\n if (this.accumulator.length == 0) return;\n const audioData = new Int16Array(this.accumulator);\n // message sent to main-thread - transferrable\n this.port.postMessage({ type: 'audioData', value: audioData.buffer }, [audioData.buffer]);\n this.accumulator = [];\n }\n\n reset() {\n this.sampleVal = 0;\n this.sampleSize = 0;\n }\n}\n\nregisterProcessor(\"worklet-processor\", MyAudioWorkletProcessor);`;\n","import {\n LOOP_AUDIO,\n PAUSE_MSG,\n STOP_MSG,\n DONE_MSG,\n WORKLET_PROCESSOR,\n CHANNEL_COUNT,\n BITS_PER_SAMPLE,\n NOISE_SUPPRESS_ENABLED,\n SAMPLE_RATE,\n CLOSE_MSG,\n PAUSE_SOCKET_MSG,\n RESUME_SOCKET_MSG,\n MAX_AUDIO_SAMPLES,\n} from \"./constants.js\";\nimport { Executor } from \"./executor.js\";\nimport { worklet } from \"./worklet.js\";\n\n// main-thread\nexport class Streamer {\n constructor(\n enableLogs,\n isDebug,\n bufferSizeInterval,\n pausedBufferInterval,\n eosMessage,\n socketTimeoutInterval,\n shouldSendAudioDataSequence,\n shouldPreIntialiseRecorder,\n shouldReadIntensity,\n switchToRegularSpeechProfile,\n heavyOp,\n onFinalResult,\n onPartialResult,\n onError,\n onStateChanged,\n onSessionEvent,\n onOtherResults,\n onSpeechResponse,\n onIntensity\n ) {\n this.audioContext;\n this.audioStream;\n this.executor = new Executor(\n enableLogs,\n eosMessage,\n socketTimeoutInterval,\n shouldSendAudioDataSequence,\n onFinalResult,\n onPartialResult,\n onError,\n onSessionEvent,\n onOtherResults,\n onSpeechResponse,\n bufferSizeInterval,\n switchToRegularSpeechProfile\n );\n this.executor.HeavyOp = heavyOp;\n\n this.source;\n this.processorNode;\n this.isPaused = false;\n this.isStreaming = false;\n // Uncomment to save recording\n this.audioData = [];\n this.isDebug = isDebug;\n this.enableLogs = enableLogs;\n this.onStateChanged = onStateChanged;\n this.onIntensity = onIntensity;\n this.onError = onError;\n this.bufferSizeInterval = bufferSizeInterval;\n this.pausedBufferInterval = pausedBufferInterval ?? 1;\n this.shouldReadIntensity = shouldReadIntensity;\n this.closeSocketWithoutEOS = false;\n this.shouldPreIntialiseRecorder = shouldPreIntialiseRecorder ?? false;\n if (this.shouldPreIntialiseRecorder) {\n this.EarlyInitialiseMediaStream();\n }\n }\n\n async EarlyInitialiseMediaStream() {\n await this.createMediaStreamSourceNode();\n if (this.audioContext && this.audioContext.state == \"running\") {\n await this.audioContext.suspend();\n }\n }\n\n async StartStream(duration, wsUrl) {\n this.log(\"New stream started...\");\n\n // Uncomment to stream recorded audio\n // await this.createBufferedSourceNode();\n // Uncomment to stream microphone audio\n if (!this.shouldPreIntialiseRecorder || !this.source) {\n await this.createMediaStreamSourceNode();\n if (!this.source) {\n console.error(\"Error: unable to create source node\");\n return false;\n }\n } else if (this.audioContext.state == \"suspended\") {\n await this.audioContext.resume();\n }\n\n await this.createProcessorNode();\n if (!this.processorNode) {\n console.error(\"Error: unable to create processor node\");\n return false;\n }\n if (this.IsMicrophoneMuted) {\n if (this.audioContext && this.audioContext.state == \"running\") {\n await this.audioContext.suspend();\n }\n this.onError(\n JSON.stringify({\n Type: \"ERROR\",\n Data: \"Microphone is muted.\",\n })\n );\n return false;\n }\n if (wsUrl !== \"\") {\n this.executor.Start(duration, wsUrl);\n }\n this.onStateChanged(true);\n this.source\n .connect(this.processorNode)\n .connect(this.audioContext.destination);\n this.log(\"AudioContext Sample Rate: \" + this.audioContext.sampleRate);\n this.isStreaming = true;\n return true;\n }\n\n async createBufferedSourceNode() {\n const audioBuffer = await this.loadAudio();\n if (!audioBuffer) {\n console.error(\"Error: unable to create audio buffer\");\n return;\n }\n this.source = this.audioContext.createBufferSource();\n this.source.buffer = audioBuffer;\n this.source.loop = LOOP_AUDIO;\n this.source.start();\n }\n\n async createMediaStreamSourceNode() {\n try {\n this.audioStream = await navigator.mediaDevices.getUserMedia({\n audio: {\n channelCount: CHANNEL_COUNT,\n noiseSuppression: NOISE_SUPPRESS_ENABLED,\n // sampleRate: SAMPLE_RATE,\n // sampleSize: BITS_PER_SAMPLE,\n },\n });\n this.audioContext = new AudioContext();\n this.source = this.audioContext.createMediaStreamSource(this.audioStream);\n this.audioStream.getAudioTracks()[0].addEventListener(\"ended\", () => {\n this.onError(\n JSON.stringify({\n Type: \"ERROR\",\n Data: \"Audio track ended. Possibly the mic was unplugged.\",\n })\n );\n });\n } catch (e) {\n var errMessage = \"\";\n if (e.name == \"NotAllowedError\") {\n errMessage = \"Mic permission denied\";\n } else if (e.name === \"NotFoundError\") {\n errMessage = \"No suitable media device found\";\n }\n this.onError(\n JSON.stringify({\n Type: \"ERROR\",\n Data: errMessage,\n })\n );\n }\n }\n\n async loadAudio() {\n try {\n const response = await fetch(\"./radiology_speed_test.wav\");\n const arrayBuffer = await response.arrayBuffer();\n const audioBuffer = await this.audioContext.decodeAudioData(arrayBuffer);\n return audioBuffer;\n } catch (err) {\n console.error(`Unable to fetch the audio file. Error: ${err.message}`);\n return null;\n }\n }\n\n async createProcessorNode() {\n try {\n await this.audioContext.audioWorklet.addModule(\n `data:application/javascript,${encodeURIComponent(worklet)}`\n );\n this.processorNode = new AudioWorkletNode(\n this.audioContext,\n WORKLET_PROCESSOR\n );\n\n const sampleRateParam = this.processorNode.parameters.get(\"sampleRate\");\n sampleRateParam.setValueAtTime(\n this.audioContext.sampleRate,\n this.audioContext.currentTime\n );\n const bufferSizeIntervalParam =\n this.processorNode.parameters.get(\"bufferSizeInterval\");\n bufferSizeIntervalParam.setValueAtTime(\n this.bufferSizeInterval,\n this.audioContext.currentTime\n );\n\n const pausedBufferIntervalParam = this.processorNode.parameters.get(\n \"pausedBufferInterval\"\n );\n pausedBufferIntervalParam.setValueAtTime(\n this.pausedBufferInterval,\n this.audioContext.currentTime\n );\n const shouldReadIntensityParam = this.processorNode.parameters.get(\n \"shouldReadIntensity\"\n );\n shouldReadIntensityParam.setValueAtTime(\n this.shouldReadIntensity ?? false,\n this.audioContext.currentTime\n );\n // message received from worklet-thread\n this.processorNode.port.onmessage = (event) => {\n const { type, value } = event.data;\n if (type == DONE_MSG) {\n this.log(\"Worklet processing done, clearing resources...\");\n\n // Uncomment to save recording\n if (this.isDebug) this.saveAudio();\n this.cleanup();\n } else if (event.data == PAUSE_SOCKET_MSG) {\n this.executor.Send(PAUSE_SOCKET_MSG);\n }\n // Uncomment to save recording\n else {\n if (type === \"intensity\") {\n this.onIntensity?.(value);\n } else if (type === \"audioData\") {\n if (this.isDebug) {\n new Int16Array(value).forEach((element) => {\n if (this.audioData.length <= MAX_AUDIO_SAMPLES)\n this.audioData.push(element);\n });\n }\n }\n }\n if (this.executor) {\n if (this.closeSocketWithoutEOS) {\n this.executor.Send(CLOSE_MSG);\n this.closeSocketWithoutEOS = false;\n } else {\n if (type !== \"intensity\") this.executor.Send(value);\n }\n }\n };\n } catch (e) {\n console.error(\"Error: Unable to create worklet node: \", e);\n }\n }\n\n async PauseStream() {\n if (this.audioContext.state == \"running\") {\n if (!this.shouldPreIntialiseRecorder) {\n await this.audioContext.suspend();\n this.onStateChanged(false);\n\n this.log(\"Stream paused...\");\n // message sent to worklet-thread\n this.processorNode.port.postMessage(PAUSE_MSG);\n } else {\n this.processorNode.port.postMessage(PAUSE_SOCKET_MSG);\n }\n }\n this.isPaused = true;\n this.isStreaming = false;\n }\n\n async ResumeStream() {\n if (\n !this.shouldPreIntialiseRecorder &&\n this.audioContext.state == \"suspended\"\n ) {\n if (this.IsMicrophoneMuted) {\n this.onError(\n JSON.stringify({\n Type: \"ERROR\",\n Data: \"Microphone is muted.\",\n })\n );\n return;\n }\n await this.audioContext.resume();\n this.log(\"Stream resumed...\");\n } else {\n this.processorNode.port.postMessage(RESUME_SOCKET_MSG);\n this.executor.Send(RESUME_SOCKET_MSG);\n }\n this.onStateChanged(true);\n this.isPaused = false;\n this.isStreaming = true;\n }\n\n get IsPaused() {\n return this.isPaused;\n }\n\n get IsStreaming() {\n return this.isStreaming;\n }\n\n get IsMicrophoneMuted() {\n return this.audioStream.getAudioTracks()[0].muted;\n }\n\n async StopStream(shouldSendEOS) {\n if (this.audioContext?.state !== \"suspended\") {\n await this.audioContext?.suspend();\n this.onStateChanged(false);\n }\n this.log(\"Stream stopped...\");\n this.isStreaming = false;\n this.closeSocketWithoutEOS = !shouldSendEOS;\n // message sent to worklet-thread\n this.processorNode?.port?.postMessage(STOP_MSG);\n this.audioStream\n ?.getAudioTracks()[0]\n .removeEventListener(\"ended\", () => {});\n }\n\n cleanup() {\n // Uncomment to stop recorded audio\n // this.source.stop();\n // Uncomment to stop microphone audio\n this.source.mediaStream.getAudioTracks()[0].stop();\n this.source.disconnect();\n this.processorNode.disconnect();\n this.processorNode.port.close();\n this.audioContext.close();\n this.audioData = [];\n }\n\n saveAudio() {\n const wavView = this.encodeWAV();\n const url = URL.createObjectURL(new Blob([wavView], { type: \"audio/wav\" }));\n this.log(`Download Recording: ${url}`);\n }\n\n /**\n * Returns a Blob object containing the audio data in WAV format.\n * @returns {Blob} - Blob object containing the audio data in WAV format.\n */\n getBlob() {\n const wavView = this.encodeWAV();\n console.log(wavView);\n const audioBlob = new Blob([wavView], { type: \"audio/wav\" });\n console.log(audioBlob);\n return audioBlob;\n }\n\n // 16-bit PCM mono audio @ 16kHz\n encodeWAV() {\n // DataView to hold audio data, 2 bytes per int16\n const view = new DataView(new ArrayBuffer(this.audioData.length * 2));\n this.audioData.forEach((value, index) => {\n view.setInt16(index * 2, value, true);\n });\n\n const dataLength = view.buffer.byteLength;\n const fileSize = 44 + dataLength;\n const wavView = new DataView(new ArrayBuffer(fileSize));\n\n // WAV header\n wavView.setUint32(0, 0x52494646, false); // \"RIFF\" in ASCII\n wavView.setUint32(4, fileSize - 8, true);\n wavView.setUint32(8, 0x57415645, false); // \"WAVE\" in ASCII\n wavView.setUint32(12, 0x666d7420, false); // \"fmt \" in ASCII\n wavView.setUint32(16, 16, true); // Size of the \"fmt\" chunk\n wavView.setUint16(20, 1, true); // Audio format (PCM)\n wavView.setUint16(22, CHANNEL_COUNT, true);\n wavView.setUint32(24, SAMPLE_RATE, true);\n wavView.setUint32(\n 28,\n SAMPLE_RATE * CHANNEL_COUNT * (BITS_PER_SAMPLE / 8),\n true\n ); // Byte rate\n wavView.setUint16(32, CHANNEL_COUNT * (BITS_PER_SAMPLE / 8), true);\n wavView.setUint16(34, BITS_PER_SAMPLE, true);\n wavView.setUint32(36, 0x64617461, false); // \"data\" in ASCII\n wavView.setUint32(40, dataLength, true);\n\n // Write the audio data to the WAV file\n for (let i = 0; i < dataLength; i++) {\n wavView.setInt8(44 + i, view.getInt8(i));\n }\n\n return wavView;\n }\n\n log(event) {\n if (this.enableLogs) {\n const data = `${new Date().toLocaleTimeString()} Augnito: ${event}`;\n console.log(data + \"\\n\");\n }\n }\n}\n","import { Streamer } from \"./streamer.js\";\n\nexport class AugnitoRecorder {\n constructor(\n config = {\n serverURL: \"\",\n enableLogs: false,\n isDebug: false,\n bufferInterval: 1,\n pausedBufferInterval: 1,\n EOS_Message: undefined,\n socketTimeoutInterval: undefined,\n shouldSendAudioDataSequence: false,\n shouldPreIntialiseRecorder: false,\n shouldReadIntensity: false,\n debounceDelay: 300,\n switchToRegularSpeechProfile: false,\n },\n heavyOp\n ) {\n if (AugnitoRecorder.instance) {\n return AugnitoRecorder.instance;\n }\n this.WebsocketURL = config.serverURL ?? \"\";\n this.enableLogs = config.enableLogs;\n this.isDebug = config.isDebug;\n this.streamer = null;\n this.streamerNotStarted = false;\n this.isStreamerStarting = false;\n this.heavyOp = heavyOp;\n this.bufferInterval = config.bufferInterval;\n this.pausedBufferInterval = config.pausedBufferInterval;\n this.eosMessage = config.EOS_Message;\n this.socketTimeoutInterval = config.socketTimeoutInterval;\n this.shouldSendAudioDataSequence = config.shouldSendAudioDataSequence;\n this.shouldPreIntialiseRecorder = config.shouldPreIntialiseRecorder;\n this.switchToRegularSpeechProfile =\n config.switchToRegularSpeechProfile ?? false;\n if (this.shouldPreIntialiseRecorder) {\n this.initialiseStreamer();\n this.streamerNotStarted = true;\n }\n this.shouldReadIntensity = config.shouldReadIntensity;\n this.delay = config.debounceDelay ?? 300;\n this.toggleStartStopAudioStream = debounce(\n this.toggleStartStopAudioStream.bind(this),\n this.delay\n );\n this.togglePauseResumeAudioStream = debounce(\n this.togglePauseResumeAudioStream.bind(this),\n this.delay\n );\n AugnitoRecorder.instance = this;\n }\n\n initialiseStreamer() {\n this.streamer = new Streamer(\n this.enableLogs,\n this.isDebug,\n this.bufferInterval,\n this.pausedBufferInterval,\n this.eosMessage,\n this.socketTimeoutInterval,\n this.shouldSendAudioDataSequence,\n this.shouldPreIntialiseRecorder,\n this.shouldReadIntensity,\n this.switchToRegularSpeechProfile,\n this.heavyOp,\n this.onFinalResultCallback.bind(this),\n this.onPartialResultCallback.bind(this),\n this.onErrorCallback.bind(this),\n this.onStateChangedCallback.bind(this),\n this.onSessionEventCallback.bind(this),\n this.onOtherResultCallback.bind(this),\n this.onSpeechResponseCallback.bind(this),\n this.onIntensityCallback.bind(this)\n );\n }\n\n togglePauseResumeAudioStream(audioDuration = 0, socketUrl = undefined) {\n if (!this.streamer || this.streamerNotStarted) {\n if (socketUrl) {\n this.WebsocketURL = socketUrl;\n }\n this.startAudio(audioDuration);\n } else {\n if (this.streamer.IsPaused) {\n this.resumeAudio();\n } else {\n this.pauseAudio();\n }\n }\n }\n\n toggleStartStopAudioStream(audioDuration = 0, socketUrl = undefined) {\n if (!this.streamer || this.streamerNotStarted) {\n if (socketUrl) {\n this.WebsocketURL = socketUrl;\n }\n this.startAudio(audioDuration);\n } else {\n this.stopAudio();\n }\n }\n\n async startAudio(duration) {\n if (this.isStreamerStarting) return; // Prevent concurrent starts\n\n this.isStreamerStarting = true;\n if (!this.shouldPreIntialiseRecorder || !this.streamer) {\n this.initialiseStreamer();\n }\n try {\n var res = await this.streamer.StartStream(duration, this.WebsocketURL);\n if (!res) {\n this.streamer = null;\n } else {\n this.streamerNotStarted = false;\n\n this.log(\"Stream Started...\");\n }\n } finally {\n this.isStreamerStarting = false;\n }\n }\n\n pauseAudio() {\n this.streamer.PauseStream();\n this.log(\"Stream Paused...\");\n }\n\n resumeAudio() {\n this.streamer.ResumeStream();\n if (this.enableLogs) this.log(\"Stream Resumed...\");\n }\n\n /*\n * param forceStopForPausedState set to true for Ambient to send EOS in paused state\n */\n stopAudio(shouldSendEOS = true, forceStopForPausedState = false) {\n if (this.streamer?.IsStreaming || forceStopForPausedState) {\n this.streamer?.StopStream(shouldSendEOS);\n this.streamer = null;\n this.log(\"Stream Stopped...\");\n if (this.shouldPreIntialiseRecorder) {\n this.initialiseStreamer();\n this.streamerNotStarted = true;\n }\n }\n }\n\n getBlob() {\n const audioBlob = this.streamer.getBlob();\n this.log(\"Blob Sent...\");\n return audioBlob;\n }\n\n log(event) {\n if (this.enableLogs) {\n const data = `${new Date().toLocaleTimeString()} Augnito: ${event}`;\n this.showLogCallback(data + \"\\n\");\n }\n }\n\n dispose() {\n AugnitoRecorder.instance = null;\n }\n\n // #endregion\n // #region client callbacks\n onSessionEventCallback(data) {\n if (this.onSessionEvent) {\n this.onSessionEvent(data);\n }\n }\n onStateChangedCallback(isRecording) {\n if (this.onStateChanged) {\n this.onStateChanged(isRecording);\n }\n }\n onIntensityCallback(intensity) {\n if (this.onIntensity) {\n this.onIntensity(intensity);\n }\n }\n onErrorCallback(errorMessage) {\n if (this.onError) {\n this.onError(errorMessage);\n }\n }\n onPartialResultCallback(hype) {\n if (this.onPartialResult) {\n this.onPartialResult(hype);\n }\n }\n onFinalResultCallback(recipe) {\n if (this.onFinalResult) {\n this.onFinalResult(recipe);\n }\n }\n onOtherResultCallback(message) {\n if (this.onOtherResults) {\n this.onOtherResults(message);\n }\n }\n onSpeechResponseCallback(message) {\n if (this.onSpeechResponse) {\n this.onSpeechResponse(message);\n }\n }\n showLogCallback(event) {\n if (this.showLog) {\n this.showLog(event);\n }\n }\n}\n\nfunction debounce(fn, delay) {\n let timeoutId;\n return function (...args) {\n if (timeoutId) clearTimeout(timeoutId);\n timeoutId = setTimeout(() => fn.apply(this, args), delay);\n };\n}\n"],"names":["LOOP_AUDIO","WORKLET_PROCESSOR","SAMPLE_RATE","EOS_MSG","DONE_MSG","PAUSE_MSG","PAUSE_SOCKET_MSG","RESUME_SOCKET_MSG","STOP_MSG","CLOSE_MSG","CHANNEL_COUNT","BITS_PER_SAMPLE","NOISE_SUPPRESS_ENABLED","KEEP_ALIVE_TIMEOUT","IDLE_THREAD_INTERVAL","CONSUME_INTERVAL","CONNECT_RETRY_TIMEOUT","HEALTHCHECK_INTERVAL","SOCKET_TIMEOUT","MAX_AUDIO_SAMPLES","Executor","enableLogs","eosMessage","socketTimeoutInterval","shouldSendAudioDataSequence","onFinalResult","onPartialResult","onError","onSessionEvent","onOtherResults","onSpeechResponse","bufferSizeInterval","switchToRegularSpeechProfile","_classCallCheck","worker","onFinalResultCallback","onErrorCallback","onPartialResultCallback","onSessionEventCallback","onOtherResultsCallback","onSpeechResponseCallback","packetSeqId","audioDuration","heavyOp","idleLoop","lastSent","switchToRegularSpeech","_createClass","key","value","Start","duration","wsUrl","_this","workerScript","concat","WorkerBlob","toString","JSON","stringify","Worker","URL","createObjectURL","Blob","type","onmessage","event","console","log","data","eventData","setInterval","currentTime","Date","Send","warn","createAudioPacketHeader","isLastPacket","Math","ceil","headerSize","buffer","ArrayBuffer","view","DataView","i","setUint8","charCodeAt","setBigInt64","BigInt","appendAudioData","arrayBuffer","audioDataBytes","totalLength","byteLength","combinedBuffer","combinedArray","Uint8Array","set","_this$worker","postMessage","clearInterval","_this$worker2","binaryHeader","_this$worker3","_this$worker4","_this$worker5","_this$worker6","audioData","undefined","_this$worker7","doneMessage","closeMessage","connectionRetryTimeout","healthcheckInterval","consumeInterval","pauseSocketMessage","resumeSocketMessage","lastConnect","lastDataSent","lastDataReceived","lastPingReceived","queue","pauseStateAudio","sentPacketsQueue","ws","isDone","consumer","healthCheck","retrySentPacket","packetId","shouldNotReconnect","JobID","shouldPauseSocket","initConnect","WebSocket","onopen","length","message","operate","onerror","error","self","onclose","cleanup","send","readyState","OPEN","add","push","parse","Type","metaResponse","Event","Result","Final","outputText","Transcript","filter","x","packetNumber","Index","Data","e","close","retryPacket","packetData","res","shift","isSent","unshift","Number","getBigInt64","sentPacket","isSocketClosingTime","worklet","Streamer","isDebug","pausedBufferInterval","shouldPreIntialiseRecorder","shouldReadIntensity","onStateChanged","onIntensity","audioContext","audioStream","executor","HeavyOp","source","processorNode","isPaused","isStreaming","closeSocketWithoutEOS","EarlyInitialiseMediaStream","_EarlyInitialiseMediaStream","_asyncToGenerator","_regeneratorRuntime","mark","_callee","wrap","_callee$","_context","prev","next","createMediaStreamSourceNode","state","suspend","stop","apply","arguments","_StartStream","_callee2","_callee2$","_context2","abrupt","resume","createProcessorNode","IsMicrophoneMuted","connect","destination","sampleRate","StartStream","_x","_x2","_createBufferedSourceNode","_callee3","audioBuffer","_callee3$","_context3","loadAudio","sent","createBufferSource","loop","start","createBufferedSourceNode","_createMediaStreamSourceNode","_callee4","errMessage","_callee4$","_context4","navigator","mediaDevices","getUserMedia","audio","channelCount","noiseSuppression","AudioContext","createMediaStreamSource","getAudioTracks","addEventListener","t0","name","_loadAudio","_callee5","response","_callee5$","_context5","fetch","decodeAudioData","_createProcessorNode","_callee6","_this2","_this$shouldReadInten","sampleRateParam","bufferSizeIntervalParam","pausedBufferIntervalParam","shouldReadIntensityParam","_callee6$","_context6","audioWorklet","addModule","encodeURIComponent","AudioWorkletNode","parameters","get","setValueAtTime","port","_event$data","saveAudio","_this2$onIntensity","call","Int16Array","forEach","element","_PauseStream","_callee7","_callee7$","_context7","PauseStream","_ResumeStream","_callee8","_callee8$","_context8","ResumeStream","muted","_StopStream","_callee9","shouldSendEOS","_this$audioContext","_this$processorNode","_this$audioStream","_this$audioContext2","_callee9$","_context9","removeEventListener","StopStream","_x3","mediaStream","disconnect","wavView","encodeWAV","url","getBlob","audioBlob","index","setInt16","dataLength","fileSize","setUint32","setUint16","setInt8","getInt8","toLocaleTimeString","AugnitoRecorder","_config$serverURL","_config$switchToRegul","_config$debounceDelay","config","serverURL","bufferInterval","EOS_Message","debounceDelay","instance","WebsocketURL","streamer","streamerNotStarted","isStreamerStarting","initialiseStreamer","delay","toggleStartStopAudioStream","debounce","bind","togglePauseResumeAudioStream","onStateChangedCallback","onOtherResultCallback","onIntensityCallback","socketUrl","startAudio","IsPaused","resumeAudio","pauseAudio","stopAudio","_startAudio","finish","_this$streamer","forceStopForPausedState","IsStreaming","_this$streamer2","showLogCallback","dispose","isRecording","intensity","errorMessage","hype","recipe","showLog","fn","timeoutId","_len","args","Array","_key","clearTimeout","setTimeout"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"augnitoRecorder.js","sources":["../lib/constants.js","../lib/executor.js","../lib/worklet.js","../lib/streamer.js","../lib/networkMonitor.js","../lib/augnitoRecorder.js"],"sourcesContent":["export const LOOP_AUDIO = true;\nexport const WORKLET_PROCESSOR = \"worklet-processor\";\nexport const SAMPLE_RATE = 16000;\nconst FRAMES_PER_BLOCK = 128;\n// buffer_size = 1 sec audio = 125 blocks = 16000 frames = 16000 mono samples\nexport const BUFFER_SIZE = 125 * FRAMES_PER_BLOCK;\nexport const SILENCE_IN_SECS = 2;\n\nexport const EOS_MSG = \"EOS\";\nexport const DONE_MSG = \"DONE\";\nexport const PAUSE_MSG = \"PAUSE\";\nexport const PAUSE_SOCKET_MSG = \"PAUSESOCKET\";\nexport const RESUME_SOCKET_MSG = \"RESUMESOCKET\";\nexport const STOP_MSG = \"STOP\";\nexport const CLOSE_MSG = \"CLOSE\";\nexport const CHANNEL_COUNT = 1;\nexport const BITS_PER_SAMPLE = 16;\nexport const NOISE_SUPPRESS_ENABLED = false;\n\nexport const KEEP_ALIVE_TIMEOUT = 120000;\nexport const IDLE_THREAD_INTERVAL = 10000;\nexport const CONSUME_INTERVAL = 100;\nexport const CONNECT_RETRY_TIMEOUT = 10000;\nexport const HEALTHCHECK_INTERVAL = 1000;\nexport const SOCKET_TIMEOUT = 10000;\nexport const MAX_AUDIO_SAMPLES = 16000 * 60 * 30;\n","import {\n KEEP_ALIVE_TIMEOUT,\n IDLE_THREAD_INTERVAL,\n EOS_MSG,\n CONNECT_RETRY_TIMEOUT,\n SOCKET_TIMEOUT,\n HEALTHCHECK_INTERVAL,\n CONSUME_INTERVAL,\n DONE_MSG,\n CLOSE_MSG,\n PAUSE_SOCKET_MSG,\n RESUME_SOCKET_MSG,\n} from \"./constants.js\";\n\nexport class Executor {\n constructor(\n enableLogs,\n eosMessage,\n socketTimeoutInterval,\n shouldSendAudioDataSequence,\n onFinalResult,\n onPartialResult,\n onError,\n onSessionEvent,\n onOtherResults,\n onSpeechResponse,\n bufferSizeInterval,\n switchToRegularSpeechProfile\n ) {\n this.worker;\n this.onFinalResultCallback = onFinalResult;\n this.onErrorCallback = onError;\n this.onPartialResultCallback = onPartialResult;\n this.onSessionEventCallback = onSessionEvent;\n this.onOtherResultsCallback = onOtherResults;\n this.onSpeechResponseCallback = onSpeechResponse;\n this.packetSeqId = 0;\n this.audioDuration = 0;\n this.shouldSendAudioDataSequence = shouldSendAudioDataSequence;\n this.heavyOp;\n this.idleLoop;\n this.lastSent;\n this.enableLogs = enableLogs;\n this.eosMessage = eosMessage ? eosMessage : EOS_MSG;\n this.socketTimeoutInterval = socketTimeoutInterval\n ? socketTimeoutInterval\n : SOCKET_TIMEOUT;\n this.bufferSizeInterval = bufferSizeInterval;\n this.switchToRegularSpeech = switchToRegularSpeechProfile;\n }\n\n // main-thread\n Start(duration, wsUrl) {\n this.audioDuration = duration;\n const workerScript = `\n (() => {\n (${WorkerBlob.toString()})(${JSON.stringify(DONE_MSG)}, ${JSON.stringify(\n this.eosMessage\n )}, ${JSON.stringify(CLOSE_MSG)}, ${JSON.stringify(\n CONNECT_RETRY_TIMEOUT\n )}, ${JSON.stringify(this.socketTimeoutInterval)}, ${JSON.stringify(\n HEALTHCHECK_INTERVAL\n )}, ${JSON.stringify(CONSUME_INTERVAL)}, ${JSON.stringify(\n wsUrl\n )}, ${JSON.stringify(this.enableLogs)}, ${JSON.stringify(\n this.shouldSendAudioDataSequence\n )},${JSON.stringify(PAUSE_SOCKET_MSG)}, ${JSON.stringify(\n RESUME_SOCKET_MSG\n )}, ${JSON.stringify(this.switchToRegularSpeech)}, ${JSON.stringify(\n this.heavyOp\n )});\n })();\n`;\n this.worker = new Worker(\n URL.createObjectURL(\n new Blob([workerScript], {\n type: \"application/javascript\",\n })\n )\n );\n // message received from web-worker\n this.worker.onmessage = (event) => {\n if (this.enableLogs) {\n console.log(\"Augnito [MAIN]: \" + JSON.stringify(event.data));\n }\n var eventData = event.data;\n // const asrText = document.getElementById(\"asrText\");\n if (eventData.type == \"final\") this.onFinalResultCallback(eventData.data);\n else if (eventData.type == \"partial\")\n this.onPartialResultCallback(eventData.data);\n else if (eventData.type == \"meta\")\n this.onSessionEventCallback(eventData.data);\n else if (eventData.type == \"error\") this.onErrorCallback(eventData.data);\n else if (eventData.type == \"other\")\n this.onOtherResultsCallback(eventData.data);\n else if (eventData.type == \"speechResponse\")\n this.onSpeechResponseCallback(eventData.data);\n };\n // main-thread\n this.idleLoop = setInterval(() => {\n const currentTime = +new Date();\n if (this.lastSent && currentTime - this.lastSent > KEEP_ALIVE_TIMEOUT) {\n this.Send(this.eosMessage);\n if (this.enableLogs) {\n console.warn(\n `No data sent since more than ${\n KEEP_ALIVE_TIMEOUT / 1000\n } secs, closing time...`\n );\n }\n }\n }, IDLE_THREAD_INTERVAL);\n }\n\n createAudioPacketHeader(isLastPacket) {\n if (this.audioDuration > 0) {\n this.packetSeqId =\n Math.ceil(this.audioDuration / this.bufferSizeInterval) + 2;\n this.audioDuration = 0;\n }\n this.packetSeqId++;\n const headerSize = 16;\n\n // Create a buffer of the required size\n const buffer = new ArrayBuffer(headerSize);\n\n const view = new DataView(buffer);\n\n // Write '@BSR' as string\n for (let i = 0; i < 4; i++) {\n view.setUint8(i, \"@BSR\".charCodeAt(i));\n }\n\n // Write packet ID (int64)\n view.setBigInt64(4, BigInt(this.packetSeqId), false); // false for big endian\n\n // Write boolean value\n view.setUint8(12, isLastPacket ? 1 : 0);\n return buffer;\n }\n\n appendAudioData(arrayBuffer, audioDataBytes) {\n const totalLength = arrayBuffer.byteLength + audioDataBytes.byteLength;\n const combinedBuffer = new ArrayBuffer(totalLength);\n const combinedArray = new Uint8Array(combinedBuffer);\n combinedArray.set(new Uint8Array(arrayBuffer), 0);\n combinedArray.set(new Uint8Array(audioDataBytes), arrayBuffer.byteLength);\n return combinedBuffer;\n }\n\n // main-thread\n Send(data) {\n this.lastSent = +new Date();\n if (data === CLOSE_MSG) {\n this.worker?.postMessage(CLOSE_MSG);\n clearInterval(this.idleLoop);\n } else if (data === DONE_MSG) {\n // message sent to web-worker\n if (this.shouldSendAudioDataSequence) {\n var binaryHeader = this.createAudioPacketHeader(true);\n this.worker?.postMessage(binaryHeader);\n } else {\n this.worker?.postMessage(DONE_MSG);\n }\n clearInterval(this.idleLoop);\n } else if (data == PAUSE_SOCKET_MSG) {\n this.worker?.postMessage(PAUSE_SOCKET_MSG);\n } else if (data == RESUME_SOCKET_MSG) {\n this.worker?.postMessage(RESUME_SOCKET_MSG);\n } else if (data === this.eosMessage) {\n if (!this.shouldSendAudioDataSequence) this.worker?.postMessage(data);\n } else {\n var audioData = [];\n if (this.shouldSendAudioDataSequence) {\n var binaryHeader = this.createAudioPacketHeader(false);\n audioData = this.appendAudioData(binaryHeader, data);\n } else {\n audioData = data;\n }\n if (audioData !== undefined) {\n // message sent to web-worker - transferrable\n this.worker?.postMessage(audioData, [audioData]);\n }\n }\n }\n\n set HeavyOp(heavyOp) {\n this.heavyOp = heavyOp;\n }\n}\n\nfunction WorkerBlob(\n doneMessage,\n eosMessage,\n closeMessage,\n connectionRetryTimeout,\n socketTimeoutInterval,\n healthcheckInterval,\n consumeInterval,\n wsUrl,\n enableLogs,\n shouldSendAudioDataSequence,\n pauseSocketMessage,\n resumeSocketMessage,\n switchToRegularSpeechProfile,\n heavyOp\n) {\n let lastConnect;\n var lastDataSent;\n var lastDataReceived;\n let lastPingReceived;\n let queue = [];\n let pauseStateAudio;\n let sentPacketsQueue = [];\n let ws;\n let isDone = false;\n let consumer;\n let healthCheck;\n let retrySentPacket = false;\n let packetId = 0;\n let shouldNotReconnect = false;\n let JobID = \"\";\n let shouldPauseSocket = false;\n\n function initConnect() {\n lastConnect = +new Date();\n if (JobID != \"\") {\n ws = new WebSocket(wsUrl + \"&jobid=\" + JobID);\n } else {\n ws = new WebSocket(wsUrl);\n }\n ws.onopen = (event) => {\n if (enableLogs) {\n console.log(\n \"Augnito: WebSocket connection established - \" + JSON.stringify(event)\n );\n }\n if (sentPacketsQueue.length > 0) {\n retrySentPacket = true;\n }\n };\n ws.onmessage = (message) => {\n if (enableLogs) {\n console.log(\n \"Augnito: Message from server - \" + JSON.stringify(message.data)\n );\n }\n lastDataReceived = +new Date();\n operate(message);\n };\n ws.onerror = (error) => {\n console.error(\"WebSocket error: \", error);\n self.postMessage({\n type: \"error\",\n data: JSON.stringify(error),\n });\n // TODO may want to reinitialise\n };\n ws.onclose = (event) => {\n if (enableLogs) {\n console.log(\n \"Augnito: WebSocket connection closed - \" + JSON.stringify(event)\n );\n }\n cleanup();\n };\n lastDataSent = +new Date();\n lastDataReceived = lastDataSent;\n lastPingReceived = +new Date();\n }\n\n // TODO lose the interval and try reading from queue on-add and on-open.\n\n function send(data) {\n if (ws && ws.readyState === WebSocket.OPEN) {\n ws.send(data);\n // This needs to be done to keep the \"lastDataReceived\" value closer to the\n // first \"lastDataSent\" value after ASR is received from the server, so as to\n // not invoke the healthcheck loop and force close the connection.\n var currentTime = +new Date();\n if (lastDataSent <= lastDataReceived) {\n lastDataReceived = currentTime - 1;\n }\n lastDataSent = currentTime;\n return true;\n } else {\n if (data === eosMessage) {\n if (enableLogs) {\n console.warn(\n `Gulping ${eosMessage} as socket seems already closed...`\n );\n }\n cleanup();\n return true;\n }\n if (\n +new Date() - lastConnect > connectionRetryTimeout &&\n !shouldNotReconnect\n ) {\n initConnect();\n }\n return false;\n }\n }\n\n function add(data) {\n queue.push(data);\n }\n\n function operate(message) {\n try {\n if (message.data === \"PING\") {\n lastPingReceived = +new Date();\n self.postMessage({ type: \"ping\", data: message.data });\n } else {\n const data = JSON.parse(message.data);\n if (enableLogs) {\n console.log(\"Augnito [WORKER]: \" + JSON.stringify(data));\n }\n if (data.Type == \"meta\") {\n if (data.JobID) {\n JobID = data.JobID;\n console.log(\"Augnito JobID:\", JobID);\n }\n self.postMessage({ type: \"meta\", data: message.data });\n var metaResponse = JSON.parse(message.data);\n if (\n metaResponse.Event &&\n metaResponse.Event[\"Type\"] === \"INVALID_AUTH_CREDENTIALS\"\n ) {\n shouldNotReconnect = true;\n } else {\n shouldNotReconnect = false;\n }\n } else if (data.Result && data.Result.Final) {\n // should not be called with \"this\", check worker construction for more info.\n var outputText = JSON.stringify(data.Result);\n\n if (heavyOp) {\n outputText = heavyOp(JSON.stringify(data.Result));\n console.log(outputText);\n }\n self.postMessage({ type: \"final\", data: outputText });\n\n // message sent to main-thread\n } else if (data.Result && !data.Result.Final) {\n self.postMessage({\n type: \"partial\",\n data: data.Result.Transcript,\n });\n } else if (data.Type == \"ACK\") {\n //reset queue with only those packets whose seq num is greater than ACK index\n sentPacketsQueue = sentPacketsQueue.filter(\n (x) => x.packetNumber > data.Index\n );\n self.postMessage({ type: \"other\", data: message.data });\n } else if (data.Type == \"ERROR\") {\n if (data.Data == \"Timeout exceeded\") {\n isDone = true;\n cleanup();\n }\n self.postMessage({\n type: \"error\",\n data: message.data,\n });\n } else {\n self.postMessage({\n type: \"speechResponse\",\n data: message.data,\n });\n }\n }\n } catch (e) {\n self.postMessage({\n type: \"error\",\n data: \"invalid response\",\n });\n }\n }\n\n function cleanup() {\n if (isDone) {\n clearInterval(consumer);\n clearInterval(healthCheck);\n queue = [];\n sentPacketsQueue = [];\n self.close();\n }\n }\n\n initConnect();\n consumer = setInterval(() => {\n if (retrySentPacket) {\n for (var i = 0; i < sentPacketsQueue.length; i++) {\n const retryPacket = sentPacketsQueue[i].packetData;\n const res = send(retryPacket);\n if (!res) break;\n }\n retrySentPacket = false;\n } else {\n while (queue.length > 0) {\n const data = queue.shift();\n const isSent = send(data);\n if (!isSent) {\n queue.unshift(data);\n break;\n }\n if (shouldSendAudioDataSequence) {\n const view = new DataView(data);\n packetId = Number(view.getBigInt64(4));\n var sentPacket = { packetNumber: packetId, packetData: data };\n sentPacketsQueue.push(sentPacket);\n }\n }\n }\n }, consumeInterval);\n\n healthCheck = setInterval(() => {\n if (ws && ws.readyState === WebSocket.OPEN) {\n const currentTime = +new Date();\n const isSocketClosingTime = switchToRegularSpeechProfile\n ? lastDataSent > lastDataReceived &&\n currentTime - lastDataReceived > socketTimeoutInterval\n : currentTime - lastPingReceived > socketTimeoutInterval;\n if (isSocketClosingTime) {\n if (enableLogs) {\n console.error(\n `No data received since more than ${\n socketTimeoutInterval / 1000\n } secs, closing time...`\n );\n }\n ws.close();\n }\n }\n }, healthcheckInterval);\n\n self.onmessage = (event) => {\n if (event.data === closeMessage) {\n JobID = \"\";\n isDone = true;\n shouldNotReconnect = true;\n ws.close();\n } else if (event.data === doneMessage) {\n add(eosMessage);\n JobID = \"\";\n if (enableLogs) {\n console.log(\"Augnito: Worker received DONE, time to terminate...\");\n }\n isDone = true;\n } else if (event.data === pauseSocketMessage) {\n shouldPauseSocket = true;\n } else if (event.data === resumeSocketMessage) {\n add(pauseStateAudio);\n shouldPauseSocket = false;\n pauseStateAudio = [];\n } else {\n if (shouldPauseSocket) {\n pauseStateAudio = event.data;\n } else add(event.data);\n }\n };\n}\n","// worklet-thread\nexport const worklet = `class MyAudioWorkletProcessor extends AudioWorkletProcessor {\n constructor() {\n super();\n this.accumulator = [];\n this.pauseSocketStreaming = false;\n this.sampleVal = 0;\n this.sampleSize = 0;\n this.intensityFrameCount = 0;\n this.reset();\n this.isProcessing = true;\n // message received from main-thread\n this.port.onmessage = (e) => {\n console.log(\"Augnito: Worklet received event - \", e.data);\n if (this.sampleSize > 0) {\n this.accumulator.push(this.sampleVal / this.sampleSize);\n }\n \n if (e.data == \"PAUSE\" || e.data == \"STOP\" || e.data == \"PAUSESOCKET\") {\n // append silence to get last word ASR.\n const silenceSize = 16000 * 2;\n for (let i = 0; i < silenceSize; i++) {\n this.accumulator.push(0);\n }\n }\n this.send();\n this.reset();\n if (e.data == \"STOP\") {\n // message sent to main-thread\n this.port.postMessage({type:\"DONE\", value:\"DONE\"});\n this.isProcessing = false;\n \n }\n if(e.data == \"PAUSESOCKET\"){\n this.pauseSocketStreaming = true;\n this.port.postMessage(\"PAUSESOCKET\");\n } else if(e.data == \"RESUMESOCKET\"){\n this.pauseSocketStreaming = false;\n } \n };\n }\n\n static get parameterDescriptors() {\n return [\n {\n name: \"sampleRate\",\n defaultValue: 16000,\n minValue: 16000,\n maxValue: 6 * 16000,\n },\n {\n name: \"bufferSizeInterval\",\n defaultValue: 1,\n minValue: 1,\n maxValue: 100,\n },\n {\n name: \"pausedBufferInterval\",\n defaultValue: 1,\n minValue: 0,\n maxValue: 100,\n },\n {\n name: \"shouldReadIntensity\",\n defaultValue: false,\n minValue: 0,\n maxValue: 1,\n },\n ];\n }\n\n // 128 frames\n process(inputList, outputList, params) {\n const input = inputList[0];\n if (input && input.length && input[0].length) {\n const channelData = input[0];\n const output = outputList[0];\n const inputSampleRate = params.sampleRate[0];\n const sampleRatio = inputSampleRate / 16000\n const bufferSizeInterval = params[\"bufferSizeInterval\"][0];\n const pausedBufferInterval = params[\"pausedBufferInterval\"][0];\n const shouldReadIntensity = params[\"shouldReadIntensity\"][0];\n\n let sumSquares = 0; // For intensity\n let sampleCount = 0;\n\n // console.log(\"BufferSizeInterval\", bufferSizeInterval);\n // Jackpot\n input[0].forEach((float32Element, index) => {\n const int16Element = Math.min(1, Math.max(-1, float32Element)) * 0x7fff;\n this.sampleVal += int16Element;\n this.sampleSize += 1;\n // Accumulate for intensity (RMS)\n sumSquares += float32Element * float32Element;\n sampleCount++;\n \n\n if (this.sampleSize >= sampleRatio) {\n const fraction = this.sampleSize - sampleRatio \n this.sampleVal -= fraction * int16Element;\n\n this.accumulator.push(this.sampleVal / sampleRatio);\n \n this.sampleVal = fraction * int16Element;\n this.sampleSize = fraction;\n }\n\n // Comment this when streaming microphone audio\n // output[0][index] = float32Element;\n });\n if(this.pauseSocketStreaming){\n if (this.accumulator.length >= 125 * 128 * pausedBufferInterval) {\n this.send();\n }\n } else{\n if (this.accumulator.length >= 125 * 128 * bufferSizeInterval) {\n this.send();\n }\n }\n if(shouldReadIntensity){\n \n // Throttled intensity post\n this.intensityFrameCount = (this.intensityFrameCount || 0) + 1;\n if (this.intensityFrameCount >= 15 && sampleCount > 0) {\n const rms = Math.sqrt(sumSquares / sampleCount);\n const normalized = Math.min(1, rms); // [0–1] scale\n this.port.postMessage({ type: 'intensity', value: normalized });\n this.intensityFrameCount = 0;\n }\n }\n }\n return this.isProcessing;\n }\n\n send() {\n if (this.accumulator.length == 0) return;\n const audioData = new Int16Array(this.accumulator);\n // message sent to main-thread - transferrable\n this.port.postMessage({ type: 'audioData', value: audioData.buffer }, [audioData.buffer]);\n this.accumulator = [];\n }\n\n reset() {\n this.sampleVal = 0;\n this.sampleSize = 0;\n }\n}\n\nregisterProcessor(\"worklet-processor\", MyAudioWorkletProcessor);`;\n","import {\n LOOP_AUDIO,\n PAUSE_MSG,\n STOP_MSG,\n DONE_MSG,\n WORKLET_PROCESSOR,\n CHANNEL_COUNT,\n BITS_PER_SAMPLE,\n NOISE_SUPPRESS_ENABLED,\n SAMPLE_RATE,\n CLOSE_MSG,\n PAUSE_SOCKET_MSG,\n RESUME_SOCKET_MSG,\n MAX_AUDIO_SAMPLES,\n} from \"./constants.js\";\nimport { Executor } from \"./executor.js\";\nimport { worklet } from \"./worklet.js\";\n\n// main-thread\nexport class Streamer {\n constructor(\n enableLogs,\n isDebug,\n bufferSizeInterval,\n pausedBufferInterval,\n eosMessage,\n socketTimeoutInterval,\n shouldSendAudioDataSequence,\n shouldPreIntialiseRecorder,\n shouldReadIntensity,\n switchToRegularSpeechProfile,\n heavyOp,\n onFinalResult,\n onPartialResult,\n onError,\n onStateChanged,\n onSessionEvent,\n onOtherResults,\n onSpeechResponse,\n onIntensity\n ) {\n this.audioContext;\n this.audioStream;\n this.executor = new Executor(\n enableLogs,\n eosMessage,\n socketTimeoutInterval,\n shouldSendAudioDataSequence,\n onFinalResult,\n onPartialResult,\n onError,\n onSessionEvent,\n onOtherResults,\n onSpeechResponse,\n bufferSizeInterval,\n switchToRegularSpeechProfile\n );\n this.executor.HeavyOp = heavyOp;\n\n this.source;\n this.processorNode;\n this.isPaused = false;\n this.isStreaming = false;\n // Uncomment to save recording\n this.audioData = [];\n this.isDebug = isDebug;\n this.enableLogs = enableLogs;\n this.onStateChanged = onStateChanged;\n this.onIntensity = onIntensity;\n this.onError = onError;\n this.bufferSizeInterval = bufferSizeInterval;\n this.pausedBufferInterval = pausedBufferInterval ?? 1;\n this.shouldReadIntensity = shouldReadIntensity;\n this.closeSocketWithoutEOS = false;\n this.shouldPreIntialiseRecorder = shouldPreIntialiseRecorder ?? false;\n if (this.shouldPreIntialiseRecorder) {\n this.EarlyInitialiseMediaStream();\n }\n }\n\n async EarlyInitialiseMediaStream() {\n await this.createMediaStreamSourceNode();\n if (this.audioContext && this.audioContext.state == \"running\") {\n await this.audioContext.suspend();\n }\n }\n\n async StartStream(duration, wsUrl) {\n this.log(\"New stream started...\");\n\n // Uncomment to stream recorded audio\n // await this.createBufferedSourceNode();\n // Uncomment to stream microphone audio\n if (!this.shouldPreIntialiseRecorder || !this.source) {\n await this.createMediaStreamSourceNode();\n if (!this.source) {\n console.error(\"Error: unable to create source node\");\n return false;\n }\n } else if (this.audioContext.state == \"suspended\") {\n await this.audioContext.resume();\n }\n\n await this.createProcessorNode();\n if (!this.processorNode) {\n console.error(\"Error: unable to create processor node\");\n return false;\n }\n if (this.IsMicrophoneMuted) {\n if (this.audioContext && this.audioContext.state == \"running\") {\n await this.audioContext.suspend();\n }\n this.onError(\n JSON.stringify({\n Type: \"ERROR\",\n Data: \"Microphone is muted.\",\n })\n );\n return false;\n }\n if (wsUrl !== \"\") {\n this.executor.Start(duration, wsUrl);\n }\n this.onStateChanged(true);\n this.source\n .connect(this.processorNode)\n .connect(this.audioContext.destination);\n this.log(\"AudioContext Sample Rate: \" + this.audioContext.sampleRate);\n this.isStreaming = true;\n return true;\n }\n\n async createBufferedSourceNode() {\n const audioBuffer = await this.loadAudio();\n if (!audioBuffer) {\n console.error(\"Error: unable to create audio buffer\");\n return;\n }\n this.source = this.audioContext.createBufferSource();\n this.source.buffer = audioBuffer;\n this.source.loop = LOOP_AUDIO;\n this.source.start();\n }\n\n async createMediaStreamSourceNode() {\n try {\n this.audioStream = await navigator.mediaDevices.getUserMedia({\n audio: {\n channelCount: CHANNEL_COUNT,\n noiseSuppression: NOISE_SUPPRESS_ENABLED,\n // sampleRate: SAMPLE_RATE,\n // sampleSize: BITS_PER_SAMPLE,\n },\n });\n this.audioContext = new AudioContext();\n this.source = this.audioContext.createMediaStreamSource(this.audioStream);\n this.audioStream.getAudioTracks()[0].addEventListener(\"ended\", () => {\n this.onError(\n JSON.stringify({\n Type: \"ERROR\",\n Data: \"Audio track ended. Possibly the mic was unplugged.\",\n })\n );\n });\n } catch (e) {\n var errMessage = \"\";\n if (e.name == \"NotAllowedError\") {\n errMessage = \"Mic permission denied\";\n } else if (e.name === \"NotFoundError\") {\n errMessage = \"No suitable media device found\";\n }\n this.onError(\n JSON.stringify({\n Type: \"ERROR\",\n Data: errMessage,\n })\n );\n }\n }\n\n async loadAudio() {\n try {\n const response = await fetch(\"./radiology_speed_test.wav\");\n const arrayBuffer = await response.arrayBuffer();\n const audioBuffer = await this.audioContext.decodeAudioData(arrayBuffer);\n return audioBuffer;\n } catch (err) {\n console.error(`Unable to fetch the audio file. Error: ${err.message}`);\n return null;\n }\n }\n\n async createProcessorNode() {\n try {\n await this.audioContext.audioWorklet.addModule(\n `data:application/javascript,${encodeURIComponent(worklet)}`\n );\n this.processorNode = new AudioWorkletNode(\n this.audioContext,\n WORKLET_PROCESSOR\n );\n\n const sampleRateParam = this.processorNode.parameters.get(\"sampleRate\");\n sampleRateParam.setValueAtTime(\n this.audioContext.sampleRate,\n this.audioContext.currentTime\n );\n const bufferSizeIntervalParam =\n this.processorNode.parameters.get(\"bufferSizeInterval\");\n bufferSizeIntervalParam.setValueAtTime(\n this.bufferSizeInterval,\n this.audioContext.currentTime\n );\n\n const pausedBufferIntervalParam = this.processorNode.parameters.get(\n \"pausedBufferInterval\"\n );\n pausedBufferIntervalParam.setValueAtTime(\n this.pausedBufferInterval,\n this.audioContext.currentTime\n );\n const shouldReadIntensityParam = this.processorNode.parameters.get(\n \"shouldReadIntensity\"\n );\n shouldReadIntensityParam.setValueAtTime(\n this.shouldReadIntensity ?? false,\n this.audioContext.currentTime\n );\n // message received from worklet-thread\n this.processorNode.port.onmessage = (event) => {\n const { type, value } = event.data;\n if (type == DONE_MSG) {\n this.log(\"Worklet processing done, clearing resources...\");\n\n // Uncomment to save recording\n if (this.isDebug) this.saveAudio();\n this.cleanup();\n } else if (event.data == PAUSE_SOCKET_MSG) {\n this.executor.Send(PAUSE_SOCKET_MSG);\n }\n // Uncomment to save recording\n else {\n if (type === \"intensity\") {\n this.onIntensity?.(value);\n } else if (type === \"audioData\") {\n if (this.isDebug) {\n new Int16Array(value).forEach((element) => {\n if (this.audioData.length <= MAX_AUDIO_SAMPLES)\n this.audioData.push(element);\n });\n }\n }\n }\n if (this.executor) {\n if (this.closeSocketWithoutEOS) {\n this.executor.Send(CLOSE_MSG);\n this.closeSocketWithoutEOS = false;\n } else {\n if (type !== \"intensity\") this.executor.Send(value);\n }\n }\n };\n } catch (e) {\n console.error(\"Error: Unable to create worklet node: \", e);\n }\n }\n\n async PauseStream() {\n if (this.audioContext.state == \"running\") {\n if (!this.shouldPreIntialiseRecorder) {\n await this.audioContext.suspend();\n this.onStateChanged(false);\n\n this.log(\"Stream paused...\");\n // message sent to worklet-thread\n this.processorNode.port.postMessage(PAUSE_MSG);\n } else {\n this.processorNode.port.postMessage(PAUSE_SOCKET_MSG);\n }\n }\n this.isPaused = true;\n this.isStreaming = false;\n }\n\n async ResumeStream() {\n if (\n !this.shouldPreIntialiseRecorder &&\n this.audioContext.state == \"suspended\"\n ) {\n if (this.IsMicrophoneMuted) {\n this.onError(\n JSON.stringify({\n Type: \"ERROR\",\n Data: \"Microphone is muted.\",\n })\n );\n return;\n }\n await this.audioContext.resume();\n this.log(\"Stream resumed...\");\n } else {\n this.processorNode.port.postMessage(RESUME_SOCKET_MSG);\n this.executor.Send(RESUME_SOCKET_MSG);\n }\n this.onStateChanged(true);\n this.isPaused = false;\n this.isStreaming = true;\n }\n\n get IsPaused() {\n return this.isPaused;\n }\n\n get IsStreaming() {\n return this.isStreaming;\n }\n\n get IsMicrophoneMuted() {\n return this.audioStream.getAudioTracks()[0].muted;\n }\n\n async StopStream(shouldSendEOS) {\n if (this.audioContext?.state !== \"suspended\") {\n await this.audioContext?.suspend();\n this.onStateChanged(false);\n }\n this.log(\"Stream stopped...\");\n this.isStreaming = false;\n this.closeSocketWithoutEOS = !shouldSendEOS;\n // message sent to worklet-thread\n this.processorNode?.port?.postMessage(STOP_MSG);\n this.audioStream\n ?.getAudioTracks()[0]\n .removeEventListener(\"ended\", () => {});\n }\n\n cleanup() {\n // Uncomment to stop recorded audio\n // this.source.stop();\n // Uncomment to stop microphone audio\n this.source.mediaStream.getAudioTracks()[0].stop();\n this.source.disconnect();\n this.processorNode.disconnect();\n this.processorNode.port.close();\n this.audioContext.close();\n this.audioData = [];\n }\n\n saveAudio() {\n const wavView = this.encodeWAV();\n const url = URL.createObjectURL(new Blob([wavView], { type: \"audio/wav\" }));\n this.log(`Download Recording: ${url}`);\n }\n\n /**\n * Returns a Blob object containing the audio data in WAV format.\n * @returns {Blob} - Blob object containing the audio data in WAV format.\n */\n getBlob() {\n const wavView = this.encodeWAV();\n console.log(wavView);\n const audioBlob = new Blob([wavView], { type: \"audio/wav\" });\n console.log(audioBlob);\n return audioBlob;\n }\n\n // 16-bit PCM mono audio @ 16kHz\n encodeWAV() {\n // DataView to hold audio data, 2 bytes per int16\n const view = new DataView(new ArrayBuffer(this.audioData.length * 2));\n this.audioData.forEach((value, index) => {\n view.setInt16(index * 2, value, true);\n });\n\n const dataLength = view.buffer.byteLength;\n const fileSize = 44 + dataLength;\n const wavView = new DataView(new ArrayBuffer(fileSize));\n\n // WAV header\n wavView.setUint32(0, 0x52494646, false); // \"RIFF\" in ASCII\n wavView.setUint32(4, fileSize - 8, true);\n wavView.setUint32(8, 0x57415645, false); // \"WAVE\" in ASCII\n wavView.setUint32(12, 0x666d7420, false); // \"fmt \" in ASCII\n wavView.setUint32(16, 16, true); // Size of the \"fmt\" chunk\n wavView.setUint16(20, 1, true); // Audio format (PCM)\n wavView.setUint16(22, CHANNEL_COUNT, true);\n wavView.setUint32(24, SAMPLE_RATE, true);\n wavView.setUint32(\n 28,\n SAMPLE_RATE * CHANNEL_COUNT * (BITS_PER_SAMPLE / 8),\n true\n ); // Byte rate\n wavView.setUint16(32, CHANNEL_COUNT * (BITS_PER_SAMPLE / 8), true);\n wavView.setUint16(34, BITS_PER_SAMPLE, true);\n wavView.setUint32(36, 0x64617461, false); // \"data\" in ASCII\n wavView.setUint32(40, dataLength, true);\n\n // Write the audio data to the WAV file\n for (let i = 0; i < dataLength; i++) {\n wavView.setInt8(44 + i, view.getInt8(i));\n }\n\n return wavView;\n }\n\n log(event) {\n if (this.enableLogs) {\n const data = `${new Date().toLocaleTimeString()} Augnito: ${event}`;\n console.log(data + \"\\n\");\n }\n }\n}\n","class NetworkMonitor {\n static DEFAULT_URL = \"https://www.google.com/favicon.ico\";\n static DEFAULT_TIMEOUT = 5000;\n\n /**\n * Fast browser-level connectivity signal\n * @returns {boolean}\n */\n static isBrowserOnline() {\n return typeof navigator !== \"undefined\" && navigator.onLine === true;\n }\n\n /**\n * Real internet connectivity check using fetch\n *\n * @param {Object} [options]\n * @param {string} [options.url] - Endpoint to ping\n * @param {number} [options.timeoutMs] - Timeout in milliseconds\n * @returns {Promise<boolean>}\n */\n static async hasInternetConnection(options = {}) {\n const url = options.url || NetworkMonitor.DEFAULT_URL;\n const timeoutMs = options.timeoutMs || NetworkMonitor.DEFAULT_TIMEOUT;\n\n if (!NetworkMonitor.isBrowserOnline()) {\n return false;\n }\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeoutMs);\n\n try {\n await fetch(url, {\n method: \"HEAD\",\n mode: \"no-cors\",\n cache: \"no-cache\",\n signal: controller.signal,\n });\n return true;\n } catch (e) {\n return false;\n } finally {\n clearTimeout(timeoutId);\n }\n }\n\n /**\n * Best possible signal for SDK consumers\n *\n * @param {Object} [options]\n * @returns {Promise<boolean>}\n */\n static async isOnline(options) {\n return NetworkMonitor.hasInternetConnection(options);\n }\n}\n\nexport default NetworkMonitor;\n","import { Streamer } from \"./streamer.js\";\nimport NetworkMonitor from \"./networkMonitor.js\";\n\nexport class AugnitoRecorder {\n constructor(\n config = {\n serverURL: \"\",\n enableLogs: false,\n isDebug: false,\n bufferInterval: 1,\n pausedBufferInterval: 1,\n EOS_Message: undefined,\n socketTimeoutInterval: undefined,\n shouldSendAudioDataSequence: false,\n shouldPreIntialiseRecorder: false,\n shouldReadIntensity: false,\n debounceDelay: 300,\n switchToRegularSpeechProfile: false,\n },\n heavyOp\n ) {\n if (AugnitoRecorder.instance) {\n return AugnitoRecorder.instance;\n }\n this.WebsocketURL = config.serverURL ?? \"\";\n this.enableLogs = config.enableLogs;\n this.isDebug = config.isDebug;\n this.streamer = null;\n this.streamerNotStarted = false;\n this.isStreamerStarting = false;\n this.heavyOp = heavyOp;\n this.bufferInterval = config.bufferInterval;\n this.pausedBufferInterval = config.pausedBufferInterval;\n this.eosMessage = config.EOS_Message;\n this.socketTimeoutInterval = config.socketTimeoutInterval;\n this.shouldSendAudioDataSequence = config.shouldSendAudioDataSequence;\n this.shouldPreIntialiseRecorder = config.shouldPreIntialiseRecorder;\n this.switchToRegularSpeechProfile =\n config.switchToRegularSpeechProfile ?? false;\n if (this.shouldPreIntialiseRecorder) {\n this.initialiseStreamer();\n this.streamerNotStarted = true;\n }\n this.shouldReadIntensity = config.shouldReadIntensity;\n this.delay = config.debounceDelay ?? 300;\n this.toggleStartStopAudioStream = debounce(\n this.toggleStartStopAudioStream.bind(this),\n this.delay\n );\n this.togglePauseResumeAudioStream = debounce(\n this.togglePauseResumeAudioStream.bind(this),\n this.delay\n );\n AugnitoRecorder.instance = this;\n }\n\n initialiseStreamer() {\n this.streamer = new Streamer(\n this.enableLogs,\n this.isDebug,\n this.bufferInterval,\n this.pausedBufferInterval,\n this.eosMessage,\n this.socketTimeoutInterval,\n this.shouldSendAudioDataSequence,\n this.shouldPreIntialiseRecorder,\n this.shouldReadIntensity,\n this.switchToRegularSpeechProfile,\n this.heavyOp,\n this.onFinalResultCallback.bind(this),\n this.onPartialResultCallback.bind(this),\n this.onErrorCallback.bind(this),\n this.onStateChangedCallback.bind(this),\n this.onSessionEventCallback.bind(this),\n this.onOtherResultCallback.bind(this),\n this.onSpeechResponseCallback.bind(this),\n this.onIntensityCallback.bind(this)\n );\n }\n\n togglePauseResumeAudioStream(audioDuration = 0, socketUrl = undefined) {\n if (!this.streamer || this.streamerNotStarted) {\n if (socketUrl) {\n this.WebsocketURL = socketUrl;\n }\n this.startAudio(audioDuration);\n } else {\n if (this.streamer.IsPaused) {\n this.resumeAudio();\n } else {\n this.pauseAudio();\n }\n }\n }\n\n toggleStartStopAudioStream(audioDuration = 0, socketUrl = undefined) {\n if (!this.streamer || this.streamerNotStarted) {\n if (socketUrl) {\n this.WebsocketURL = socketUrl;\n }\n this.startAudio(audioDuration);\n } else {\n this.stopAudio();\n }\n }\n\n async startAudio(duration) {\n const online = await NetworkMonitor.isOnline();\n\n if (!online) {\n this.onErrorCallback(\n JSON.stringify({\n Type: \"ERROR\",\n Data: \"No internet connection\",\n })\n );\n return;\n }\n\n if (this.isStreamerStarting) return; // Prevent concurrent starts\n\n this.isStreamerStarting = true;\n if (!this.shouldPreIntialiseRecorder || !this.streamer) {\n this.initialiseStreamer();\n }\n try {\n var res = await this.streamer.StartStream(duration, this.WebsocketURL);\n if (!res) {\n this.streamer = null;\n } else {\n this.streamerNotStarted = false;\n\n this.log(\"Stream Started...\");\n }\n } finally {\n this.isStreamerStarting = false;\n }\n }\n\n pauseAudio() {\n this.streamer.PauseStream();\n this.log(\"Stream Paused...\");\n }\n\n resumeAudio() {\n this.streamer.ResumeStream();\n if (this.enableLogs) this.log(\"Stream Resumed...\");\n }\n\n /*\n * param forceStopForPausedState set to true for Ambient to send EOS in paused state\n */\n async stopAudio(shouldSendEOS = true, forceStopForPausedState = false) {\n if (this.streamer?.IsStreaming || forceStopForPausedState) {\n const online = await NetworkMonitor.isOnline();\n\n if (!online) {\n this.onErrorCallback(\n JSON.stringify({\n Type: \"ERROR\",\n Data: \"No internet connection\",\n })\n );\n return;\n }\n\n this.streamer?.StopStream(shouldSendEOS);\n this.streamer = null;\n this.log(\"Stream Stopped...\");\n if (this.shouldPreIntialiseRecorder) {\n this.initialiseStreamer();\n this.streamerNotStarted = true;\n }\n }\n }\n\n async isInternetAvailable() {\n const online = await NetworkMonitor.isOnline();\n return online;\n }\n\n getBlob() {\n const audioBlob = this.streamer.getBlob();\n this.log(\"Blob Sent...\");\n return audioBlob;\n }\n\n log(event) {\n if (this.enableLogs) {\n const data = `${new Date().toLocaleTimeString()} Augnito: ${event}`;\n this.showLogCallback(data + \"\\n\");\n }\n }\n\n dispose() {\n AugnitoRecorder.instance = null;\n }\n\n // #endregion\n // #region client callbacks\n onSessionEventCallback(data) {\n if (this.onSessionEvent) {\n this.onSessionEvent(data);\n }\n }\n onStateChangedCallback(isRecording) {\n if (this.onStateChanged) {\n this.onStateChanged(isRecording);\n }\n }\n onIntensityCallback(intensity) {\n if (this.onIntensity) {\n this.onIntensity(intensity);\n }\n }\n onErrorCallback(errorMessage) {\n if (this.onError) {\n this.onError(errorMessage);\n }\n }\n onPartialResultCallback(hype) {\n if (this.onPartialResult) {\n this.onPartialResult(hype);\n }\n }\n onFinalResultCallback(recipe) {\n if (this.onFinalResult) {\n this.onFinalResult(recipe);\n }\n }\n onOtherResultCallback(message) {\n if (this.onOtherResults) {\n this.onOtherResults(message);\n }\n }\n onSpeechResponseCallback(message) {\n if (this.onSpeechResponse) {\n this.onSpeechResponse(message);\n }\n }\n showLogCallback(event) {\n if (this.showLog) {\n this.showLog(event);\n }\n }\n}\n\nfunction debounce(fn, delay) {\n let timeoutId;\n return function (...args) {\n if (timeoutId) clearTimeout(timeoutId);\n timeoutId = setTimeout(() => fn.apply(this, args), delay);\n };\n}\n"],"names":["LOOP_AUDIO","WORKLET_PROCESSOR","SAMPLE_RATE","EOS_MSG","DONE_MSG","PAUSE_MSG","PAUSE_SOCKET_MSG","RESUME_SOCKET_MSG","STOP_MSG","CLOSE_MSG","CHANNEL_COUNT","BITS_PER_SAMPLE","NOISE_SUPPRESS_ENABLED","KEEP_ALIVE_TIMEOUT","IDLE_THREAD_INTERVAL","CONSUME_INTERVAL","CONNECT_RETRY_TIMEOUT","HEALTHCHECK_INTERVAL","SOCKET_TIMEOUT","MAX_AUDIO_SAMPLES","Executor","enableLogs","eosMessage","socketTimeoutInterval","shouldSendAudioDataSequence","onFinalResult","onPartialResult","onError","onSessionEvent","onOtherResults","onSpeechResponse","bufferSizeInterval","switchToRegularSpeechProfile","_classCallCheck","worker","onFinalResultCallback","onErrorCallback","onPartialResultCallback","onSessionEventCallback","onOtherResultsCallback","onSpeechResponseCallback","packetSeqId","audioDuration","heavyOp","idleLoop","lastSent","switchToRegularSpeech","_createClass","key","value","Start","duration","wsUrl","_this","workerScript","concat","WorkerBlob","toString","JSON","stringify","Worker","URL","createObjectURL","Blob","type","onmessage","event","console","log","data","eventData","setInterval","currentTime","Date","Send","warn","createAudioPacketHeader","isLastPacket","Math","ceil","headerSize","buffer","ArrayBuffer","view","DataView","i","setUint8","charCodeAt","setBigInt64","BigInt","appendAudioData","arrayBuffer","audioDataBytes","totalLength","byteLength","combinedBuffer","combinedArray","Uint8Array","set","_this$worker","postMessage","clearInterval","_this$worker2","binaryHeader","_this$worker3","_this$worker4","_this$worker5","_this$worker6","audioData","undefined","_this$worker7","doneMessage","closeMessage","connectionRetryTimeout","healthcheckInterval","consumeInterval","pauseSocketMessage","resumeSocketMessage","lastConnect","lastDataSent","lastDataReceived","lastPingReceived","queue","pauseStateAudio","sentPacketsQueue","ws","isDone","consumer","healthCheck","retrySentPacket","packetId","shouldNotReconnect","JobID","shouldPauseSocket","initConnect","WebSocket","onopen","length","message","operate","onerror","error","self","onclose","cleanup","send","readyState","OPEN","add","push","parse","Type","metaResponse","Event","Result","Final","outputText","Transcript","filter","x","packetNumber","Index","Data","e","close","retryPacket","packetData","res","shift","isSent","unshift","Number","getBigInt64","sentPacket","isSocketClosingTime","worklet","Streamer","isDebug","pausedBufferInterval","shouldPreIntialiseRecorder","shouldReadIntensity","onStateChanged","onIntensity","audioContext","audioStream","executor","HeavyOp","source","processorNode","isPaused","isStreaming","closeSocketWithoutEOS","EarlyInitialiseMediaStream","_EarlyInitialiseMediaStream","_asyncToGenerator","_regeneratorRuntime","mark","_callee","wrap","_callee$","_context","prev","next","createMediaStreamSourceNode","state","suspend","stop","apply","arguments","_StartStream","_callee2","_callee2$","_context2","abrupt","resume","createProcessorNode","IsMicrophoneMuted","connect","destination","sampleRate","StartStream","_x","_x2","_createBufferedSourceNode","_callee3","audioBuffer","_callee3$","_context3","loadAudio","sent","createBufferSource","loop","start","createBufferedSourceNode","_createMediaStreamSourceNode","_callee4","errMessage","_callee4$","_context4","navigator","mediaDevices","getUserMedia","audio","channelCount","noiseSuppression","AudioContext","createMediaStreamSource","getAudioTracks","addEventListener","t0","name","_loadAudio","_callee5","response","_callee5$","_context5","fetch","decodeAudioData","_createProcessorNode","_callee6","_this2","_this$shouldReadInten","sampleRateParam","bufferSizeIntervalParam","pausedBufferIntervalParam","shouldReadIntensityParam","_callee6$","_context6","audioWorklet","addModule","encodeURIComponent","AudioWorkletNode","parameters","get","setValueAtTime","port","_event$data","saveAudio","_this2$onIntensity","call","Int16Array","forEach","element","_PauseStream","_callee7","_callee7$","_context7","PauseStream","_ResumeStream","_callee8","_callee8$","_context8","ResumeStream","muted","_StopStream","_callee9","shouldSendEOS","_this$audioContext","_this$processorNode","_this$audioStream","_this$audioContext2","_callee9$","_context9","removeEventListener","StopStream","_x3","mediaStream","disconnect","wavView","encodeWAV","url","getBlob","audioBlob","index","setInt16","dataLength","fileSize","setUint32","setUint16","setInt8","getInt8","toLocaleTimeString","NetworkMonitor","isBrowserOnline","onLine","_hasInternetConnection","options","timeoutMs","controller","timeoutId","_args","DEFAULT_URL","DEFAULT_TIMEOUT","AbortController","setTimeout","abort","method","mode","cache","signal","clearTimeout","finish","hasInternetConnection","_isOnline","isOnline","_defineProperty","AugnitoRecorder","_config$serverURL","_config$switchToRegul","_config$debounceDelay","config","serverURL","bufferInterval","EOS_Message","debounceDelay","instance","WebsocketURL","streamer","streamerNotStarted","isStreamerStarting","initialiseStreamer","delay","toggleStartStopAudioStream","debounce","bind","togglePauseResumeAudioStream","onStateChangedCallback","onOtherResultCallback","onIntensityCallback","socketUrl","startAudio","IsPaused","resumeAudio","pauseAudio","stopAudio","_startAudio","online","_stopAudio","_this$streamer","forceStopForPausedState","_this$streamer2","_args2","IsStreaming","_isInternetAvailable","isInternetAvailable","showLogCallback","dispose","isRecording","intensity","errorMessage","hype","recipe","showLog","fn","_len","args","Array","_key"],"mappings":"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"}
|