speaker-calibration 2.2.217 → 2.2.218
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintignore +71 -71
- package/.eslintrc.json +40 -40
- package/.github/workflows/update-phrases.yml +37 -0
- package/.prettierignore +69 -69
- package/.prettierrc +14 -14
- package/LICENSE +20 -20
- package/README.md +133 -133
- package/__mocks__/fileMock.js +1 -1
- package/__mocks__/styleMock.js +1 -1
- package/babel.config.js +3 -3
- package/coverage/clover.xml +71 -71
- package/coverage/coverage-final.json +224 -224
- package/coverage/lcov-report/PythonServerInterface.js.html +265 -265
- package/coverage/lcov-report/base.css +354 -354
- package/coverage/lcov-report/block-navigation.js +82 -82
- package/coverage/lcov-report/favicon.png +0 -0
- package/coverage/lcov-report/index.html +123 -123
- package/coverage/lcov-report/prettify.css +101 -101
- package/coverage/lcov-report/prettify.js +937 -937
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +189 -189
- package/coverage/lcov-report/src/index.html +121 -121
- package/coverage/lcov-report/src/server/PythonServerInterface.js.html +268 -268
- package/coverage/lcov-report/src/server/index.html +123 -123
- package/coverage/lcov-report/src/tasks/audioCalibrator.js.html +499 -499
- package/coverage/lcov-report/src/tasks/audioRecorder.js.html +412 -412
- package/coverage/lcov-report/src/tasks/index.html +143 -143
- package/coverage/lcov-report/src/tasks/volume/index.html +123 -123
- package/coverage/lcov-report/src/tasks/volume/volume.js.html +409 -409
- package/coverage/lcov-report/src/utils.js.html +172 -172
- package/coverage/lcov.info +91 -91
- package/dist/Procfile +0 -0
- package/dist/example/NoSleep.min.js +1 -1
- package/dist/example/credentials.json.gpg +0 -0
- package/dist/example/fetch-languages-sheets.js +77 -77
- package/dist/example/i18n.js +28705 -28705
- package/dist/example/index.html +47 -47
- package/dist/example/listener.html +79 -79
- package/dist/example/server.js +51 -51
- package/dist/example/speaker.html +145 -145
- package/dist/example/speakerUI.js +273 -273
- package/dist/example/styles.css +99 -99
- package/dist/listener.js +13 -13
- package/dist/main.js +12 -12
- package/dist/main.js.LICENSE.txt +0 -0
- package/dist/mlsGen.js +6814 -6814
- package/dist/mlsGen.wasm +0 -0
- package/dist/package-lock.json +1018 -1018
- package/dist/package.json +18 -18
- package/doc/AudioCalibrator.html +417 -417
- package/doc/AudioPeer.html +251 -251
- package/doc/AudioRecorder.html +195 -195
- package/doc/ImpulseResponse.html +215 -215
- package/doc/Listener.html +308 -308
- package/doc/MlsGenInterface.html +226 -226
- package/doc/MyEventEmitter.html +274 -274
- package/doc/PythonServerAPI.html +109 -109
- package/doc/Speaker-Calibration-UML-Diagram.png +0 -0
- package/doc/Speaker.html +276 -276
- package/doc/Takes%20a%20target%20element%20where%20html%20elements%20will%20be%20appended..html +128 -128
- package/doc/Takes%20the%20url%20of%20the%20current%20site%0Aand%20a%20target%20element%20where%20html%20elements%20will%20be%20appended..html +138 -138
- package/doc/Takes%20the%20url%20of%20the%20current%20site%20and%20a%20target%20element%20where%20html%20elements%20will%20be%20appended..html +137 -137
- package/doc/Volume.html +88 -88
- package/doc/audioCalibrator.js.html +179 -179
- package/doc/audioPeer.js.html +175 -175
- package/doc/audioRecorder.js.html +163 -163
- package/doc/creates%20a%20new%20AudioRecorder%20instance.%20%0ASets%20up%20the%20audio%20context%20and%20file%20reader..html +114 -114
- package/doc/fonts/OpenSans-Bold-webfont.eot +0 -0
- package/doc/fonts/OpenSans-Bold-webfont.svg +1829 -1829
- package/doc/fonts/OpenSans-Bold-webfont.woff +0 -0
- package/doc/fonts/OpenSans-BoldItalic-webfont.eot +0 -0
- package/doc/fonts/OpenSans-BoldItalic-webfont.svg +1829 -1829
- package/doc/fonts/OpenSans-BoldItalic-webfont.woff +0 -0
- package/doc/fonts/OpenSans-Italic-webfont.eot +0 -0
- package/doc/fonts/OpenSans-Italic-webfont.svg +1829 -1829
- package/doc/fonts/OpenSans-Italic-webfont.woff +0 -0
- package/doc/fonts/OpenSans-Light-webfont.eot +0 -0
- package/doc/fonts/OpenSans-Light-webfont.svg +1830 -1830
- package/doc/fonts/OpenSans-Light-webfont.woff +0 -0
- package/doc/fonts/OpenSans-LightItalic-webfont.eot +0 -0
- package/doc/fonts/OpenSans-LightItalic-webfont.svg +1834 -1834
- package/doc/fonts/OpenSans-LightItalic-webfont.woff +0 -0
- package/doc/fonts/OpenSans-Regular-webfont.eot +0 -0
- package/doc/fonts/OpenSans-Regular-webfont.svg +1830 -1830
- package/doc/fonts/OpenSans-Regular-webfont.woff +0 -0
- package/doc/global.html +308 -308
- package/doc/index.html +58 -58
- package/doc/listener.js.html +170 -170
- package/doc/mlsGen_mlsGenInterface.js.html +117 -117
- package/doc/myEventEmitter.js.html +124 -124
- package/doc/peer-connection_audioPeer.js.html +188 -188
- package/doc/peer-connection_listener.js.html +311 -311
- package/doc/peer-connection_speaker.js.html +381 -381
- package/doc/sc-activity-diagram.png +0 -0
- package/doc/scripts/linenumber.js +25 -25
- package/doc/scripts/prettify/Apache-License-2.0.txt +202 -202
- package/doc/scripts/prettify/lang-css.js +24 -24
- package/doc/scripts/prettify/prettify.js +640 -640
- package/doc/server_PythonServerAPI.js.html +160 -160
- package/doc/speaker.js.html +248 -248
- package/doc/styles/jsdoc-default.css +371 -371
- package/doc/styles/prettify-jsdoc.css +111 -111
- package/doc/styles/prettify-tomorrow.css +163 -163
- package/doc/tasks_audioCalibrator.js.html +207 -207
- package/doc/tasks_audioRecorder.js.html +190 -190
- package/doc/tasks_impulse-response_impulseResponse.js.html +442 -442
- package/doc/tasks_impulse-response_mlsGen_mlsGenInterface.js.html +175 -175
- package/doc/tasks_volume_volume.js.html +185 -185
- package/doc/utils.js.html +105 -105
- package/jest.config.js +173 -173
- package/makefile +74 -0
- package/netlify.toml +26 -26
- package/package.json +78 -78
- package/src/config/firebase.js +26 -26
- package/src/index.html +21 -21
- package/src/listener-app/listener.js +153 -153
- package/src/main.js +23 -23
- package/src/myEventEmitter.js +83 -83
- package/src/peer-connection/audioPeer.js +183 -183
- package/src/peer-connection/listener.js +369 -369
- package/src/peer-connection/peerErrors.js +25 -25
- package/src/peer-connection/speaker.js +767 -765
- package/src/powerCheck.js +98 -98
- package/src/server/PythonServerAPI.js +869 -869
- package/src/tasks/audioCalibrator.js +360 -360
- package/src/tasks/audioRecorder.js +315 -315
- package/src/tasks/combination/combination.js +3160 -3160
- package/src/tasks/combination/mlsGen/mlsGen.cpp +98 -98
- package/src/tasks/combination/mlsGen/mlsGen.hpp +303 -303
- package/src/tasks/combination/mlsGen/mlsGenInterface.js +131 -131
- package/src/tasks/combination/mlsGen/mlsGenTest.cpp +180 -180
- package/src/tasks/impulse-response/impulseResponse.js +610 -610
- package/src/tasks/impulse-response/mlsGen/mlsGen.cpp +98 -98
- package/src/tasks/impulse-response/mlsGen/mlsGen.hpp +303 -303
- package/src/tasks/impulse-response/mlsGen/mlsGenInterface.js +131 -131
- package/src/tasks/impulse-response/mlsGen/mlsGenTest.cpp +180 -180
- package/src/tasks/volume/volume.cpp +2 -2
- package/src/tasks/volume/volume.hpp +22 -22
- package/src/tasks/volume/volume.js +279 -279
- package/src/utils.js +205 -205
- package/webpack.config.js +64 -64
- package/.gitignore +0 -81
package/src/utils.js
CHANGED
|
@@ -1,205 +1,205 @@
|
|
|
1
|
-
import Swal from "sweetalert2";
|
|
2
|
-
//import {phrases} from '../dist/example/i18n.js';
|
|
3
|
-
/** .
|
|
4
|
-
* .
|
|
5
|
-
* .
|
|
6
|
-
* Utlity function to pause execution for a given time
|
|
7
|
-
*
|
|
8
|
-
* @param {number} seconds
|
|
9
|
-
* @returns {Promise}
|
|
10
|
-
* @example
|
|
11
|
-
*/
|
|
12
|
-
const sleep = seconds =>
|
|
13
|
-
new Promise(resolve => {
|
|
14
|
-
setTimeout(resolve, seconds * 1000);
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
/** .
|
|
18
|
-
* .
|
|
19
|
-
* .
|
|
20
|
-
* Uiltity function to create and save a CSV file from a buffer
|
|
21
|
-
*
|
|
22
|
-
* @param {*} data
|
|
23
|
-
* @param {*} filename
|
|
24
|
-
* @example
|
|
25
|
-
*/
|
|
26
|
-
const saveToCSV = (data, filename = 'recordedMLSignal.csv') => {
|
|
27
|
-
// console.log(data)
|
|
28
|
-
let csvContent = 'data:text/csv;charset=utf-8,';
|
|
29
|
-
|
|
30
|
-
data.forEach((val, idx) => {
|
|
31
|
-
csvContent += `${idx},${val}\r\n`;
|
|
32
|
-
});
|
|
33
|
-
const encodedUri = encodeURI(csvContent);
|
|
34
|
-
const link = document.createElement('a');
|
|
35
|
-
link.setAttribute('href', encodedUri);
|
|
36
|
-
link.setAttribute('download', filename);
|
|
37
|
-
document.body.appendChild(link);
|
|
38
|
-
link.click();
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
const saveToJSON = (data, filename = 'recordedMLSignal.json') => {
|
|
42
|
-
const jsonData = JSON.stringify(data, null, 2);
|
|
43
|
-
const blob = new Blob([jsonData], { type: 'application/json' });
|
|
44
|
-
const url = URL.createObjectURL(blob);
|
|
45
|
-
const link = document.createElement('a');
|
|
46
|
-
link.setAttribute('href', url);
|
|
47
|
-
link.setAttribute('download', filename);
|
|
48
|
-
document.body.appendChild(link);
|
|
49
|
-
link.click();
|
|
50
|
-
URL.revokeObjectURL(url);
|
|
51
|
-
};
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
/** .
|
|
55
|
-
* .
|
|
56
|
-
* .
|
|
57
|
-
* Utility function to create a buffer from a CSV file
|
|
58
|
-
*
|
|
59
|
-
* @param {*} csvString
|
|
60
|
-
* @param {*} delimiter
|
|
61
|
-
* @returns
|
|
62
|
-
* @example
|
|
63
|
-
*/
|
|
64
|
-
const csvToArray = (csvString, delimiter = ',') =>
|
|
65
|
-
csvString
|
|
66
|
-
.trim()
|
|
67
|
-
.split('\n')
|
|
68
|
-
.map(row => parseFloat(row.trim().split(delimiter)[1]));
|
|
69
|
-
|
|
70
|
-
const findMinValue = (array) => {
|
|
71
|
-
let minValue = array[0];
|
|
72
|
-
for (let i = 1; i < array.length; i++) {
|
|
73
|
-
if (array[i] < minValue) {
|
|
74
|
-
minValue = array[i];
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
return minValue;
|
|
78
|
-
};
|
|
79
|
-
|
|
80
|
-
const findMaxValue = (array) => {
|
|
81
|
-
let maxValue = array[0];
|
|
82
|
-
for (let i = 1; i < array.length; i++) {
|
|
83
|
-
if (array[i] > maxValue) {
|
|
84
|
-
maxValue = array[i];
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
return maxValue;
|
|
88
|
-
};
|
|
89
|
-
|
|
90
|
-
export const getCurrentTimeString = () => {
|
|
91
|
-
const date = new Date();
|
|
92
|
-
|
|
93
|
-
// Get the date string in the user's locale
|
|
94
|
-
const dateOptions = {
|
|
95
|
-
year: "numeric",
|
|
96
|
-
month: "long",
|
|
97
|
-
day: "numeric",
|
|
98
|
-
timeZoneName: "longOffset",
|
|
99
|
-
hour: "numeric",
|
|
100
|
-
minute: "numeric",
|
|
101
|
-
};
|
|
102
|
-
const dateString = date.toLocaleDateString(undefined, dateOptions);
|
|
103
|
-
|
|
104
|
-
return dateString.replace("at ", "");
|
|
105
|
-
};
|
|
106
|
-
|
|
107
|
-
const standardDeviation = (values) => {
|
|
108
|
-
const avg = average(values);
|
|
109
|
-
|
|
110
|
-
const squareDiffs = values.map((value) => {
|
|
111
|
-
const diff = value - avg;
|
|
112
|
-
const sqrDiff = diff * diff;
|
|
113
|
-
return sqrDiff;
|
|
114
|
-
});
|
|
115
|
-
|
|
116
|
-
const avgSquareDiff = average(squareDiffs);
|
|
117
|
-
|
|
118
|
-
const stdDev = Math.sqrt(avgSquareDiff);
|
|
119
|
-
// only 1 digit after the decimal place
|
|
120
|
-
const std = Math.round(stdDev * 10) / 10;
|
|
121
|
-
return std.toFixed(1);
|
|
122
|
-
};
|
|
123
|
-
|
|
124
|
-
const average = (data) => {
|
|
125
|
-
const sum = data.reduce((sum, value) => {
|
|
126
|
-
return sum + value;
|
|
127
|
-
}, 0);
|
|
128
|
-
|
|
129
|
-
const avg = sum / data.length;
|
|
130
|
-
return avg;
|
|
131
|
-
};
|
|
132
|
-
|
|
133
|
-
function interpolate(x, x0, x1, y0, y1) {
|
|
134
|
-
return y0 + (y1 - y0) * (x - x0) / (x1 - x0);
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
export const formatLineBreak =(inputStr,checkInternetConnection) => {
|
|
138
|
-
let finalStr = inputStr
|
|
139
|
-
.replace(/\n/g, '<br>')
|
|
140
|
-
.replace('LLL',
|
|
141
|
-
`<a href="#" id="check-connection">${checkInternetConnection}</a>`);
|
|
142
|
-
|
|
143
|
-
console.log(finalStr);
|
|
144
|
-
|
|
145
|
-
return finalStr;
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
export const createAndShowPopup = (lang, phrases) => {
|
|
151
|
-
console.log(`
|
|
152
|
-
<div style="text-align: left;">
|
|
153
|
-
${convertAsterisksToList(phrases.RC_NeedInternetConnectedPhone[lang].replace(/\n/g, '<br>'))}
|
|
154
|
-
</div>
|
|
155
|
-
<div class="col-3" style="margin-top:10px;">
|
|
156
|
-
<button id="okaybtn" class="btn btn-lg btn-dark">
|
|
157
|
-
${phrases.EE_ok[lang]}
|
|
158
|
-
</button>
|
|
159
|
-
</div>`);
|
|
160
|
-
Swal.fire({
|
|
161
|
-
html: `
|
|
162
|
-
<div style="text-align: left;">
|
|
163
|
-
${convertAsterisksToList(phrases.RC_NeedInternetConnectedPhone[lang].replace(/\n/g, '<br>'))}
|
|
164
|
-
</div>
|
|
165
|
-
<div class="col-3" style="margin-top:10px;">
|
|
166
|
-
<button id="okaybtn" class="btn btn-lg btn-dark">
|
|
167
|
-
${phrases.EE_ok[lang]}
|
|
168
|
-
</button>
|
|
169
|
-
</div>`,
|
|
170
|
-
showConfirmButton: false,
|
|
171
|
-
position: 'bottom',
|
|
172
|
-
width: "40%",
|
|
173
|
-
customClass: {
|
|
174
|
-
container:'no-background',
|
|
175
|
-
},
|
|
176
|
-
showClass: {
|
|
177
|
-
popup: "fade-in",
|
|
178
|
-
},
|
|
179
|
-
hideClass: {
|
|
180
|
-
popup: "",
|
|
181
|
-
},
|
|
182
|
-
didOpen: () => {
|
|
183
|
-
const okayBtn = document.getElementById("okaybtn");
|
|
184
|
-
okayBtn.style.display = "flex";
|
|
185
|
-
okayBtn.addEventListener('click', () => {
|
|
186
|
-
Swal.close(); // Close the Swal popup
|
|
187
|
-
});
|
|
188
|
-
}
|
|
189
|
-
});
|
|
190
|
-
};
|
|
191
|
-
|
|
192
|
-
export function convertAsterisksToList(content) {
|
|
193
|
-
// Replace * with <li> and convert line breaks to </li><li>
|
|
194
|
-
console.log(content);
|
|
195
|
-
let result = content
|
|
196
|
-
.replace(/\* (.*?)(<br>|$)/g, '<li>$1</li>')
|
|
197
|
-
.replace(/(<li>)(<\/li>)\s*$/, '') // Remove trailing </li>
|
|
198
|
-
.replace('<li>', '<ul style="padding-left:40px"> <br> <li>');
|
|
199
|
-
result = result.replace('</li>5', '</li></ul>5');
|
|
200
|
-
return result;
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
export {sleep, saveToCSV, saveToJSON, csvToArray,findMinValue,findMaxValue, standardDeviation, interpolate};
|
|
1
|
+
import Swal from "sweetalert2";
|
|
2
|
+
//import {phrases} from '../dist/example/i18n.js';
|
|
3
|
+
/** .
|
|
4
|
+
* .
|
|
5
|
+
* .
|
|
6
|
+
* Utlity function to pause execution for a given time
|
|
7
|
+
*
|
|
8
|
+
* @param {number} seconds
|
|
9
|
+
* @returns {Promise}
|
|
10
|
+
* @example
|
|
11
|
+
*/
|
|
12
|
+
const sleep = seconds =>
|
|
13
|
+
new Promise(resolve => {
|
|
14
|
+
setTimeout(resolve, seconds * 1000);
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
/** .
|
|
18
|
+
* .
|
|
19
|
+
* .
|
|
20
|
+
* Uiltity function to create and save a CSV file from a buffer
|
|
21
|
+
*
|
|
22
|
+
* @param {*} data
|
|
23
|
+
* @param {*} filename
|
|
24
|
+
* @example
|
|
25
|
+
*/
|
|
26
|
+
const saveToCSV = (data, filename = 'recordedMLSignal.csv') => {
|
|
27
|
+
// console.log(data)
|
|
28
|
+
let csvContent = 'data:text/csv;charset=utf-8,';
|
|
29
|
+
|
|
30
|
+
data.forEach((val, idx) => {
|
|
31
|
+
csvContent += `${idx},${val}\r\n`;
|
|
32
|
+
});
|
|
33
|
+
const encodedUri = encodeURI(csvContent);
|
|
34
|
+
const link = document.createElement('a');
|
|
35
|
+
link.setAttribute('href', encodedUri);
|
|
36
|
+
link.setAttribute('download', filename);
|
|
37
|
+
document.body.appendChild(link);
|
|
38
|
+
link.click();
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
const saveToJSON = (data, filename = 'recordedMLSignal.json') => {
|
|
42
|
+
const jsonData = JSON.stringify(data, null, 2);
|
|
43
|
+
const blob = new Blob([jsonData], { type: 'application/json' });
|
|
44
|
+
const url = URL.createObjectURL(blob);
|
|
45
|
+
const link = document.createElement('a');
|
|
46
|
+
link.setAttribute('href', url);
|
|
47
|
+
link.setAttribute('download', filename);
|
|
48
|
+
document.body.appendChild(link);
|
|
49
|
+
link.click();
|
|
50
|
+
URL.revokeObjectURL(url);
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
/** .
|
|
55
|
+
* .
|
|
56
|
+
* .
|
|
57
|
+
* Utility function to create a buffer from a CSV file
|
|
58
|
+
*
|
|
59
|
+
* @param {*} csvString
|
|
60
|
+
* @param {*} delimiter
|
|
61
|
+
* @returns
|
|
62
|
+
* @example
|
|
63
|
+
*/
|
|
64
|
+
const csvToArray = (csvString, delimiter = ',') =>
|
|
65
|
+
csvString
|
|
66
|
+
.trim()
|
|
67
|
+
.split('\n')
|
|
68
|
+
.map(row => parseFloat(row.trim().split(delimiter)[1]));
|
|
69
|
+
|
|
70
|
+
const findMinValue = (array) => {
|
|
71
|
+
let minValue = array[0];
|
|
72
|
+
for (let i = 1; i < array.length; i++) {
|
|
73
|
+
if (array[i] < minValue) {
|
|
74
|
+
minValue = array[i];
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return minValue;
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
const findMaxValue = (array) => {
|
|
81
|
+
let maxValue = array[0];
|
|
82
|
+
for (let i = 1; i < array.length; i++) {
|
|
83
|
+
if (array[i] > maxValue) {
|
|
84
|
+
maxValue = array[i];
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return maxValue;
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
export const getCurrentTimeString = () => {
|
|
91
|
+
const date = new Date();
|
|
92
|
+
|
|
93
|
+
// Get the date string in the user's locale
|
|
94
|
+
const dateOptions = {
|
|
95
|
+
year: "numeric",
|
|
96
|
+
month: "long",
|
|
97
|
+
day: "numeric",
|
|
98
|
+
timeZoneName: "longOffset",
|
|
99
|
+
hour: "numeric",
|
|
100
|
+
minute: "numeric",
|
|
101
|
+
};
|
|
102
|
+
const dateString = date.toLocaleDateString(undefined, dateOptions);
|
|
103
|
+
|
|
104
|
+
return dateString.replace("at ", "");
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
const standardDeviation = (values) => {
|
|
108
|
+
const avg = average(values);
|
|
109
|
+
|
|
110
|
+
const squareDiffs = values.map((value) => {
|
|
111
|
+
const diff = value - avg;
|
|
112
|
+
const sqrDiff = diff * diff;
|
|
113
|
+
return sqrDiff;
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
const avgSquareDiff = average(squareDiffs);
|
|
117
|
+
|
|
118
|
+
const stdDev = Math.sqrt(avgSquareDiff);
|
|
119
|
+
// only 1 digit after the decimal place
|
|
120
|
+
const std = Math.round(stdDev * 10) / 10;
|
|
121
|
+
return std.toFixed(1);
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
const average = (data) => {
|
|
125
|
+
const sum = data.reduce((sum, value) => {
|
|
126
|
+
return sum + value;
|
|
127
|
+
}, 0);
|
|
128
|
+
|
|
129
|
+
const avg = sum / data.length;
|
|
130
|
+
return avg;
|
|
131
|
+
};
|
|
132
|
+
|
|
133
|
+
function interpolate(x, x0, x1, y0, y1) {
|
|
134
|
+
return y0 + (y1 - y0) * (x - x0) / (x1 - x0);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
export const formatLineBreak =(inputStr,checkInternetConnection) => {
|
|
138
|
+
let finalStr = inputStr
|
|
139
|
+
.replace(/\n/g, '<br>')
|
|
140
|
+
.replace('LLL',
|
|
141
|
+
`<a href="#" id="check-connection">${checkInternetConnection}</a>`);
|
|
142
|
+
|
|
143
|
+
console.log(finalStr);
|
|
144
|
+
|
|
145
|
+
return finalStr;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
export const createAndShowPopup = (lang, phrases) => {
|
|
151
|
+
console.log(`
|
|
152
|
+
<div style="text-align: left;">
|
|
153
|
+
${convertAsterisksToList(phrases.RC_NeedInternetConnectedPhone[lang].replace(/\n/g, '<br>'))}
|
|
154
|
+
</div>
|
|
155
|
+
<div class="col-3" style="margin-top:10px;">
|
|
156
|
+
<button id="okaybtn" class="btn btn-lg btn-dark">
|
|
157
|
+
${phrases.EE_ok[lang]}
|
|
158
|
+
</button>
|
|
159
|
+
</div>`);
|
|
160
|
+
Swal.fire({
|
|
161
|
+
html: `
|
|
162
|
+
<div style="text-align: left;">
|
|
163
|
+
${convertAsterisksToList(phrases.RC_NeedInternetConnectedPhone[lang].replace(/\n/g, '<br>'))}
|
|
164
|
+
</div>
|
|
165
|
+
<div class="col-3" style="margin-top:10px;">
|
|
166
|
+
<button id="okaybtn" class="btn btn-lg btn-dark">
|
|
167
|
+
${phrases.EE_ok[lang]}
|
|
168
|
+
</button>
|
|
169
|
+
</div>`,
|
|
170
|
+
showConfirmButton: false,
|
|
171
|
+
position: 'bottom',
|
|
172
|
+
width: "40%",
|
|
173
|
+
customClass: {
|
|
174
|
+
container:'no-background',
|
|
175
|
+
},
|
|
176
|
+
showClass: {
|
|
177
|
+
popup: "fade-in",
|
|
178
|
+
},
|
|
179
|
+
hideClass: {
|
|
180
|
+
popup: "",
|
|
181
|
+
},
|
|
182
|
+
didOpen: () => {
|
|
183
|
+
const okayBtn = document.getElementById("okaybtn");
|
|
184
|
+
okayBtn.style.display = "flex";
|
|
185
|
+
okayBtn.addEventListener('click', () => {
|
|
186
|
+
Swal.close(); // Close the Swal popup
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
});
|
|
190
|
+
};
|
|
191
|
+
|
|
192
|
+
export function convertAsterisksToList(content) {
|
|
193
|
+
// Replace * with <li> and convert line breaks to </li><li>
|
|
194
|
+
console.log(content);
|
|
195
|
+
let result = content
|
|
196
|
+
.replace(/\* (.*?)(<br>|$)/g, '<li>$1</li>')
|
|
197
|
+
.replace(/(<li>)(<\/li>)\s*$/, '') // Remove trailing </li>
|
|
198
|
+
.replace('<li>', '<ul style="padding-left:40px"> <br> <li>');
|
|
199
|
+
result = result.replace('</li>5', '</li></ul>5');
|
|
200
|
+
return result;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
export {sleep, saveToCSV, saveToJSON, csvToArray,findMinValue,findMaxValue, standardDeviation, interpolate};
|
package/webpack.config.js
CHANGED
|
@@ -1,64 +1,64 @@
|
|
|
1
|
-
const path = require('path');
|
|
2
|
-
const {BundleAnalyzerPlugin} = require('webpack-bundle-analyzer');
|
|
3
|
-
|
|
4
|
-
const config = {
|
|
5
|
-
entry: {
|
|
6
|
-
main: './src/main.js',
|
|
7
|
-
listener: './src/listener-app/listener.js',
|
|
8
|
-
},
|
|
9
|
-
output: {
|
|
10
|
-
path: path.resolve(__dirname, 'dist'),
|
|
11
|
-
filename: '[name].js',
|
|
12
|
-
library: {
|
|
13
|
-
name: 'speakerCalibrator',
|
|
14
|
-
type: 'umd',
|
|
15
|
-
},
|
|
16
|
-
},
|
|
17
|
-
module: {
|
|
18
|
-
rules: [
|
|
19
|
-
{
|
|
20
|
-
// If you have .mjs files, use test: /\.m?js$/,
|
|
21
|
-
test: /\.js$/,
|
|
22
|
-
exclude: /node_modules/,
|
|
23
|
-
use: {
|
|
24
|
-
loader: 'babel-loader',
|
|
25
|
-
options: {
|
|
26
|
-
// You can also move this config into a separate .babelrc or babel.config.js file
|
|
27
|
-
presets: [
|
|
28
|
-
[
|
|
29
|
-
'@babel/preset-env',
|
|
30
|
-
{
|
|
31
|
-
// Adjust your target browsers as needed
|
|
32
|
-
targets: {
|
|
33
|
-
ios: '12',
|
|
34
|
-
},
|
|
35
|
-
// This config tells Babel to automatically include necessary polyfills
|
|
36
|
-
// for features you use, referencing core-js where needed
|
|
37
|
-
useBuiltIns: 'usage',
|
|
38
|
-
corejs: '3',
|
|
39
|
-
},
|
|
40
|
-
],
|
|
41
|
-
],
|
|
42
|
-
},
|
|
43
|
-
},
|
|
44
|
-
},
|
|
45
|
-
{
|
|
46
|
-
test: /\.css$/,
|
|
47
|
-
use: ['style-loader', 'css-loader'],
|
|
48
|
-
},
|
|
49
|
-
],
|
|
50
|
-
},
|
|
51
|
-
plugins: [],
|
|
52
|
-
resolve: {
|
|
53
|
-
fallback: {
|
|
54
|
-
path: require.resolve('path-browserify'),
|
|
55
|
-
fs: false,
|
|
56
|
-
},
|
|
57
|
-
},
|
|
58
|
-
};
|
|
59
|
-
|
|
60
|
-
if (process.env.WEBPACK_ANALYZE === 'true') {
|
|
61
|
-
config.plugins.push(new BundleAnalyzerPlugin());
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
module.exports = config;
|
|
1
|
+
const path = require('path');
|
|
2
|
+
const {BundleAnalyzerPlugin} = require('webpack-bundle-analyzer');
|
|
3
|
+
|
|
4
|
+
const config = {
|
|
5
|
+
entry: {
|
|
6
|
+
main: './src/main.js',
|
|
7
|
+
listener: './src/listener-app/listener.js',
|
|
8
|
+
},
|
|
9
|
+
output: {
|
|
10
|
+
path: path.resolve(__dirname, 'dist'),
|
|
11
|
+
filename: '[name].js',
|
|
12
|
+
library: {
|
|
13
|
+
name: 'speakerCalibrator',
|
|
14
|
+
type: 'umd',
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
module: {
|
|
18
|
+
rules: [
|
|
19
|
+
{
|
|
20
|
+
// If you have .mjs files, use test: /\.m?js$/,
|
|
21
|
+
test: /\.js$/,
|
|
22
|
+
exclude: /node_modules/,
|
|
23
|
+
use: {
|
|
24
|
+
loader: 'babel-loader',
|
|
25
|
+
options: {
|
|
26
|
+
// You can also move this config into a separate .babelrc or babel.config.js file
|
|
27
|
+
presets: [
|
|
28
|
+
[
|
|
29
|
+
'@babel/preset-env',
|
|
30
|
+
{
|
|
31
|
+
// Adjust your target browsers as needed
|
|
32
|
+
targets: {
|
|
33
|
+
ios: '12',
|
|
34
|
+
},
|
|
35
|
+
// This config tells Babel to automatically include necessary polyfills
|
|
36
|
+
// for features you use, referencing core-js where needed
|
|
37
|
+
useBuiltIns: 'usage',
|
|
38
|
+
corejs: '3',
|
|
39
|
+
},
|
|
40
|
+
],
|
|
41
|
+
],
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
test: /\.css$/,
|
|
47
|
+
use: ['style-loader', 'css-loader'],
|
|
48
|
+
},
|
|
49
|
+
],
|
|
50
|
+
},
|
|
51
|
+
plugins: [],
|
|
52
|
+
resolve: {
|
|
53
|
+
fallback: {
|
|
54
|
+
path: require.resolve('path-browserify'),
|
|
55
|
+
fs: false,
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
if (process.env.WEBPACK_ANALYZE === 'true') {
|
|
61
|
+
config.plugins.push(new BundleAnalyzerPlugin());
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
module.exports = config;
|
package/.gitignore
DELETED
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
# Ignore files without extentions
|
|
2
|
-
*
|
|
3
|
-
!/**/
|
|
4
|
-
!*.*
|
|
5
|
-
# don't ignore dist/Procfile
|
|
6
|
-
!dist/Procfile
|
|
7
|
-
|
|
8
|
-
# ignore all files starting with . or ~
|
|
9
|
-
.*
|
|
10
|
-
~*
|
|
11
|
-
|
|
12
|
-
# ignore node/grunt dependency directories
|
|
13
|
-
node_modules/
|
|
14
|
-
dist/node_modules/
|
|
15
|
-
|
|
16
|
-
# ignore composer vendor directory
|
|
17
|
-
/vendor
|
|
18
|
-
|
|
19
|
-
# ignore components loaded via Bower
|
|
20
|
-
/bower_components
|
|
21
|
-
|
|
22
|
-
# ignore jekyll build directory
|
|
23
|
-
/_site
|
|
24
|
-
|
|
25
|
-
# ignore OS generated files
|
|
26
|
-
ehthumbs.db
|
|
27
|
-
Thumbs.db
|
|
28
|
-
|
|
29
|
-
# ignore Editor files
|
|
30
|
-
*.sublime-project
|
|
31
|
-
*.sublime-workspace
|
|
32
|
-
*.komodoproject
|
|
33
|
-
|
|
34
|
-
# ignore log files and databases
|
|
35
|
-
*.log
|
|
36
|
-
*.sql
|
|
37
|
-
*.sqlite
|
|
38
|
-
|
|
39
|
-
# ignore compiled files
|
|
40
|
-
*.com
|
|
41
|
-
*.class
|
|
42
|
-
*.dll
|
|
43
|
-
*.exe
|
|
44
|
-
*.o
|
|
45
|
-
*.so
|
|
46
|
-
|
|
47
|
-
# ignore packaged files
|
|
48
|
-
*.7z
|
|
49
|
-
*.dmg
|
|
50
|
-
*.gz
|
|
51
|
-
*.iso
|
|
52
|
-
*.jar
|
|
53
|
-
*.rar
|
|
54
|
-
*.tar
|
|
55
|
-
*.zip
|
|
56
|
-
|
|
57
|
-
# ignore private/secret files
|
|
58
|
-
*.der
|
|
59
|
-
*.key
|
|
60
|
-
*.pem
|
|
61
|
-
|
|
62
|
-
# ingnore CSV files
|
|
63
|
-
*.csv
|
|
64
|
-
|
|
65
|
-
# ignore library files
|
|
66
|
-
kfr-master
|
|
67
|
-
kissfft
|
|
68
|
-
|
|
69
|
-
# --------------------------------------------------------
|
|
70
|
-
# BEGIN Explictly Allowed Files (i.e. do NOT ignore these)
|
|
71
|
-
# --------------------------------------------------------
|
|
72
|
-
|
|
73
|
-
# track these files, if they exist
|
|
74
|
-
!.gitignore
|
|
75
|
-
!.editorconfig
|
|
76
|
-
!.phpcs.xml.dist
|
|
77
|
-
!.env.example
|
|
78
|
-
!.eslintrc.json
|
|
79
|
-
!.prettierrc
|
|
80
|
-
!.eslintignore
|
|
81
|
-
!.prettierignore
|