testaugnitorecorder4 1.1.25 → 1.1.26
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.
|
@@ -19,6 +19,7 @@ export declare class AugnitoRecorder {
|
|
|
19
19
|
onMicReady: () => void;
|
|
20
20
|
showLog: (event: string) => void;
|
|
21
21
|
onSocketStatusChange: (status: string) => void;
|
|
22
|
+
onAudioMetadata: (data: any) => void;
|
|
22
23
|
echoCancellation: boolean | { exact: boolean } | undefined;
|
|
23
24
|
noiseSuppression: boolean | { exact: boolean } | undefined;
|
|
24
25
|
autoGainControl: boolean | { exact: boolean } | undefined;
|
|
@@ -63,4 +64,4 @@ export declare class AugnitoRecorder {
|
|
|
63
64
|
onFinalResultCallback(recipe: any): void;
|
|
64
65
|
showLogCallback(event: any): void;
|
|
65
66
|
onIntensityCallback(intensity: number): void;
|
|
66
|
-
}
|
|
67
|
+
}
|
package/dist/augnitoRecorder.js
CHANGED
|
@@ -892,7 +892,7 @@ var worklet = "class MyAudioWorkletProcessor extends AudioWorkletProcessor {\n
|
|
|
892
892
|
|
|
893
893
|
// main-thread
|
|
894
894
|
var Streamer = /*#__PURE__*/function () {
|
|
895
|
-
function Streamer(socketUrl, enableLogs, isDebug, bufferSizeInterval, pausedBufferInterval, eosMessage, socketTimeoutInterval, shouldSendAudioDataSequence, reconnectAudioDuration, shouldPreIntialiseRecorder, shouldReadIntensity, switchToRegularSpeechProfile, echoCancellation, noiseSuppression, autoGainControl, heavyOp, onFinalResult, onPartialResult, onError, onStateChanged, onSessionEvent, onOtherResults, onSpeechResponse, onIntensity, onJobStatus, onMicReady, onWsStatusChange) {
|
|
895
|
+
function Streamer(socketUrl, enableLogs, isDebug, bufferSizeInterval, pausedBufferInterval, eosMessage, socketTimeoutInterval, shouldSendAudioDataSequence, reconnectAudioDuration, shouldPreIntialiseRecorder, shouldReadIntensity, switchToRegularSpeechProfile, echoCancellation, noiseSuppression, autoGainControl, heavyOp, onFinalResult, onPartialResult, onError, onStateChanged, onSessionEvent, onOtherResults, onSpeechResponse, onIntensity, onJobStatus, onMicReady, onWsStatusChange, onAudioMetadata) {
|
|
896
896
|
_classCallCheck(this, Streamer);
|
|
897
897
|
this.audioContext;
|
|
898
898
|
this.audioStream;
|
|
@@ -927,6 +927,7 @@ var Streamer = /*#__PURE__*/function () {
|
|
|
927
927
|
this.currentDuration = 0;
|
|
928
928
|
this.deviceChangeHandler = null;
|
|
929
929
|
this.onMicReady = onMicReady;
|
|
930
|
+
this.onAudioMetadata = onAudioMetadata;
|
|
930
931
|
this._originalDeviceId = null;
|
|
931
932
|
this._originalDeviceLabel = null;
|
|
932
933
|
if (this.shouldPreIntialiseRecorder) {
|
|
@@ -937,7 +938,10 @@ var Streamer = /*#__PURE__*/function () {
|
|
|
937
938
|
key: "InitialiseMediaStream",
|
|
938
939
|
value: function () {
|
|
939
940
|
var _InitialiseMediaStream = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(duration, wsUrl) {
|
|
940
|
-
var _this = this
|
|
941
|
+
var _this = this,
|
|
942
|
+
_this$audioStream2,
|
|
943
|
+
_this$audioStream2$ge;
|
|
944
|
+
var mic;
|
|
941
945
|
return _regeneratorRuntime().wrap(function _callee2$(_context2) {
|
|
942
946
|
while (1) switch (_context2.prev = _context2.next) {
|
|
943
947
|
case 0:
|
|
@@ -1039,7 +1043,9 @@ var Streamer = /*#__PURE__*/function () {
|
|
|
1039
1043
|
}));
|
|
1040
1044
|
navigator.mediaDevices.addEventListener("devicechange", this.deviceChangeHandler);
|
|
1041
1045
|
}
|
|
1042
|
-
|
|
1046
|
+
mic = (_this$audioStream2 = this.audioStream) === null || _this$audioStream2 === void 0 || (_this$audioStream2$ge = _this$audioStream2.getAudioTracks) === null || _this$audioStream2$ge === void 0 ? void 0 : _this$audioStream2$ge.call(_this$audioStream2)[0];
|
|
1047
|
+
this.sendAudioMetadata(mic);
|
|
1048
|
+
case 18:
|
|
1043
1049
|
case "end":
|
|
1044
1050
|
return _context2.stop();
|
|
1045
1051
|
}
|
|
@@ -1054,7 +1060,7 @@ var Streamer = /*#__PURE__*/function () {
|
|
|
1054
1060
|
key: "StartStream",
|
|
1055
1061
|
value: function () {
|
|
1056
1062
|
var _StartStream = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3(duration, wsUrl) {
|
|
1057
|
-
var _this$
|
|
1063
|
+
var _this$audioStream3, _this$audioStream3$ge;
|
|
1058
1064
|
return _regeneratorRuntime().wrap(function _callee3$(_context3) {
|
|
1059
1065
|
while (1) switch (_context3.prev = _context3.next) {
|
|
1060
1066
|
case 0:
|
|
@@ -1090,7 +1096,7 @@ var Streamer = /*#__PURE__*/function () {
|
|
|
1090
1096
|
case 11:
|
|
1091
1097
|
// Stop all media tracks so the browser releases the mic and removes
|
|
1092
1098
|
// the red recording indicator when the mic is muted at start.
|
|
1093
|
-
(_this$
|
|
1099
|
+
(_this$audioStream3 = this.audioStream) === null || _this$audioStream3 === void 0 || (_this$audioStream3$ge = _this$audioStream3.getTracks) === null || _this$audioStream3$ge === void 0 || (_this$audioStream3$ge = _this$audioStream3$ge.call(_this$audioStream3)) === null || _this$audioStream3$ge === void 0 || _this$audioStream3$ge.forEach(function (t) {
|
|
1094
1100
|
try {
|
|
1095
1101
|
t.stop();
|
|
1096
1102
|
} catch (_unused) {}
|
|
@@ -1395,12 +1401,12 @@ var Streamer = /*#__PURE__*/function () {
|
|
|
1395
1401
|
key: "ResumeStream",
|
|
1396
1402
|
value: function () {
|
|
1397
1403
|
var _ResumeStream = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee9() {
|
|
1398
|
-
var _this$
|
|
1404
|
+
var _this$audioStream4, _this$audioStream4$ge;
|
|
1399
1405
|
var track, trackEnded;
|
|
1400
1406
|
return _regeneratorRuntime().wrap(function _callee9$(_context9) {
|
|
1401
1407
|
while (1) switch (_context9.prev = _context9.next) {
|
|
1402
1408
|
case 0:
|
|
1403
|
-
track = (_this$
|
|
1409
|
+
track = (_this$audioStream4 = this.audioStream) === null || _this$audioStream4 === void 0 || (_this$audioStream4$ge = _this$audioStream4.getAudioTracks) === null || _this$audioStream4$ge === void 0 ? void 0 : _this$audioStream4$ge.call(_this$audioStream4)[0];
|
|
1404
1410
|
trackEnded = !track || track.readyState === "ended";
|
|
1405
1411
|
if (!(trackEnded || this.micNeedsRecovery)) {
|
|
1406
1412
|
_context9.next = 5;
|
|
@@ -1471,8 +1477,8 @@ var Streamer = /*#__PURE__*/function () {
|
|
|
1471
1477
|
}, {
|
|
1472
1478
|
key: "IsMicrophoneMuted",
|
|
1473
1479
|
get: function get() {
|
|
1474
|
-
var _this$
|
|
1475
|
-
var track = (_this$
|
|
1480
|
+
var _this$audioStream5, _this$audioStream5$ge;
|
|
1481
|
+
var track = (_this$audioStream5 = this.audioStream) === null || _this$audioStream5 === void 0 || (_this$audioStream5$ge = _this$audioStream5.getAudioTracks) === null || _this$audioStream5$ge === void 0 ? void 0 : _this$audioStream5$ge.call(_this$audioStream5)[0];
|
|
1476
1482
|
if (!track) {
|
|
1477
1483
|
return true;
|
|
1478
1484
|
}
|
|
@@ -1482,7 +1488,7 @@ var Streamer = /*#__PURE__*/function () {
|
|
|
1482
1488
|
key: "StopStream",
|
|
1483
1489
|
value: function () {
|
|
1484
1490
|
var _StopStream = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee10(shouldSendEOS) {
|
|
1485
|
-
var _this$audioContext, _this$
|
|
1491
|
+
var _this$audioContext, _this$audioStream6, _this$audioStream6$ge, _this$audioStream7, _this$audioStream7$ge, _this$processorNode;
|
|
1486
1492
|
var _this$audioContext2, track;
|
|
1487
1493
|
return _regeneratorRuntime().wrap(function _callee10$(_context10) {
|
|
1488
1494
|
while (1) switch (_context10.prev = _context10.next) {
|
|
@@ -1506,13 +1512,13 @@ var Streamer = /*#__PURE__*/function () {
|
|
|
1506
1512
|
this.deviceChangeHandler = null;
|
|
1507
1513
|
}
|
|
1508
1514
|
// Remove track-ended listener using the stored reference
|
|
1509
|
-
track = (_this$
|
|
1515
|
+
track = (_this$audioStream6 = this.audioStream) === null || _this$audioStream6 === void 0 || (_this$audioStream6$ge = _this$audioStream6.getAudioTracks) === null || _this$audioStream6$ge === void 0 ? void 0 : _this$audioStream6$ge.call(_this$audioStream6)[0];
|
|
1510
1516
|
if (track && this.trackEndedHandler) {
|
|
1511
1517
|
track.removeEventListener("ended", this.trackEndedHandler);
|
|
1512
1518
|
}
|
|
1513
1519
|
this.trackEndedHandler = null;
|
|
1514
1520
|
// Stop all media tracks so the browser releases the mic (removes red icon)
|
|
1515
|
-
(_this$
|
|
1521
|
+
(_this$audioStream7 = this.audioStream) === null || _this$audioStream7 === void 0 || (_this$audioStream7$ge = _this$audioStream7.getTracks) === null || _this$audioStream7$ge === void 0 || (_this$audioStream7$ge = _this$audioStream7$ge.call(_this$audioStream7)) === null || _this$audioStream7$ge === void 0 || _this$audioStream7$ge.forEach(function (t) {
|
|
1516
1522
|
try {
|
|
1517
1523
|
t.stop();
|
|
1518
1524
|
} catch (_unused2) {}
|
|
@@ -1535,7 +1541,7 @@ var Streamer = /*#__PURE__*/function () {
|
|
|
1535
1541
|
value: function () {
|
|
1536
1542
|
var _recoverAudioGraph = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee11() {
|
|
1537
1543
|
var _this4 = this;
|
|
1538
|
-
var _this$
|
|
1544
|
+
var _this$audioStream8, _this$audioStream8$ge, _this$audioStream9, _this$audioStream10, _this$audioStream10$g, _recoveredTrack$getSe, _recoveredTrack$getSe2, oldTrack, _this$source, _this$processorNode2, recoveredTrack, devices, originalDevicePresent;
|
|
1539
1545
|
return _regeneratorRuntime().wrap(function _callee11$(_context11) {
|
|
1540
1546
|
while (1) switch (_context11.prev = _context11.next) {
|
|
1541
1547
|
case 0:
|
|
@@ -1549,14 +1555,14 @@ var Streamer = /*#__PURE__*/function () {
|
|
|
1549
1555
|
_context11.prev = 3;
|
|
1550
1556
|
// this.log("Recovering audio graph...");
|
|
1551
1557
|
// Remove old track-ended listener to prevent spurious error during recovery
|
|
1552
|
-
oldTrack = (_this$
|
|
1558
|
+
oldTrack = (_this$audioStream8 = this.audioStream) === null || _this$audioStream8 === void 0 || (_this$audioStream8$ge = _this$audioStream8.getAudioTracks) === null || _this$audioStream8$ge === void 0 || (_this$audioStream8$ge = _this$audioStream8$ge.call(_this$audioStream8)) === null || _this$audioStream8$ge === void 0 ? void 0 : _this$audioStream8$ge[0];
|
|
1553
1559
|
if (oldTrack && this.trackEndedHandler) {
|
|
1554
1560
|
oldTrack.removeEventListener("ended", this.trackEndedHandler);
|
|
1555
1561
|
this.trackEndedHandler = null;
|
|
1556
1562
|
}
|
|
1557
1563
|
|
|
1558
1564
|
// stop old track
|
|
1559
|
-
(_this$
|
|
1565
|
+
(_this$audioStream9 = this.audioStream) === null || _this$audioStream9 === void 0 || (_this$audioStream9 = _this$audioStream9.getTracks()) === null || _this$audioStream9 === void 0 || _this$audioStream9.forEach(function (t) {
|
|
1560
1566
|
try {
|
|
1561
1567
|
t.stop();
|
|
1562
1568
|
} catch (_unused3) {}
|
|
@@ -1614,7 +1620,7 @@ var Streamer = /*#__PURE__*/function () {
|
|
|
1614
1620
|
return this.audioContext.suspend();
|
|
1615
1621
|
case 24:
|
|
1616
1622
|
this.micNeedsRecovery = false;
|
|
1617
|
-
recoveredTrack = (_this$
|
|
1623
|
+
recoveredTrack = (_this$audioStream10 = this.audioStream) === null || _this$audioStream10 === void 0 || (_this$audioStream10$g = _this$audioStream10.getAudioTracks) === null || _this$audioStream10$g === void 0 ? void 0 : _this$audioStream10$g.call(_this$audioStream10)[0];
|
|
1618
1624
|
(_recoveredTrack$getSe = recoveredTrack === null || recoveredTrack === void 0 || (_recoveredTrack$getSe2 = recoveredTrack.getSettings) === null || _recoveredTrack$getSe2 === void 0 || (_recoveredTrack$getSe2 = _recoveredTrack$getSe2.call(recoveredTrack)) === null || _recoveredTrack$getSe2 === void 0 ? void 0 : _recoveredTrack$getSe2.deviceId) !== null && _recoveredTrack$getSe !== void 0 ? _recoveredTrack$getSe : "";
|
|
1619
1625
|
recoveredTrack && recoveredTrack.readyState === "live";
|
|
1620
1626
|
_context11.next = 30;
|
|
@@ -1631,7 +1637,9 @@ var Streamer = /*#__PURE__*/function () {
|
|
|
1631
1637
|
// setTimeout(() => {
|
|
1632
1638
|
// this._micReadyFired = false;
|
|
1633
1639
|
// }, 300);
|
|
1640
|
+
|
|
1634
1641
|
this.onMicReady();
|
|
1642
|
+
this.sendAudioMetadata(recoveredTrack);
|
|
1635
1643
|
}
|
|
1636
1644
|
}
|
|
1637
1645
|
// this.log("Audio graph recovery completed");
|
|
@@ -1671,11 +1679,11 @@ var Streamer = /*#__PURE__*/function () {
|
|
|
1671
1679
|
}, {
|
|
1672
1680
|
key: "cleanup",
|
|
1673
1681
|
value: function cleanup() {
|
|
1674
|
-
var _this$
|
|
1682
|
+
var _this$audioStream11;
|
|
1675
1683
|
// Uncomment to stop recorded audio
|
|
1676
1684
|
// this.source.stop();
|
|
1677
1685
|
// Uncomment to stop microphone audio
|
|
1678
|
-
(_this$
|
|
1686
|
+
(_this$audioStream11 = this.audioStream) === null || _this$audioStream11 === void 0 || (_this$audioStream11 = _this$audioStream11.getTracks()) === null || _this$audioStream11 === void 0 || _this$audioStream11.forEach(function (track) {
|
|
1679
1687
|
try {
|
|
1680
1688
|
track.stop();
|
|
1681
1689
|
} catch (_unused6) {}
|
|
@@ -1686,6 +1694,21 @@ var Streamer = /*#__PURE__*/function () {
|
|
|
1686
1694
|
this.audioContext.close();
|
|
1687
1695
|
this.audioData = [];
|
|
1688
1696
|
}
|
|
1697
|
+
}, {
|
|
1698
|
+
key: "sendAudioMetadata",
|
|
1699
|
+
value: function sendAudioMetadata(track) {
|
|
1700
|
+
var _track$getSettings3, _track$getSettings4, _track$label2, _recoveredSettings$ec, _recoveredSettings$no, _recoveredSettings$au;
|
|
1701
|
+
var browser = getBrowserInfo();
|
|
1702
|
+
var recoveredSettings = (_track$getSettings3 = track === null || track === void 0 || (_track$getSettings4 = track.getSettings) === null || _track$getSettings4 === void 0 ? void 0 : _track$getSettings4.call(track)) !== null && _track$getSettings3 !== void 0 ? _track$getSettings3 : {};
|
|
1703
|
+
if (this.onAudioMetadata) this.onAudioMetadata({
|
|
1704
|
+
DeviceLabel: (_track$label2 = track === null || track === void 0 ? void 0 : track.label) !== null && _track$label2 !== void 0 ? _track$label2 : "",
|
|
1705
|
+
EchoCancellation: (_recoveredSettings$ec = recoveredSettings.echoCancellation) !== null && _recoveredSettings$ec !== void 0 ? _recoveredSettings$ec : false,
|
|
1706
|
+
NoiseSuppression: (_recoveredSettings$no = recoveredSettings.noiseSuppression) !== null && _recoveredSettings$no !== void 0 ? _recoveredSettings$no : false,
|
|
1707
|
+
AutoGainControl: (_recoveredSettings$au = recoveredSettings.autoGainControl) !== null && _recoveredSettings$au !== void 0 ? _recoveredSettings$au : false,
|
|
1708
|
+
BrowserName: browser.BrowserName,
|
|
1709
|
+
BrowserVersion: browser.BrowserVersion
|
|
1710
|
+
});
|
|
1711
|
+
}
|
|
1689
1712
|
}, {
|
|
1690
1713
|
key: "saveAudio",
|
|
1691
1714
|
value: function saveAudio() {
|
|
@@ -1938,6 +1961,32 @@ function _findFirstActiveAudioDevice() {
|
|
|
1938
1961
|
}));
|
|
1939
1962
|
return _findFirstActiveAudioDevice.apply(this, arguments);
|
|
1940
1963
|
}
|
|
1964
|
+
function getBrowserInfo() {
|
|
1965
|
+
var ua = navigator.userAgent;
|
|
1966
|
+
var browser = "Unknown";
|
|
1967
|
+
var version = "";
|
|
1968
|
+
if (/Edg\/([\d.]+)/.test(ua)) {
|
|
1969
|
+
var _ua$match;
|
|
1970
|
+
browser = "Edge";
|
|
1971
|
+
version = ((_ua$match = ua.match(/Edg\/([\d.]+)/)) === null || _ua$match === void 0 ? void 0 : _ua$match[1]) || "";
|
|
1972
|
+
} else if (/Chrome\/([\d.]+)/.test(ua)) {
|
|
1973
|
+
var _ua$match2;
|
|
1974
|
+
browser = "Chrome";
|
|
1975
|
+
version = ((_ua$match2 = ua.match(/Chrome\/([\d.]+)/)) === null || _ua$match2 === void 0 ? void 0 : _ua$match2[1]) || "";
|
|
1976
|
+
} else if (/Firefox\/([\d.]+)/.test(ua)) {
|
|
1977
|
+
var _ua$match3;
|
|
1978
|
+
browser = "Firefox";
|
|
1979
|
+
version = ((_ua$match3 = ua.match(/Firefox\/([\d.]+)/)) === null || _ua$match3 === void 0 ? void 0 : _ua$match3[1]) || "";
|
|
1980
|
+
} else if (/Version\/([\d.]+).*Safari/.test(ua)) {
|
|
1981
|
+
var _ua$match4;
|
|
1982
|
+
browser = "Safari";
|
|
1983
|
+
version = ((_ua$match4 = ua.match(/Version\/([\d.]+)/)) === null || _ua$match4 === void 0 ? void 0 : _ua$match4[1]) || "";
|
|
1984
|
+
}
|
|
1985
|
+
return {
|
|
1986
|
+
BrowserName: browser,
|
|
1987
|
+
BrowserVersion: version
|
|
1988
|
+
};
|
|
1989
|
+
}
|
|
1941
1990
|
|
|
1942
1991
|
var AugnitoRecorder = /*#__PURE__*/function () {
|
|
1943
1992
|
function AugnitoRecorder() {
|
|
@@ -1993,7 +2042,6 @@ var AugnitoRecorder = /*#__PURE__*/function () {
|
|
|
1993
2042
|
this.toggleStartStopAudioStream = debounce(this.toggleStartStopAudioStream.bind(this), this.delay);
|
|
1994
2043
|
this.togglePauseResumeAudioStream = debounce(this.togglePauseResumeAudioStream.bind(this), this.delay);
|
|
1995
2044
|
this.needsDispose = false;
|
|
1996
|
-
// this.wsReadyState = "DISCONNECTED";
|
|
1997
2045
|
AugnitoRecorder.instance = this;
|
|
1998
2046
|
}
|
|
1999
2047
|
return _createClass(AugnitoRecorder, [{
|
|
@@ -2026,7 +2074,7 @@ var AugnitoRecorder = /*#__PURE__*/function () {
|
|
|
2026
2074
|
}, {
|
|
2027
2075
|
key: "initialiseStreamer",
|
|
2028
2076
|
value: function initialiseStreamer() {
|
|
2029
|
-
this.streamer = new Streamer(this.WebsocketURL, this.enableLogs, this.isDebug, this.bufferInterval, this.pausedBufferInterval, this.eosMessage, this.socketTimeoutInterval, this.shouldSendAudioDataSequence, this.reconnectAudioDuration, this.shouldPreIntialiseRecorder, this.shouldReadIntensity, this.switchToRegularSpeechProfile, this._echoCancellation, this._noiseSuppression, this._autoGainControl, this.heavyOp, this.onFinalResultCallback.bind(this), this.onPartialResultCallback.bind(this), this.onErrorCallback.bind(this), this.onStateChangedCallback.bind(this), this.onSessionEventCallback.bind(this), this.onOtherResultCallback.bind(this), this.onSpeechResponseCallback.bind(this), this.onIntensityCallback.bind(this), this.onJobStatusCallback.bind(this), this.onMicReadyCallback.bind(this), this.onWsStatusChangeCallback.bind(this));
|
|
2077
|
+
this.streamer = new Streamer(this.WebsocketURL, this.enableLogs, this.isDebug, this.bufferInterval, this.pausedBufferInterval, this.eosMessage, this.socketTimeoutInterval, this.shouldSendAudioDataSequence, this.reconnectAudioDuration, this.shouldPreIntialiseRecorder, this.shouldReadIntensity, this.switchToRegularSpeechProfile, this._echoCancellation, this._noiseSuppression, this._autoGainControl, this.heavyOp, this.onFinalResultCallback.bind(this), this.onPartialResultCallback.bind(this), this.onErrorCallback.bind(this), this.onStateChangedCallback.bind(this), this.onSessionEventCallback.bind(this), this.onOtherResultCallback.bind(this), this.onSpeechResponseCallback.bind(this), this.onIntensityCallback.bind(this), this.onJobStatusCallback.bind(this), this.onMicReadyCallback.bind(this), this.onWsStatusChangeCallback.bind(this), this.onAudioMetadataCallback.bind(this));
|
|
2030
2078
|
}
|
|
2031
2079
|
}, {
|
|
2032
2080
|
key: "updateIntentStartStream",
|
|
@@ -2160,25 +2208,16 @@ var AugnitoRecorder = /*#__PURE__*/function () {
|
|
|
2160
2208
|
this.log("Blob Sent...");
|
|
2161
2209
|
return audioBlob;
|
|
2162
2210
|
}
|
|
2163
|
-
|
|
2164
|
-
|
|
2165
|
-
|
|
2166
|
-
|
|
2167
|
-
|
|
2168
|
-
|
|
2169
|
-
|
|
2170
|
-
|
|
2171
|
-
|
|
2172
|
-
|
|
2173
|
-
* - "CLOSED" – WebSocket has been closed (including unexpected drops).
|
|
2174
|
-
* - "ERROR" – WebSocket encountered an error.
|
|
2175
|
-
* - "DISCONNECTED" – No streamer / Worker has been started yet.
|
|
2176
|
-
*
|
|
2177
|
-
* @returns {"OPEN" | "CLOSED" | "ERROR" | "DISCONNECTED"}
|
|
2178
|
-
*/
|
|
2179
|
-
// getWebSocketStatus() {
|
|
2180
|
-
// return this.wsReadyState;
|
|
2181
|
-
// }
|
|
2211
|
+
}, {
|
|
2212
|
+
key: "getCurrentTime",
|
|
2213
|
+
value: function getCurrentTime() {
|
|
2214
|
+
return this.streamer && this.streamer.audioContext ? this.streamer.audioContext.currentTime : 0;
|
|
2215
|
+
}
|
|
2216
|
+
}, {
|
|
2217
|
+
key: "getState",
|
|
2218
|
+
value: function getState() {
|
|
2219
|
+
return this.streamer && this.streamer.audioContext ? this.streamer.audioContext.state : "closed";
|
|
2220
|
+
}
|
|
2182
2221
|
}, {
|
|
2183
2222
|
key: "log",
|
|
2184
2223
|
value: function log(event) {
|
|
@@ -2194,7 +2233,6 @@ var AugnitoRecorder = /*#__PURE__*/function () {
|
|
|
2194
2233
|
this.needsDispose = true;
|
|
2195
2234
|
(_this$streamer4 = this.streamer) === null || _this$streamer4 === void 0 || _this$streamer4.StopStream(false);
|
|
2196
2235
|
this.streamer = null;
|
|
2197
|
-
// this.wsReadyState = "DISCONNECTED";
|
|
2198
2236
|
AugnitoRecorder.instance = null;
|
|
2199
2237
|
}
|
|
2200
2238
|
|
|
@@ -2270,15 +2308,19 @@ var AugnitoRecorder = /*#__PURE__*/function () {
|
|
|
2270
2308
|
this.onMicReady();
|
|
2271
2309
|
}
|
|
2272
2310
|
}
|
|
2311
|
+
}, {
|
|
2312
|
+
key: "onAudioMetadataCallback",
|
|
2313
|
+
value: function onAudioMetadataCallback(data) {
|
|
2314
|
+
if (this.onAudioMetadata) {
|
|
2315
|
+
this.onAudioMetadata(data);
|
|
2316
|
+
}
|
|
2317
|
+
}
|
|
2273
2318
|
}, {
|
|
2274
2319
|
key: "onWsStatusChangeCallback",
|
|
2275
2320
|
value: function onWsStatusChangeCallback(statusData) {
|
|
2276
|
-
// statusData is in the form "WS_STATUS:OPEN" | "WS_STATUS:CLOSED" | "WS_STATUS:ERROR"
|
|
2277
2321
|
if (this.onSocketStatusChange) {
|
|
2278
2322
|
this.onSocketStatusChange(statusData);
|
|
2279
|
-
console.log("onWsStatusChangeCallback called with statusData:", statusData);
|
|
2280
2323
|
}
|
|
2281
|
-
// this.wsReadyState = state;
|
|
2282
2324
|
}
|
|
2283
2325
|
}, {
|
|
2284
2326
|
key: "showLogCallback",
|
|
@@ -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 INTENT_START_STREAM = \"INTENT_START_STREAM\";\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;\nexport const WS_STATUS_MSG = \"WS_STATUS\";\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 INTENT_START_STREAM,\n WS_STATUS_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 onJobStatus,\n bufferSizeInterval,\n switchToRegularSpeechProfile,\n onWsStatusChange,\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.onJobStatusCallback = onJobStatus;\n this.onWsStatusChangeCallback = onWsStatusChange;\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, shouldPauseSocketInitially) {\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 KEEP_ALIVE_TIMEOUT,\n )}, ${JSON.stringify(HEALTHCHECK_INTERVAL)}, ${JSON.stringify(\n CONSUME_INTERVAL,\n )}, ${JSON.stringify(IDLE_THREAD_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(INTENT_START_STREAM)}, ${JSON.stringify(\n this.switchToRegularSpeech,\n )}, ${JSON.stringify(shouldPauseSocketInitially)}, ${JSON.stringify(\n this.heavyOp,\n )}, ${JSON.stringify(WS_STATUS_MSG)});\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 == \"jobstatus\") {\n this.onJobStatusCallback(eventData.data.status);\n } else if (eventData.type == \"speechResponse\")\n this.onSpeechResponseCallback(eventData.data);\n else if (eventData.type == \"wsStatus\")\n this.onWsStatusChangeCallback(eventData.data);\n };\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 } 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 } 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 == INTENT_START_STREAM) {\n this.worker?.postMessage(INTENT_START_STREAM);\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 keepAliveTimeout,\n healthcheckInterval,\n consumeInterval,\n idleThreadInterval,\n wsUrl,\n enableLogs,\n shouldSendAudioDataSequence,\n pauseSocketMessage,\n resumeSocketMessage,\n startListeningClickedMessage,\n switchToRegularSpeechProfile,\n shouldPauseSocketInitially,\n heavyOp,\n wsStatusMessage,\n) {\n let lastConnect;\n var lastDataSent;\n var lastDataReceived;\n let lastPingReceived;\n let queue = [];\n let pauseStateAudio;\n let pendingStartStreamBuffer = [];\n let pendingStartStreamCapture = false;\n let sentPacketsQueue = [];\n let ws;\n let isDone = false;\n let consumer;\n let healthCheck;\n let idleLoop;\n let retrySentPacket = false;\n let packetId = 0;\n let shouldNotReconnect = false;\n let JobID = \"\";\n let shouldPauseSocket = shouldPauseSocketInitially;\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 - \" +\n JSON.stringify(event),\n );\n }\n self.postMessage({ type: \"wsStatus\", data: \"OPEN\" });\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({ type: \"wsStatus\", data: \"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 self.postMessage({ type: \"wsStatus\", data: \"CLOSED\" });\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 if (\n typeof data.Data === \"string\" &&\n data.Data.toUpperCase() === \"RECEIVED_EOS\"\n ) {\n isDone = true;\n clearInterval(idleLoop);\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 if (data.Type == \"STATUS\") {\n self.postMessage({\n type: \"jobstatus\",\n data: {\n status: message.data,\n },\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 clearInterval(idleLoop);\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 if (!(data instanceof ArrayBuffer)) {\n continue;\n }\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 idleLoop = setInterval(() => {\n if (ws && ws.readyState === WebSocket.OPEN) {\n const currentTime = +new Date();\n if (lastDataSent && currentTime - lastDataSent > keepAliveTimeout) {\n if (enableLogs) {\n console.warn(\n `No data sent since more than ${\n keepAliveTimeout / 1000\n } secs, closing time...`,\n );\n }\n ws.close();\n }\n }\n }, idleThreadInterval);\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 === startListeningClickedMessage) {\n pendingStartStreamCapture = true;\n } else if (event.data === resumeSocketMessage) {\n if (pauseStateAudio instanceof ArrayBuffer) {\n add(pauseStateAudio);\n }\n if (pendingStartStreamBuffer.length > 0) {\n for (let i = 0; i < pendingStartStreamBuffer.length; i++) {\n add(pendingStartStreamBuffer[i]);\n }\n }\n pendingStartStreamBuffer = [];\n pendingStartStreamCapture = false;\n shouldPauseSocket = false;\n pauseStateAudio = [];\n } else {\n if (shouldPauseSocket && !pendingStartStreamCapture) {\n pauseStateAudio = event.data;\n } else if (shouldPauseSocket && pendingStartStreamCapture) {\n pendingStartStreamBuffer.push(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 const amp = 0.0003 * 0x7fff;\n this.accumulator.push((Math.random() * 2 - 1) * amp);\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 socketUrl,\n enableLogs,\n isDebug,\n bufferSizeInterval,\n pausedBufferInterval,\n eosMessage,\n socketTimeoutInterval,\n shouldSendAudioDataSequence,\n reconnectAudioDuration,\n shouldPreIntialiseRecorder,\n shouldReadIntensity,\n switchToRegularSpeechProfile,\n echoCancellation,\n noiseSuppression,\n autoGainControl,\n heavyOp,\n onFinalResult,\n onPartialResult,\n onError,\n onStateChanged,\n onSessionEvent,\n onOtherResults,\n onSpeechResponse,\n onIntensity,\n onJobStatus,\n onMicReady,\n onWsStatusChange,\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 onJobStatus,\n bufferSizeInterval,\n switchToRegularSpeechProfile,\n onWsStatusChange,\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 this.echoCancellation = echoCancellation;\n this.noiseSuppression = noiseSuppression;\n this.autoGainControl = autoGainControl;\n this.micNeedsRecovery = false;\n this.trackEndedHandler = null;\n this.isRecovering = false;\n this._micReadyFired = false;\n this._micReadyFiredOnFirstRecovery = false;\n this._deviceChangeHandling = false;\n this.currentWsUrl = \"\";\n this.currentDuration = 0;\n this.deviceChangeHandler = null;\n this.onMicReady = onMicReady;\n this._originalDeviceId = null;\n this._originalDeviceLabel = null;\n if (this.shouldPreIntialiseRecorder) {\n this.InitialiseMediaStream(reconnectAudioDuration, socketUrl);\n }\n }\n\n async InitialiseMediaStream(duration, wsUrl) {\n this.currentDuration = duration;\n this.currentWsUrl = wsUrl;\n await this.createMediaStreamSourceNode();\n if (!this.source) {\n console.error(\"Error: unable to create source node\");\n return false;\n }\n await this.createProcessorNode();\n if (!this.processorNode) {\n console.error(\"Error: unable to create processor node\");\n return false;\n }\n this.source\n .connect(this.processorNode)\n .connect(this.audioContext.destination);\n this.log(\"AudioContext Sample Rate: \" + this.audioContext.sampleRate);\n\n if (wsUrl !== \"\") {\n this.executor.Start(duration, wsUrl, this.shouldPreIntialiseRecorder);\n }\n // if (this.audioContext && this.audioContext.state == \"running\") {\n // await this.audioContext.suspend();\n // }\n if (!this.deviceChangeHandler) {\n this.deviceChangeHandler = async () => {\n if (this._deviceChangeHandling) {\n return;\n }\n this._deviceChangeHandling = true;\n try {\n const track = this.audioStream?.getAudioTracks?.()[0];\n const trackInvalid = !track || track.readyState === \"ended\";\n\n if (trackInvalid) {\n this.micNeedsRecovery = true;\n\n await this.recoverAudioGraph();\n return;\n }\n\n const currentDeviceId =\n track.getSettings?.()?.deviceId ?? track.label;\n // this.log(\n // `Device change detected. Probing current device: \"${track.label}\"`,\n // );\n\n const currentDeviceActive =\n await isDeviceProducingAudio(currentDeviceId);\n\n if (!currentDeviceActive) {\n // this.log(\n // `Current device \"${track.label}\" appears silent/virtual. Searching for a real input device...`,\n // );\n this.micNeedsRecovery = true;\n\n const realDeviceId = await findFirstActiveAudioDevice(\n currentDeviceId,\n this.enableLogs,\n );\n\n if (realDeviceId) {\n this._preferredDeviceId = realDeviceId;\n } else {\n // this.log(\"No active audio input device found after device change\");\n this._preferredDeviceId = null;\n }\n await this.recoverAudioGraph();\n } else {\n // this.log(\n // `Current device \"${track.label}\" is producing audio — no switch needed`,\n // );\n }\n } finally {\n this._deviceChangeHandling = false;\n }\n };\n\n navigator.mediaDevices.addEventListener(\n \"devicechange\",\n this.deviceChangeHandler,\n );\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.InitialiseMediaStream(duration, wsUrl, false);\n } else if (this.shouldPreIntialiseRecorder) {\n this.executor.Send(RESUME_SOCKET_MSG);\n }\n\n if (this.IsMicrophoneMuted) {\n if (this.audioContext && this.audioContext.state == \"running\") {\n await this.audioContext.suspend();\n }\n // Stop all media tracks so the browser releases the mic and removes\n // the red recording indicator when the mic is muted at start.\n this.audioStream?.getTracks?.()?.forEach((t) => {\n try {\n t.stop();\n } catch {}\n });\n // Close the WebSocket that was just opened inside InitialiseMediaStream\n // so we don't leave a dangling connection when the mic is muted at start.\n this.executor.Send(CLOSE_MSG);\n this.onError(\n JSON.stringify({\n Type: \"ERROR\",\n Data: \"Microphone is muted.\",\n }),\n );\n return false;\n }\n\n this.onStateChanged(true);\n\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 const audioConstraints = {\n channelCount: CHANNEL_COUNT,\n noiseSuppression:\n this.noiseSuppression !== undefined\n ? this.noiseSuppression\n : NOISE_SUPPRESS_ENABLED,\n // sampleRate: SAMPLE_RATE,\n // sampleSize: BITS_PER_SAMPLE,\n };\n if (this.echoCancellation !== undefined) {\n audioConstraints.echoCancellation = this.echoCancellation;\n audioConstraints.googEchoCancellation = this.echoCancellation;\n }\n if (this.noiseSuppression !== undefined) {\n audioConstraints.googNoiseSuppression = this.noiseSuppression;\n }\n if (this.autoGainControl !== undefined) {\n audioConstraints.autoGainControl = this.autoGainControl;\n audioConstraints.googAutoGainControl = this.autoGainControl;\n }\n\n if (this._preferredDeviceId) {\n audioConstraints.deviceId = { exact: this._preferredDeviceId };\n }\n this.audioStream = await navigator.mediaDevices.getUserMedia({\n audio: audioConstraints,\n });\n if (!this.audioContext || this.audioContext.state === \"closed\") {\n this.audioContext = new AudioContext();\n }\n this.source = this.audioContext.createMediaStreamSource(this.audioStream);\n const track = this.audioStream.getAudioTracks()[0];\n const acquiredDeviceId = track.getSettings?.()?.deviceId ?? \"\";\n const acquiredLabel = track.label ?? \"\";\n if (!this._originalDeviceId) {\n this._originalDeviceId = acquiredDeviceId;\n this._originalDeviceLabel = acquiredLabel;\n }\n\n this.trackEndedHandler = () => {\n this.log(\"Microphone disconnected\");\n\n this.micNeedsRecovery = true;\n\n this.onError(\n JSON.stringify({\n Type: \"ERROR\",\n Data: \"Audio track ended. Possibly the mic was unplugged.\",\n }),\n );\n };\n\n track.addEventListener(\"ended\", this.trackEndedHandler);\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 } else if (e.name === \"NotReadableError\") {\n errMessage = \"Microphone is being used by another application\";\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.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.onStateChanged(false);\n this.isPaused = true;\n this.isStreaming = false;\n }\n\n async ResumeStream() {\n const track = this.audioStream?.getAudioTracks?.()[0];\n\n const trackEnded = !track || track.readyState === \"ended\";\n\n if (trackEnded || this.micNeedsRecovery) {\n await this.recoverAudioGraph();\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;\n }\n if (this.shouldPreIntialiseRecorder) {\n this.processorNode.port.postMessage(RESUME_SOCKET_MSG);\n this.executor.Send(RESUME_SOCKET_MSG);\n } else {\n if (this.audioContext.state === \"suspended\") {\n await this.audioContext.resume();\n }\n this.log(\"Stream resumed...\");\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 const track = this.audioStream?.getAudioTracks?.()[0];\n\n if (!track) {\n return true;\n }\n\n return track.muted || track.readyState === \"ended\";\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.isPaused = false;\n this.closeSocketWithoutEOS = !shouldSendEOS;\n // Remove device-change listener so no recovery is triggered after stop\n if (this.deviceChangeHandler) {\n navigator.mediaDevices.removeEventListener(\n \"devicechange\",\n this.deviceChangeHandler,\n );\n this.deviceChangeHandler = null;\n }\n // Remove track-ended listener using the stored reference\n const track = this.audioStream?.getAudioTracks?.()[0];\n if (track && this.trackEndedHandler) {\n track.removeEventListener(\"ended\", this.trackEndedHandler);\n }\n this.trackEndedHandler = null;\n // Stop all media tracks so the browser releases the mic (removes red icon)\n this.audioStream?.getTracks?.()?.forEach((t) => {\n try {\n t.stop();\n } catch {}\n });\n // message sent to worklet-thread\n this.processorNode?.port?.postMessage(STOP_MSG);\n }\n\n async recoverAudioGraph() {\n if (this.isRecovering) {\n return;\n }\n\n this.isRecovering = true;\n\n try {\n // this.log(\"Recovering audio graph...\");\n\n // Remove old track-ended listener to prevent spurious error during recovery\n const oldTrack = this.audioStream?.getAudioTracks?.()?.[0];\n if (oldTrack && this.trackEndedHandler) {\n oldTrack.removeEventListener(\"ended\", this.trackEndedHandler);\n this.trackEndedHandler = null;\n }\n\n // stop old track\n this.audioStream?.getTracks()?.forEach((t) => {\n try {\n t.stop();\n } catch {}\n });\n\n // disconnect source\n try {\n this.source?.disconnect();\n } catch {}\n\n // disconnect processor\n try {\n this.processorNode?.disconnect();\n } catch {}\n\n // recreate media stream ONLY\n await this.createMediaStreamSourceNode();\n\n if (!this.source) {\n throw new Error(\"Failed to recreate source\");\n }\n\n // AudioContext may become closed/suspended\n if (!this.audioContext || this.audioContext.state === \"closed\") {\n this.audioContext = new AudioContext();\n }\n\n if (this.audioContext.state === \"suspended\") {\n await this.audioContext.resume();\n }\n\n // IMPORTANT:\n // recreate worklet node\n await this.createProcessorNode();\n\n // reconnect graph\n this.source\n .connect(this.processorNode)\n .connect(this.audioContext.destination);\n\n // If the recorder is paused or not actively streaming, suspend the\n // AudioContext immediately after rebuilding the graph so the mic does\n // not start capturing audio without an explicit start/resume call.\n if (!this.isStreaming || this.isPaused) {\n if (this.audioContext.state === \"running\") {\n await this.audioContext.suspend();\n }\n }\n this.micNeedsRecovery = false;\n const recoveredTrack = this.audioStream?.getAudioTracks?.()[0];\n const recoveredDeviceId = recoveredTrack?.getSettings?.()?.deviceId ?? \"\";\n const recoveredTrackUsable =\n recoveredTrack && recoveredTrack.readyState === \"live\";\n const devices = await navigator.mediaDevices.enumerateDevices();\n\n const originalDevicePresent = devices.some(\n (d) =>\n d.kind === \"audioinput\" &&\n d.label &&\n d.label === this._originalDeviceLabel,\n );\n\n const recoveredDeviceActive = recoveredDeviceId && recoveredTrackUsable;\n if (this.isPaused && (!this.IsMicrophoneMuted || originalDevicePresent)) {\n if (this.onMicReady && !this._micReadyFiredOnFirstRecovery) {\n // this._micReadyFired = true;\n this._micReadyFiredOnFirstRecovery = true;\n // setTimeout(() => {\n // this._micReadyFired = false;\n // }, 300);\n this.onMicReady();\n }\n }\n // this.log(\"Audio graph recovery completed\");\n } catch (e) {\n console.error(\"Recovery failed\", e);\n\n // this.onError(\n // JSON.stringify({\n // Type: \"ERROR\",\n // Data: \"Failed to recover microphone\",\n // }),\n // );\n } finally {\n this.isRecovering = false;\n }\n }\n\n IntentStartStream() {\n this.executor.Send(\"INTENT_START_STREAM\");\n }\n\n cleanup() {\n // Uncomment to stop recorded audio\n // this.source.stop();\n // Uncomment to stop microphone audio\n this.audioStream?.getTracks()?.forEach((track) => {\n try {\n track.stop();\n } catch {}\n });\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\n// ---------------------------------------------------------------------------\n// Helpers — module-level, not part of the Streamer class\n// ---------------------------------------------------------------------------\n\n/**\n * Opens a temporary getUserMedia stream for the given deviceId, runs it\n * through an AnalyserNode for `durationMs` milliseconds, and resolves with\n * `true` if the measured RMS energy exceeds `silenceThreshold`.\n *\n * Virtual / loopback devices (e.g. Splashtop Remote Sound) are connected but\n * produce only silence, so their RMS stays at or near 0.\n *\n * @param {string} deviceId\n * @param {number} [durationMs=350] How long to sample (ms)\n * @param {number} [silenceThreshold=0.001] RMS below this is considered silent\n * @returns {Promise<boolean>}\n */\nasync function isDeviceProducingAudio(\n deviceId,\n durationMs = 350,\n silenceThreshold = 0.01,\n) {\n let stream = null;\n let audioCtx = null;\n try {\n stream = await navigator.mediaDevices.getUserMedia({\n audio: { deviceId: { exact: deviceId }, channelCount: 1 },\n });\n audioCtx = new AudioContext();\n const source = audioCtx.createMediaStreamSource(stream);\n const analyser = audioCtx.createAnalyser();\n analyser.fftSize = 256;\n source.connect(analyser);\n\n const bufferLength = analyser.frequencyBinCount;\n const dataArray = new Float32Array(bufferLength);\n\n return await new Promise((resolve) => {\n let maxRms = 0;\n const startTime = performance.now();\n\n function sample() {\n analyser.getFloatTimeDomainData(dataArray);\n let sumSq = 0;\n for (let i = 0; i < bufferLength; i++) {\n sumSq += dataArray[i] * dataArray[i];\n }\n const rms = Math.sqrt(sumSq / bufferLength);\n if (rms > maxRms) maxRms = rms;\n\n if (performance.now() - startTime < durationMs) {\n requestAnimationFrame(sample);\n } else {\n resolve(maxRms > silenceThreshold);\n }\n }\n\n requestAnimationFrame(sample);\n });\n } catch {\n // If we cannot open the device at all, treat it as inactive\n return false;\n } finally {\n stream?.getTracks().forEach((t) => t.stop());\n if (audioCtx && audioCtx.state !== \"closed\") {\n audioCtx.close().catch(() => {});\n }\n }\n}\n\n/**\n * Enumerates all audioinput devices, skips `excludeDeviceId`, and returns the\n * deviceId of the first one that passes the `isDeviceProducingAudio` probe.\n * Returns `null` if none are found.\n *\n * @param {string} excludeDeviceId The silent/virtual device to skip\n * @param {boolean} [enableLogs=false]\n * @returns {Promise<string|null>}\n */\nasync function findFirstActiveAudioDevice(excludeDeviceId, enableLogs = false) {\n let devices;\n try {\n devices = await navigator.mediaDevices.enumerateDevices();\n } catch {\n return null;\n }\n\n const audioInputs = devices.filter(\n (d) => d.kind === \"audioinput\" && d.deviceId !== excludeDeviceId,\n );\n\n for (const device of audioInputs) {\n // if (enableLogs) {\n // console.log(\n // `Augnito: Probing candidate device \"${device.label}\" (${device.deviceId})`,\n // );\n // }\n const active = await isDeviceProducingAudio(device.deviceId);\n if (active) {\n // if (enableLogs) {\n // console.log(\n // `Augnito: Found active device \"${device.label}\" (${device.deviceId})`,\n // );\n // }\n return device.deviceId;\n }\n }\n\n return null;\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 reconnectAudioDuration: 0,\n shouldPreIntialiseRecorder: false,\n shouldReadIntensity: false,\n debounceDelay: 300,\n switchToRegularSpeechProfile: false,\n echoCancellation: undefined,\n noiseSuppression: undefined,\n autoGainControl: undefined,\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.pendingStartStream = 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.reconnectAudioDuration = config.reconnectAudioDuration ?? 0;\n this.shouldPreIntialiseRecorder = config.shouldPreIntialiseRecorder;\n this.switchToRegularSpeechProfile =\n config.switchToRegularSpeechProfile ?? false;\n this._echoCancellation = config.echoCancellation;\n this._noiseSuppression = config.noiseSuppression;\n this._autoGainControl = config.autoGainControl;\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 this.needsDispose = false;\n // this.wsReadyState = \"DISCONNECTED\";\n AugnitoRecorder.instance = this;\n }\n\n get echoCancellation() {\n return this._echoCancellation;\n }\n set echoCancellation(value) {\n this._echoCancellation = value;\n if (this.streamer) this.streamer.echoCancellation = value;\n }\n\n get noiseSuppression() {\n return this._noiseSuppression;\n }\n set noiseSuppression(value) {\n this._noiseSuppression = value;\n if (this.streamer) this.streamer.noiseSuppression = value;\n }\n\n get autoGainControl() {\n return this._autoGainControl;\n }\n set autoGainControl(value) {\n this._autoGainControl = value;\n if (this.streamer) this.streamer.autoGainControl = value;\n }\n\n initialiseStreamer() {\n this.streamer = new Streamer(\n this.WebsocketURL,\n this.enableLogs,\n this.isDebug,\n this.bufferInterval,\n this.pausedBufferInterval,\n this.eosMessage,\n this.socketTimeoutInterval,\n this.shouldSendAudioDataSequence,\n this.reconnectAudioDuration,\n this.shouldPreIntialiseRecorder,\n this.shouldReadIntensity,\n this.switchToRegularSpeechProfile,\n this._echoCancellation,\n this._noiseSuppression,\n this._autoGainControl,\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 this.onJobStatusCallback.bind(this),\n this.onMicReadyCallback.bind(this),\n this.onWsStatusChangeCallback.bind(this),\n );\n }\n\n updateIntentStartStream() {\n this.pendingStartStream = true;\n this.streamer?.IntentStartStream();\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 setTimeout(() => {\n if (this.needsDispose) {\n this.needsDispose = false;\n return;\n }\n this.initialiseStreamer();\n this.streamerNotStarted = true;\n }, 500);\n }\n }\n }\n\n getBlob() {\n const audioBlob = this.streamer.getBlob();\n this.log(\"Blob Sent...\");\n return audioBlob;\n }\n\n /**\n * Returns the current status of the WebSocket connection as reported\n * directly by the Worker. The value is kept up-to-date in real time:\n * the Worker posts a status message on every ws.onopen, ws.onclose and\n * ws.onerror event, so even an unexpected drop (e.g. internet going\n * offline) is reflected here immediately.\n *\n * Possible values:\n * - \"OPEN\" – WebSocket is connected and open.\n * - \"CLOSED\" – WebSocket has been closed (including unexpected drops).\n * - \"ERROR\" – WebSocket encountered an error.\n * - \"DISCONNECTED\" – No streamer / Worker has been started yet.\n *\n * @returns {\"OPEN\" | \"CLOSED\" | \"ERROR\" | \"DISCONNECTED\"}\n */\n // getWebSocketStatus() {\n // return this.wsReadyState;\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 this.needsDispose = true;\n this.streamer?.StopStream(false);\n this.streamer = null;\n // this.wsReadyState = \"DISCONNECTED\";\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 onJobStatusCallback(status) {\n if (this.onJobStatus) {\n this.onJobStatus(status);\n }\n }\n onMicReadyCallback() {\n if (this.onMicReady) {\n this.onMicReady();\n }\n }\n\n onWsStatusChangeCallback(statusData) {\n // statusData is in the form \"WS_STATUS:OPEN\" | \"WS_STATUS:CLOSED\" | \"WS_STATUS:ERROR\"\n if (this.onSocketStatusChange) {\n this.onSocketStatusChange(statusData);\n console.log(\n \"onWsStatusChangeCallback called with statusData:\",\n statusData,\n );\n }\n // this.wsReadyState = state;\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","INTENT_START_STREAM","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","WS_STATUS_MSG","Executor","enableLogs","eosMessage","socketTimeoutInterval","shouldSendAudioDataSequence","onFinalResult","onPartialResult","onError","onSessionEvent","onOtherResults","onSpeechResponse","onJobStatus","bufferSizeInterval","switchToRegularSpeechProfile","onWsStatusChange","_classCallCheck","worker","onFinalResultCallback","onErrorCallback","onPartialResultCallback","onSessionEventCallback","onOtherResultsCallback","onSpeechResponseCallback","onJobStatusCallback","onWsStatusChangeCallback","packetSeqId","audioDuration","heavyOp","idleLoop","lastSent","switchToRegularSpeech","_createClass","key","value","Start","duration","wsUrl","shouldPauseSocketInitially","_this","workerScript","concat","WorkerBlob","toString","JSON","stringify","Worker","URL","createObjectURL","Blob","type","onmessage","event","console","log","data","eventData","status","createAudioPacketHeader","isLastPacket","Math","ceil","headerSize","buffer","ArrayBuffer","view","DataView","i","setUint8","charCodeAt","setBigInt64","BigInt","appendAudioData","arrayBuffer","audioDataBytes","totalLength","byteLength","combinedBuffer","combinedArray","Uint8Array","set","Send","Date","_this$worker","postMessage","_this$worker2","binaryHeader","_this$worker3","_this$worker4","_this$worker5","_this$worker6","_this$worker7","audioData","undefined","_this$worker8","doneMessage","closeMessage","connectionRetryTimeout","keepAliveTimeout","healthcheckInterval","consumeInterval","idleThreadInterval","pauseSocketMessage","resumeSocketMessage","startListeningClickedMessage","wsStatusMessage","lastConnect","lastDataSent","lastDataReceived","lastPingReceived","queue","pauseStateAudio","pendingStartStreamBuffer","pendingStartStreamCapture","sentPacketsQueue","ws","isDone","consumer","healthCheck","retrySentPacket","packetId","shouldNotReconnect","JobID","shouldPauseSocket","initConnect","WebSocket","onopen","self","length","message","operate","onerror","error","onclose","cleanup","send","readyState","OPEN","currentTime","warn","add","push","parse","Type","metaResponse","Event","Result","Final","outputText","Transcript","filter","x","packetNumber","Index","Data","toUpperCase","clearInterval","e","close","setInterval","retryPacket","packetData","res","shift","isSent","unshift","Number","getBigInt64","sentPacket","isSocketClosingTime","worklet","Streamer","socketUrl","isDebug","pausedBufferInterval","reconnectAudioDuration","shouldPreIntialiseRecorder","shouldReadIntensity","echoCancellation","noiseSuppression","autoGainControl","onStateChanged","onIntensity","onMicReady","audioContext","audioStream","executor","HeavyOp","source","processorNode","isPaused","isStreaming","closeSocketWithoutEOS","micNeedsRecovery","trackEndedHandler","isRecovering","_micReadyFired","_micReadyFiredOnFirstRecovery","_deviceChangeHandling","currentWsUrl","currentDuration","deviceChangeHandler","_originalDeviceId","_originalDeviceLabel","InitialiseMediaStream","_InitialiseMediaStream","_asyncToGenerator","_regeneratorRuntime","mark","_callee2","wrap","_callee2$","_context2","prev","next","createMediaStreamSourceNode","abrupt","createProcessorNode","connect","destination","sampleRate","_callee","_this$audioStream","_this$audioStream$get","_track$getSettings$de","_track$getSettings","track","trackInvalid","currentDeviceId","currentDeviceActive","realDeviceId","_callee$","_context","getAudioTracks","call","recoverAudioGraph","getSettings","deviceId","label","isDeviceProducingAudio","sent","findFirstActiveAudioDevice","_preferredDeviceId","finish","stop","navigator","mediaDevices","addEventListener","_x","_x2","apply","arguments","_StartStream","_callee3","_this$audioStream2","_this$audioStream2$ge","_callee3$","_context3","IsMicrophoneMuted","state","suspend","getTracks","forEach","t","_unused","StartStream","_x3","_x4","_createBufferedSourceNode","_callee4","audioBuffer","_callee4$","_context4","loadAudio","createBufferSource","loop","start","createBufferedSourceNode","_createMediaStreamSourceNode","_callee5","_this2","_track$getSettings$de2","_track$getSettings2","_track$label","audioConstraints","acquiredDeviceId","acquiredLabel","errMessage","_callee5$","_context5","channelCount","googEchoCancellation","googNoiseSuppression","googAutoGainControl","exact","getUserMedia","audio","AudioContext","createMediaStreamSource","t0","name","_loadAudio","_callee6","response","_callee6$","_context6","fetch","decodeAudioData","_createProcessorNode","_callee7","_this3","_this$shouldReadInten","sampleRateParam","bufferSizeIntervalParam","pausedBufferIntervalParam","shouldReadIntensityParam","_callee7$","_context7","audioWorklet","addModule","encodeURIComponent","AudioWorkletNode","parameters","get","setValueAtTime","port","_event$data","saveAudio","_this3$onIntensity","Int16Array","element","_PauseStream","_callee8","_callee8$","_context8","PauseStream","_ResumeStream","_callee9","_this$audioStream3","_this$audioStream3$ge","trackEnded","_callee9$","_context9","resume","ResumeStream","_this$audioStream4","_this$audioStream4$ge","muted","_StopStream","_callee10","shouldSendEOS","_this$audioContext","_this$audioStream5","_this$audioStream5$ge","_this$audioStream6","_this$audioStream6$ge","_this$processorNode","_this$audioContext2","_callee10$","_context10","removeEventListener","_unused2","StopStream","_x5","_recoverAudioGraph","_callee11","_this4","_this$audioStream7","_this$audioStream7$ge","_this$audioStream8","_this$audioStream9","_this$audioStream9$ge","_recoveredTrack$getSe","_recoveredTrack$getSe2","oldTrack","_this$source","_this$processorNode2","recoveredTrack","recoveredDeviceId","devices","originalDevicePresent","_callee11$","_context11","_unused3","disconnect","_unused4","_unused5","Error","recoveredTrackUsable","enumerateDevices","some","d","kind","IntentStartStream","_this$audioStream10","_unused6","wavView","encodeWAV","url","getBlob","audioBlob","index","setInt16","dataLength","fileSize","setUint32","setUint16","setInt8","getInt8","toLocaleTimeString","_x6","_isDeviceProducingAudio","_callee12","durationMs","silenceThreshold","stream","audioCtx","analyser","bufferLength","dataArray","_stream","_args12","_callee12$","_context12","createAnalyser","fftSize","frequencyBinCount","Float32Array","Promise","resolve","maxRms","startTime","performance","now","sample","getFloatTimeDomainData","sumSq","rms","sqrt","requestAnimationFrame","catch","_x7","_findFirstActiveAudioDevice","_callee13","excludeDeviceId","audioInputs","_iterator","_step","device","active","_callee13$","_context13","_createForOfIteratorHelper","s","n","done","t1","f","AugnitoRecorder","_config$serverURL","_config$reconnectAudi","_config$switchToRegul","_config$debounceDelay","config","serverURL","bufferInterval","EOS_Message","debounceDelay","instance","WebsocketURL","streamer","streamerNotStarted","isStreamerStarting","pendingStartStream","_echoCancellation","_noiseSuppression","_autoGainControl","initialiseStreamer","delay","toggleStartStopAudioStream","debounce","bind","togglePauseResumeAudioStream","needsDispose","onStateChangedCallback","onOtherResultCallback","onIntensityCallback","onMicReadyCallback","updateIntentStartStream","_this$streamer","startAudio","IsPaused","resumeAudio","pauseAudio","stopAudio","_startAudio","_this$streamer2","forceStopForPausedState","IsStreaming","_this$streamer3","setTimeout","showLogCallback","dispose","_this$streamer4","isRecording","intensity","errorMessage","hype","recipe","statusData","onSocketStatusChange","showLog","fn","timeoutId","_len","args","Array","_key","clearTimeout"],"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/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 INTENT_START_STREAM = \"INTENT_START_STREAM\";\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;\nexport const WS_STATUS_MSG = \"WS_STATUS\";\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 INTENT_START_STREAM,\n WS_STATUS_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 onJobStatus,\n bufferSizeInterval,\n switchToRegularSpeechProfile,\n onWsStatusChange,\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.onJobStatusCallback = onJobStatus;\n this.onWsStatusChangeCallback = onWsStatusChange;\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, shouldPauseSocketInitially) {\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 KEEP_ALIVE_TIMEOUT,\n )}, ${JSON.stringify(HEALTHCHECK_INTERVAL)}, ${JSON.stringify(\n CONSUME_INTERVAL,\n )}, ${JSON.stringify(IDLE_THREAD_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(INTENT_START_STREAM)}, ${JSON.stringify(\n this.switchToRegularSpeech,\n )}, ${JSON.stringify(shouldPauseSocketInitially)}, ${JSON.stringify(\n this.heavyOp,\n )}, ${JSON.stringify(WS_STATUS_MSG)});\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 == \"jobstatus\") {\n this.onJobStatusCallback(eventData.data.status);\n } else if (eventData.type == \"speechResponse\")\n this.onSpeechResponseCallback(eventData.data);\n else if (eventData.type == \"wsStatus\")\n this.onWsStatusChangeCallback(eventData.data);\n };\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 } 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 } 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 == INTENT_START_STREAM) {\n this.worker?.postMessage(INTENT_START_STREAM);\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 keepAliveTimeout,\n healthcheckInterval,\n consumeInterval,\n idleThreadInterval,\n wsUrl,\n enableLogs,\n shouldSendAudioDataSequence,\n pauseSocketMessage,\n resumeSocketMessage,\n startListeningClickedMessage,\n switchToRegularSpeechProfile,\n shouldPauseSocketInitially,\n heavyOp,\n wsStatusMessage,\n) {\n let lastConnect;\n var lastDataSent;\n var lastDataReceived;\n let lastPingReceived;\n let queue = [];\n let pauseStateAudio;\n let pendingStartStreamBuffer = [];\n let pendingStartStreamCapture = false;\n let sentPacketsQueue = [];\n let ws;\n let isDone = false;\n let consumer;\n let healthCheck;\n let idleLoop;\n let retrySentPacket = false;\n let packetId = 0;\n let shouldNotReconnect = false;\n let JobID = \"\";\n let shouldPauseSocket = shouldPauseSocketInitially;\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 - \" +\n JSON.stringify(event),\n );\n }\n self.postMessage({ type: \"wsStatus\", data: \"OPEN\" });\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({ type: \"wsStatus\", data: \"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 self.postMessage({ type: \"wsStatus\", data: \"CLOSED\" });\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 if (\n typeof data.Data === \"string\" &&\n data.Data.toUpperCase() === \"RECEIVED_EOS\"\n ) {\n isDone = true;\n clearInterval(idleLoop);\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 if (data.Type == \"STATUS\") {\n self.postMessage({\n type: \"jobstatus\",\n data: {\n status: message.data,\n },\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 clearInterval(idleLoop);\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 if (!(data instanceof ArrayBuffer)) {\n continue;\n }\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 idleLoop = setInterval(() => {\n if (ws && ws.readyState === WebSocket.OPEN) {\n const currentTime = +new Date();\n if (lastDataSent && currentTime - lastDataSent > keepAliveTimeout) {\n if (enableLogs) {\n console.warn(\n `No data sent since more than ${\n keepAliveTimeout / 1000\n } secs, closing time...`,\n );\n }\n ws.close();\n }\n }\n }, idleThreadInterval);\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 === startListeningClickedMessage) {\n pendingStartStreamCapture = true;\n } else if (event.data === resumeSocketMessage) {\n if (pauseStateAudio instanceof ArrayBuffer) {\n add(pauseStateAudio);\n }\n if (pendingStartStreamBuffer.length > 0) {\n for (let i = 0; i < pendingStartStreamBuffer.length; i++) {\n add(pendingStartStreamBuffer[i]);\n }\n }\n pendingStartStreamBuffer = [];\n pendingStartStreamCapture = false;\n shouldPauseSocket = false;\n pauseStateAudio = [];\n } else {\n if (shouldPauseSocket && !pendingStartStreamCapture) {\n pauseStateAudio = event.data;\n } else if (shouldPauseSocket && pendingStartStreamCapture) {\n pendingStartStreamBuffer.push(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 const amp = 0.0003 * 0x7fff;\n this.accumulator.push((Math.random() * 2 - 1) * amp);\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 socketUrl,\n enableLogs,\n isDebug,\n bufferSizeInterval,\n pausedBufferInterval,\n eosMessage,\n socketTimeoutInterval,\n shouldSendAudioDataSequence,\n reconnectAudioDuration,\n shouldPreIntialiseRecorder,\n shouldReadIntensity,\n switchToRegularSpeechProfile,\n echoCancellation,\n noiseSuppression,\n autoGainControl,\n heavyOp,\n onFinalResult,\n onPartialResult,\n onError,\n onStateChanged,\n onSessionEvent,\n onOtherResults,\n onSpeechResponse,\n onIntensity,\n onJobStatus,\n onMicReady,\n onWsStatusChange,\n onAudioMetadata,\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 onJobStatus,\n bufferSizeInterval,\n switchToRegularSpeechProfile,\n onWsStatusChange,\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 this.echoCancellation = echoCancellation;\n this.noiseSuppression = noiseSuppression;\n this.autoGainControl = autoGainControl;\n this.micNeedsRecovery = false;\n this.trackEndedHandler = null;\n this.isRecovering = false;\n this._micReadyFired = false;\n this._micReadyFiredOnFirstRecovery = false;\n this._deviceChangeHandling = false;\n this.currentWsUrl = \"\";\n this.currentDuration = 0;\n this.deviceChangeHandler = null;\n this.onMicReady = onMicReady;\n this.onAudioMetadata = onAudioMetadata;\n this._originalDeviceId = null;\n this._originalDeviceLabel = null;\n if (this.shouldPreIntialiseRecorder) {\n this.InitialiseMediaStream(reconnectAudioDuration, socketUrl);\n }\n }\n\n async InitialiseMediaStream(duration, wsUrl) {\n this.currentDuration = duration;\n this.currentWsUrl = wsUrl;\n await this.createMediaStreamSourceNode();\n if (!this.source) {\n console.error(\"Error: unable to create source node\");\n return false;\n }\n await this.createProcessorNode();\n if (!this.processorNode) {\n console.error(\"Error: unable to create processor node\");\n return false;\n }\n this.source\n .connect(this.processorNode)\n .connect(this.audioContext.destination);\n this.log(\"AudioContext Sample Rate: \" + this.audioContext.sampleRate);\n\n if (wsUrl !== \"\") {\n this.executor.Start(duration, wsUrl, this.shouldPreIntialiseRecorder);\n }\n // if (this.audioContext && this.audioContext.state == \"running\") {\n // await this.audioContext.suspend();\n // }\n if (!this.deviceChangeHandler) {\n this.deviceChangeHandler = async () => {\n if (this._deviceChangeHandling) {\n return;\n }\n this._deviceChangeHandling = true;\n try {\n const track = this.audioStream?.getAudioTracks?.()[0];\n const trackInvalid = !track || track.readyState === \"ended\";\n\n if (trackInvalid) {\n this.micNeedsRecovery = true;\n\n await this.recoverAudioGraph();\n return;\n }\n\n const currentDeviceId =\n track.getSettings?.()?.deviceId ?? track.label;\n // this.log(\n // `Device change detected. Probing current device: \"${track.label}\"`,\n // );\n\n const currentDeviceActive =\n await isDeviceProducingAudio(currentDeviceId);\n\n if (!currentDeviceActive) {\n // this.log(\n // `Current device \"${track.label}\" appears silent/virtual. Searching for a real input device...`,\n // );\n this.micNeedsRecovery = true;\n\n const realDeviceId = await findFirstActiveAudioDevice(\n currentDeviceId,\n this.enableLogs,\n );\n\n if (realDeviceId) {\n this._preferredDeviceId = realDeviceId;\n } else {\n // this.log(\"No active audio input device found after device change\");\n this._preferredDeviceId = null;\n }\n await this.recoverAudioGraph();\n } else {\n // this.log(\n // `Current device \"${track.label}\" is producing audio — no switch needed`,\n // );\n }\n } finally {\n this._deviceChangeHandling = false;\n }\n };\n\n navigator.mediaDevices.addEventListener(\n \"devicechange\",\n this.deviceChangeHandler,\n );\n }\n const mic = this.audioStream?.getAudioTracks?.()[0];\n this.sendAudioMetadata(mic);\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.InitialiseMediaStream(duration, wsUrl, false);\n } else if (this.shouldPreIntialiseRecorder) {\n this.executor.Send(RESUME_SOCKET_MSG);\n }\n\n if (this.IsMicrophoneMuted) {\n if (this.audioContext && this.audioContext.state == \"running\") {\n await this.audioContext.suspend();\n }\n // Stop all media tracks so the browser releases the mic and removes\n // the red recording indicator when the mic is muted at start.\n this.audioStream?.getTracks?.()?.forEach((t) => {\n try {\n t.stop();\n } catch {}\n });\n // Close the WebSocket that was just opened inside InitialiseMediaStream\n // so we don't leave a dangling connection when the mic is muted at start.\n this.executor.Send(CLOSE_MSG);\n this.onError(\n JSON.stringify({\n Type: \"ERROR\",\n Data: \"Microphone is muted.\",\n }),\n );\n return false;\n }\n\n this.onStateChanged(true);\n\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 const audioConstraints = {\n channelCount: CHANNEL_COUNT,\n noiseSuppression:\n this.noiseSuppression !== undefined\n ? this.noiseSuppression\n : NOISE_SUPPRESS_ENABLED,\n // sampleRate: SAMPLE_RATE,\n // sampleSize: BITS_PER_SAMPLE,\n };\n if (this.echoCancellation !== undefined) {\n audioConstraints.echoCancellation = this.echoCancellation;\n audioConstraints.googEchoCancellation = this.echoCancellation;\n }\n if (this.noiseSuppression !== undefined) {\n audioConstraints.googNoiseSuppression = this.noiseSuppression;\n }\n if (this.autoGainControl !== undefined) {\n audioConstraints.autoGainControl = this.autoGainControl;\n audioConstraints.googAutoGainControl = this.autoGainControl;\n }\n\n if (this._preferredDeviceId) {\n audioConstraints.deviceId = { exact: this._preferredDeviceId };\n }\n this.audioStream = await navigator.mediaDevices.getUserMedia({\n audio: audioConstraints,\n });\n if (!this.audioContext || this.audioContext.state === \"closed\") {\n this.audioContext = new AudioContext();\n }\n this.source = this.audioContext.createMediaStreamSource(this.audioStream);\n const track = this.audioStream.getAudioTracks()[0];\n const acquiredDeviceId = track.getSettings?.()?.deviceId ?? \"\";\n const acquiredLabel = track.label ?? \"\";\n if (!this._originalDeviceId) {\n this._originalDeviceId = acquiredDeviceId;\n this._originalDeviceLabel = acquiredLabel;\n }\n\n this.trackEndedHandler = () => {\n this.log(\"Microphone disconnected\");\n\n this.micNeedsRecovery = true;\n\n this.onError(\n JSON.stringify({\n Type: \"ERROR\",\n Data: \"Audio track ended. Possibly the mic was unplugged.\",\n }),\n );\n };\n\n track.addEventListener(\"ended\", this.trackEndedHandler);\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 } else if (e.name === \"NotReadableError\") {\n errMessage = \"Microphone is being used by another application\";\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.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.onStateChanged(false);\n this.isPaused = true;\n this.isStreaming = false;\n }\n\n async ResumeStream() {\n const track = this.audioStream?.getAudioTracks?.()[0];\n\n const trackEnded = !track || track.readyState === \"ended\";\n\n if (trackEnded || this.micNeedsRecovery) {\n await this.recoverAudioGraph();\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;\n }\n if (this.shouldPreIntialiseRecorder) {\n this.processorNode.port.postMessage(RESUME_SOCKET_MSG);\n this.executor.Send(RESUME_SOCKET_MSG);\n } else {\n if (this.audioContext.state === \"suspended\") {\n await this.audioContext.resume();\n }\n this.log(\"Stream resumed...\");\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 const track = this.audioStream?.getAudioTracks?.()[0];\n\n if (!track) {\n return true;\n }\n\n return track.muted || track.readyState === \"ended\";\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.isPaused = false;\n this.closeSocketWithoutEOS = !shouldSendEOS;\n // Remove device-change listener so no recovery is triggered after stop\n if (this.deviceChangeHandler) {\n navigator.mediaDevices.removeEventListener(\n \"devicechange\",\n this.deviceChangeHandler,\n );\n this.deviceChangeHandler = null;\n }\n // Remove track-ended listener using the stored reference\n const track = this.audioStream?.getAudioTracks?.()[0];\n if (track && this.trackEndedHandler) {\n track.removeEventListener(\"ended\", this.trackEndedHandler);\n }\n this.trackEndedHandler = null;\n // Stop all media tracks so the browser releases the mic (removes red icon)\n this.audioStream?.getTracks?.()?.forEach((t) => {\n try {\n t.stop();\n } catch {}\n });\n // message sent to worklet-thread\n this.processorNode?.port?.postMessage(STOP_MSG);\n }\n\n async recoverAudioGraph() {\n if (this.isRecovering) {\n return;\n }\n\n this.isRecovering = true;\n\n try {\n // this.log(\"Recovering audio graph...\");\n\n // Remove old track-ended listener to prevent spurious error during recovery\n const oldTrack = this.audioStream?.getAudioTracks?.()?.[0];\n if (oldTrack && this.trackEndedHandler) {\n oldTrack.removeEventListener(\"ended\", this.trackEndedHandler);\n this.trackEndedHandler = null;\n }\n\n // stop old track\n this.audioStream?.getTracks()?.forEach((t) => {\n try {\n t.stop();\n } catch {}\n });\n\n // disconnect source\n try {\n this.source?.disconnect();\n } catch {}\n\n // disconnect processor\n try {\n this.processorNode?.disconnect();\n } catch {}\n\n // recreate media stream ONLY\n await this.createMediaStreamSourceNode();\n\n if (!this.source) {\n throw new Error(\"Failed to recreate source\");\n }\n\n // AudioContext may become closed/suspended\n if (!this.audioContext || this.audioContext.state === \"closed\") {\n this.audioContext = new AudioContext();\n }\n\n if (this.audioContext.state === \"suspended\") {\n await this.audioContext.resume();\n }\n\n // IMPORTANT:\n // recreate worklet node\n await this.createProcessorNode();\n\n // reconnect graph\n this.source\n .connect(this.processorNode)\n .connect(this.audioContext.destination);\n\n // If the recorder is paused or not actively streaming, suspend the\n // AudioContext immediately after rebuilding the graph so the mic does\n // not start capturing audio without an explicit start/resume call.\n if (!this.isStreaming || this.isPaused) {\n if (this.audioContext.state === \"running\") {\n await this.audioContext.suspend();\n }\n }\n this.micNeedsRecovery = false;\n const recoveredTrack = this.audioStream?.getAudioTracks?.()[0];\n const recoveredDeviceId = recoveredTrack?.getSettings?.()?.deviceId ?? \"\";\n const recoveredTrackUsable =\n recoveredTrack && recoveredTrack.readyState === \"live\";\n const devices = await navigator.mediaDevices.enumerateDevices();\n\n const originalDevicePresent = devices.some(\n (d) =>\n d.kind === \"audioinput\" &&\n d.label &&\n d.label === this._originalDeviceLabel,\n );\n\n const recoveredDeviceActive = recoveredDeviceId && recoveredTrackUsable;\n if (this.isPaused && (!this.IsMicrophoneMuted || originalDevicePresent)) {\n if (this.onMicReady && !this._micReadyFiredOnFirstRecovery) {\n // this._micReadyFired = true;\n this._micReadyFiredOnFirstRecovery = true;\n // setTimeout(() => {\n // this._micReadyFired = false;\n // }, 300);\n\n this.onMicReady();\n this.sendAudioMetadata(recoveredTrack);\n }\n }\n // this.log(\"Audio graph recovery completed\");\n } catch (e) {\n console.error(\"Recovery failed\", e);\n\n // this.onError(\n // JSON.stringify({\n // Type: \"ERROR\",\n // Data: \"Failed to recover microphone\",\n // }),\n // );\n } finally {\n this.isRecovering = false;\n }\n }\n\n IntentStartStream() {\n this.executor.Send(\"INTENT_START_STREAM\");\n }\n\n cleanup() {\n // Uncomment to stop recorded audio\n // this.source.stop();\n // Uncomment to stop microphone audio\n this.audioStream?.getTracks()?.forEach((track) => {\n try {\n track.stop();\n } catch {}\n });\n this.source.disconnect();\n this.processorNode.disconnect();\n this.processorNode.port.close();\n this.audioContext.close();\n this.audioData = [];\n }\n\n sendAudioMetadata(track) {\n const browser = getBrowserInfo();\n const recoveredSettings = track?.getSettings?.() ?? {};\n if (this.onAudioMetadata)\n this.onAudioMetadata({\n DeviceLabel: track?.label ?? \"\",\n EchoCancellation: recoveredSettings.echoCancellation ?? false,\n NoiseSuppression: recoveredSettings.noiseSuppression ?? false,\n AutoGainControl: recoveredSettings.autoGainControl ?? false,\n BrowserName: browser.BrowserName,\n BrowserVersion: browser.BrowserVersion,\n });\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\n// ---------------------------------------------------------------------------\n// Helpers — module-level, not part of the Streamer class\n// ---------------------------------------------------------------------------\n\n/**\n * Opens a temporary getUserMedia stream for the given deviceId, runs it\n * through an AnalyserNode for `durationMs` milliseconds, and resolves with\n * `true` if the measured RMS energy exceeds `silenceThreshold`.\n *\n * Virtual / loopback devices (e.g. Splashtop Remote Sound) are connected but\n * produce only silence, so their RMS stays at or near 0.\n *\n * @param {string} deviceId\n * @param {number} [durationMs=350] How long to sample (ms)\n * @param {number} [silenceThreshold=0.001] RMS below this is considered silent\n * @returns {Promise<boolean>}\n */\nasync function isDeviceProducingAudio(\n deviceId,\n durationMs = 350,\n silenceThreshold = 0.01,\n) {\n let stream = null;\n let audioCtx = null;\n try {\n stream = await navigator.mediaDevices.getUserMedia({\n audio: { deviceId: { exact: deviceId }, channelCount: 1 },\n });\n audioCtx = new AudioContext();\n const source = audioCtx.createMediaStreamSource(stream);\n const analyser = audioCtx.createAnalyser();\n analyser.fftSize = 256;\n source.connect(analyser);\n\n const bufferLength = analyser.frequencyBinCount;\n const dataArray = new Float32Array(bufferLength);\n\n return await new Promise((resolve) => {\n let maxRms = 0;\n const startTime = performance.now();\n\n function sample() {\n analyser.getFloatTimeDomainData(dataArray);\n let sumSq = 0;\n for (let i = 0; i < bufferLength; i++) {\n sumSq += dataArray[i] * dataArray[i];\n }\n const rms = Math.sqrt(sumSq / bufferLength);\n if (rms > maxRms) maxRms = rms;\n\n if (performance.now() - startTime < durationMs) {\n requestAnimationFrame(sample);\n } else {\n resolve(maxRms > silenceThreshold);\n }\n }\n\n requestAnimationFrame(sample);\n });\n } catch {\n // If we cannot open the device at all, treat it as inactive\n return false;\n } finally {\n stream?.getTracks().forEach((t) => t.stop());\n if (audioCtx && audioCtx.state !== \"closed\") {\n audioCtx.close().catch(() => {});\n }\n }\n}\n\n/**\n * Enumerates all audioinput devices, skips `excludeDeviceId`, and returns the\n * deviceId of the first one that passes the `isDeviceProducingAudio` probe.\n * Returns `null` if none are found.\n *\n * @param {string} excludeDeviceId The silent/virtual device to skip\n * @param {boolean} [enableLogs=false]\n * @returns {Promise<string|null>}\n */\nasync function findFirstActiveAudioDevice(excludeDeviceId, enableLogs = false) {\n let devices;\n try {\n devices = await navigator.mediaDevices.enumerateDevices();\n } catch {\n return null;\n }\n\n const audioInputs = devices.filter(\n (d) => d.kind === \"audioinput\" && d.deviceId !== excludeDeviceId,\n );\n\n for (const device of audioInputs) {\n // if (enableLogs) {\n // console.log(\n // `Augnito: Probing candidate device \"${device.label}\" (${device.deviceId})`,\n // );\n // }\n const active = await isDeviceProducingAudio(device.deviceId);\n if (active) {\n // if (enableLogs) {\n // console.log(\n // `Augnito: Found active device \"${device.label}\" (${device.deviceId})`,\n // );\n // }\n return device.deviceId;\n }\n }\n\n return null;\n}\n\nfunction getBrowserInfo() {\n const ua = navigator.userAgent;\n\n let browser = \"Unknown\";\n let version = \"\";\n\n if (/Edg\\/([\\d.]+)/.test(ua)) {\n browser = \"Edge\";\n version = ua.match(/Edg\\/([\\d.]+)/)?.[1] || \"\";\n } else if (/Chrome\\/([\\d.]+)/.test(ua)) {\n browser = \"Chrome\";\n version = ua.match(/Chrome\\/([\\d.]+)/)?.[1] || \"\";\n } else if (/Firefox\\/([\\d.]+)/.test(ua)) {\n browser = \"Firefox\";\n version = ua.match(/Firefox\\/([\\d.]+)/)?.[1] || \"\";\n } else if (/Version\\/([\\d.]+).*Safari/.test(ua)) {\n browser = \"Safari\";\n version = ua.match(/Version\\/([\\d.]+)/)?.[1] || \"\";\n }\n\n return {\n BrowserName: browser,\n BrowserVersion: version,\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 reconnectAudioDuration: 0,\n shouldPreIntialiseRecorder: false,\n shouldReadIntensity: false,\n debounceDelay: 300,\n switchToRegularSpeechProfile: false,\n echoCancellation: undefined,\n noiseSuppression: undefined,\n autoGainControl: undefined,\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.pendingStartStream = 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.reconnectAudioDuration = config.reconnectAudioDuration ?? 0;\n this.shouldPreIntialiseRecorder = config.shouldPreIntialiseRecorder;\n this.switchToRegularSpeechProfile =\n config.switchToRegularSpeechProfile ?? false;\n this._echoCancellation = config.echoCancellation;\n this._noiseSuppression = config.noiseSuppression;\n this._autoGainControl = config.autoGainControl;\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 this.needsDispose = false;\n AugnitoRecorder.instance = this;\n }\n\n get echoCancellation() {\n return this._echoCancellation;\n }\n set echoCancellation(value) {\n this._echoCancellation = value;\n if (this.streamer) this.streamer.echoCancellation = value;\n }\n\n get noiseSuppression() {\n return this._noiseSuppression;\n }\n set noiseSuppression(value) {\n this._noiseSuppression = value;\n if (this.streamer) this.streamer.noiseSuppression = value;\n }\n\n get autoGainControl() {\n return this._autoGainControl;\n }\n set autoGainControl(value) {\n this._autoGainControl = value;\n if (this.streamer) this.streamer.autoGainControl = value;\n }\n\n initialiseStreamer() {\n this.streamer = new Streamer(\n this.WebsocketURL,\n this.enableLogs,\n this.isDebug,\n this.bufferInterval,\n this.pausedBufferInterval,\n this.eosMessage,\n this.socketTimeoutInterval,\n this.shouldSendAudioDataSequence,\n this.reconnectAudioDuration,\n this.shouldPreIntialiseRecorder,\n this.shouldReadIntensity,\n this.switchToRegularSpeechProfile,\n this._echoCancellation,\n this._noiseSuppression,\n this._autoGainControl,\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 this.onJobStatusCallback.bind(this),\n this.onMicReadyCallback.bind(this),\n this.onWsStatusChangeCallback.bind(this),\n this.onAudioMetadataCallback.bind(this),\n );\n }\n\n updateIntentStartStream() {\n this.pendingStartStream = true;\n this.streamer?.IntentStartStream();\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 setTimeout(() => {\n if (this.needsDispose) {\n this.needsDispose = false;\n return;\n }\n this.initialiseStreamer();\n this.streamerNotStarted = true;\n }, 500);\n }\n }\n }\n\n getBlob() {\n const audioBlob = this.streamer.getBlob();\n this.log(\"Blob Sent...\");\n return audioBlob;\n }\n\n getCurrentTime() {\n return this.streamer && this.streamer.audioContext\n ? this.streamer.audioContext.currentTime\n : 0;\n }\n\n getState() {\n return this.streamer && this.streamer.audioContext\n ? this.streamer.audioContext.state\n : \"closed\";\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 this.needsDispose = true;\n this.streamer?.StopStream(false);\n this.streamer = null;\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 onJobStatusCallback(status) {\n if (this.onJobStatus) {\n this.onJobStatus(status);\n }\n }\n onMicReadyCallback() {\n if (this.onMicReady) {\n this.onMicReady();\n }\n }\n\n onAudioMetadataCallback(data) {\n if (this.onAudioMetadata) {\n this.onAudioMetadata(data);\n }\n }\n\n onWsStatusChangeCallback(statusData) {\n if (this.onSocketStatusChange) {\n this.onSocketStatusChange(statusData);\n }\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","INTENT_START_STREAM","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","WS_STATUS_MSG","Executor","enableLogs","eosMessage","socketTimeoutInterval","shouldSendAudioDataSequence","onFinalResult","onPartialResult","onError","onSessionEvent","onOtherResults","onSpeechResponse","onJobStatus","bufferSizeInterval","switchToRegularSpeechProfile","onWsStatusChange","_classCallCheck","worker","onFinalResultCallback","onErrorCallback","onPartialResultCallback","onSessionEventCallback","onOtherResultsCallback","onSpeechResponseCallback","onJobStatusCallback","onWsStatusChangeCallback","packetSeqId","audioDuration","heavyOp","idleLoop","lastSent","switchToRegularSpeech","_createClass","key","value","Start","duration","wsUrl","shouldPauseSocketInitially","_this","workerScript","concat","WorkerBlob","toString","JSON","stringify","Worker","URL","createObjectURL","Blob","type","onmessage","event","console","log","data","eventData","status","createAudioPacketHeader","isLastPacket","Math","ceil","headerSize","buffer","ArrayBuffer","view","DataView","i","setUint8","charCodeAt","setBigInt64","BigInt","appendAudioData","arrayBuffer","audioDataBytes","totalLength","byteLength","combinedBuffer","combinedArray","Uint8Array","set","Send","Date","_this$worker","postMessage","_this$worker2","binaryHeader","_this$worker3","_this$worker4","_this$worker5","_this$worker6","_this$worker7","audioData","undefined","_this$worker8","doneMessage","closeMessage","connectionRetryTimeout","keepAliveTimeout","healthcheckInterval","consumeInterval","idleThreadInterval","pauseSocketMessage","resumeSocketMessage","startListeningClickedMessage","wsStatusMessage","lastConnect","lastDataSent","lastDataReceived","lastPingReceived","queue","pauseStateAudio","pendingStartStreamBuffer","pendingStartStreamCapture","sentPacketsQueue","ws","isDone","consumer","healthCheck","retrySentPacket","packetId","shouldNotReconnect","JobID","shouldPauseSocket","initConnect","WebSocket","onopen","self","length","message","operate","onerror","error","onclose","cleanup","send","readyState","OPEN","currentTime","warn","add","push","parse","Type","metaResponse","Event","Result","Final","outputText","Transcript","filter","x","packetNumber","Index","Data","toUpperCase","clearInterval","e","close","setInterval","retryPacket","packetData","res","shift","isSent","unshift","Number","getBigInt64","sentPacket","isSocketClosingTime","worklet","Streamer","socketUrl","isDebug","pausedBufferInterval","reconnectAudioDuration","shouldPreIntialiseRecorder","shouldReadIntensity","echoCancellation","noiseSuppression","autoGainControl","onStateChanged","onIntensity","onMicReady","onAudioMetadata","audioContext","audioStream","executor","HeavyOp","source","processorNode","isPaused","isStreaming","closeSocketWithoutEOS","micNeedsRecovery","trackEndedHandler","isRecovering","_micReadyFired","_micReadyFiredOnFirstRecovery","_deviceChangeHandling","currentWsUrl","currentDuration","deviceChangeHandler","_originalDeviceId","_originalDeviceLabel","InitialiseMediaStream","_InitialiseMediaStream","_asyncToGenerator","_regeneratorRuntime","mark","_callee2","_this$audioStream2","_this$audioStream2$ge","mic","wrap","_callee2$","_context2","prev","next","createMediaStreamSourceNode","abrupt","createProcessorNode","connect","destination","sampleRate","_callee","_this$audioStream","_this$audioStream$get","_track$getSettings$de","_track$getSettings","track","trackInvalid","currentDeviceId","currentDeviceActive","realDeviceId","_callee$","_context","getAudioTracks","call","recoverAudioGraph","getSettings","deviceId","label","isDeviceProducingAudio","sent","findFirstActiveAudioDevice","_preferredDeviceId","finish","stop","navigator","mediaDevices","addEventListener","sendAudioMetadata","_x","_x2","apply","arguments","_StartStream","_callee3","_this$audioStream3","_this$audioStream3$ge","_callee3$","_context3","IsMicrophoneMuted","state","suspend","getTracks","forEach","t","_unused","StartStream","_x3","_x4","_createBufferedSourceNode","_callee4","audioBuffer","_callee4$","_context4","loadAudio","createBufferSource","loop","start","createBufferedSourceNode","_createMediaStreamSourceNode","_callee5","_this2","_track$getSettings$de2","_track$getSettings2","_track$label","audioConstraints","acquiredDeviceId","acquiredLabel","errMessage","_callee5$","_context5","channelCount","googEchoCancellation","googNoiseSuppression","googAutoGainControl","exact","getUserMedia","audio","AudioContext","createMediaStreamSource","t0","name","_loadAudio","_callee6","response","_callee6$","_context6","fetch","decodeAudioData","_createProcessorNode","_callee7","_this3","_this$shouldReadInten","sampleRateParam","bufferSizeIntervalParam","pausedBufferIntervalParam","shouldReadIntensityParam","_callee7$","_context7","audioWorklet","addModule","encodeURIComponent","AudioWorkletNode","parameters","get","setValueAtTime","port","_event$data","saveAudio","_this3$onIntensity","Int16Array","element","_PauseStream","_callee8","_callee8$","_context8","PauseStream","_ResumeStream","_callee9","_this$audioStream4","_this$audioStream4$ge","trackEnded","_callee9$","_context9","resume","ResumeStream","_this$audioStream5","_this$audioStream5$ge","muted","_StopStream","_callee10","shouldSendEOS","_this$audioContext","_this$audioStream6","_this$audioStream6$ge","_this$audioStream7","_this$audioStream7$ge","_this$processorNode","_this$audioContext2","_callee10$","_context10","removeEventListener","_unused2","StopStream","_x5","_recoverAudioGraph","_callee11","_this4","_this$audioStream8","_this$audioStream8$ge","_this$audioStream9","_this$audioStream10","_this$audioStream10$g","_recoveredTrack$getSe","_recoveredTrack$getSe2","oldTrack","_this$source","_this$processorNode2","recoveredTrack","recoveredDeviceId","devices","originalDevicePresent","_callee11$","_context11","_unused3","disconnect","_unused4","_unused5","Error","recoveredTrackUsable","enumerateDevices","some","d","kind","IntentStartStream","_this$audioStream11","_unused6","_track$getSettings3","_track$getSettings4","_track$label2","_recoveredSettings$ec","_recoveredSettings$no","_recoveredSettings$au","browser","getBrowserInfo","recoveredSettings","DeviceLabel","EchoCancellation","NoiseSuppression","AutoGainControl","BrowserName","BrowserVersion","wavView","encodeWAV","url","getBlob","audioBlob","index","setInt16","dataLength","fileSize","setUint32","setUint16","setInt8","getInt8","toLocaleTimeString","_x6","_isDeviceProducingAudio","_callee12","durationMs","silenceThreshold","stream","audioCtx","analyser","bufferLength","dataArray","_stream","_args12","_callee12$","_context12","createAnalyser","fftSize","frequencyBinCount","Float32Array","Promise","resolve","maxRms","startTime","performance","now","sample","getFloatTimeDomainData","sumSq","rms","sqrt","requestAnimationFrame","catch","_x7","_findFirstActiveAudioDevice","_callee13","excludeDeviceId","audioInputs","_iterator","_step","device","active","_callee13$","_context13","_createForOfIteratorHelper","s","n","done","t1","f","ua","userAgent","version","test","_ua$match","match","_ua$match2","_ua$match3","_ua$match4","AugnitoRecorder","_config$serverURL","_config$reconnectAudi","_config$switchToRegul","_config$debounceDelay","config","serverURL","bufferInterval","EOS_Message","debounceDelay","instance","WebsocketURL","streamer","streamerNotStarted","isStreamerStarting","pendingStartStream","_echoCancellation","_noiseSuppression","_autoGainControl","initialiseStreamer","delay","toggleStartStopAudioStream","debounce","bind","togglePauseResumeAudioStream","needsDispose","onStateChangedCallback","onOtherResultCallback","onIntensityCallback","onMicReadyCallback","onAudioMetadataCallback","updateIntentStartStream","_this$streamer","startAudio","IsPaused","resumeAudio","pauseAudio","stopAudio","_startAudio","_this$streamer2","forceStopForPausedState","IsStreaming","_this$streamer3","setTimeout","getCurrentTime","getState","showLogCallback","dispose","_this$streamer4","isRecording","intensity","errorMessage","hype","recipe","statusData","onSocketStatusChange","showLog","fn","timeoutId","_len","args","Array","_key","clearTimeout"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "testaugnitorecorder4",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.26",
|
|
4
4
|
"description": "Audio recorder and streamer compatible with any browser",
|
|
5
5
|
"main": "dist/augnitoRecorder.js",
|
|
6
6
|
"types": "dist/augnitoRecorder.d.ts",
|
|
7
7
|
"type": "module",
|
|
8
8
|
"scripts": {
|
|
9
9
|
"clean": "rm -rf ./dist/* ",
|
|
10
|
-
"build": "rollup -c",
|
|
10
|
+
"build": "rollup -c rollup.config.mjs",
|
|
11
|
+
"iife": "rollup -c rollup.iife.config.mjs",
|
|
11
12
|
"test": "node test/spec",
|
|
12
13
|
"pretest": "npm run build"
|
|
13
14
|
},
|
|
@@ -30,6 +31,7 @@
|
|
|
30
31
|
"rollup": "^2.79.1",
|
|
31
32
|
"rollup-plugin-babel": "^4.4.0",
|
|
32
33
|
"rollup-plugin-commonjs": "^10.1.0",
|
|
34
|
+
"rollup-plugin-delete": "^3.0.2",
|
|
33
35
|
"rollup-plugin-node-resolve": "^5.2.0",
|
|
34
36
|
"tslib": "^2.6.2",
|
|
35
37
|
"typescript": "5.4.3"
|