speaker-calibration 2.2.66 → 2.2.67
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/.gitignore +81 -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/index.html +123 -123
- package/coverage/lcov-report/prettify.css +101 -101
- package/coverage/lcov-report/prettify.js +937 -937
- 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/example/fetch-languages-sheets.js +77 -77
- package/dist/example/i18n.js +35846 -35846
- package/dist/example/index.html +47 -47
- package/dist/example/listener.html +62 -62
- package/dist/example/listener.js +282 -282
- package/dist/example/server.js +51 -51
- package/dist/example/speaker.html +145 -145
- package/dist/example/speakerUI.js +272 -272
- package/dist/example/styles.css +92 -92
- package/dist/main.js +17 -17
- 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.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.svg +1829 -1829
- package/doc/fonts/OpenSans-BoldItalic-webfont.svg +1829 -1829
- package/doc/fonts/OpenSans-Italic-webfont.svg +1829 -1829
- package/doc/fonts/OpenSans-Light-webfont.svg +1830 -1830
- package/doc/fonts/OpenSans-LightItalic-webfont.svg +1834 -1834
- package/doc/fonts/OpenSans-Regular-webfont.svg +1830 -1830
- 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/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/netlify.toml +26 -26
- package/package.json +69 -69
- package/src/config/firebase.js +25 -25
- package/src/index.html +21 -21
- package/src/main.js +23 -23
- package/src/myEventEmitter.js +83 -83
- package/src/peer-connection/audioPeer.js +151 -151
- package/src/peer-connection/listener.js +306 -306
- package/src/peer-connection/peerErrors.js +25 -25
- package/src/peer-connection/speaker.js +471 -471
- package/src/server/PythonServerAPI.js +587 -587
- package/src/tasks/audioCalibrator.js +308 -308
- package/src/tasks/audioRecorder.js +281 -281
- package/src/tasks/combination/combination.js +2092 -2036
- 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 +88 -88
- package/webpack.config.js +37 -37
- package/makefile +0 -74
package/dist/example/listener.js
CHANGED
|
@@ -1,282 +1,282 @@
|
|
|
1
|
-
// get element with id message
|
|
2
|
-
import {phrases} from './i18n.js';
|
|
3
|
-
// get url query parameters
|
|
4
|
-
const urlParams = new URLSearchParams(window.location.search);
|
|
5
|
-
|
|
6
|
-
// get isSmartPhone query parameter
|
|
7
|
-
const isSmartPhone = urlParams.get('isSmartPhone');
|
|
8
|
-
|
|
9
|
-
const listenerParameters = {
|
|
10
|
-
targetElementId: 'display',
|
|
11
|
-
deviceInfoFromUser: {},
|
|
12
|
-
};
|
|
13
|
-
|
|
14
|
-
let preferredModelNumber = '';
|
|
15
|
-
let findModel = '';
|
|
16
|
-
const getDeviceDetails = deviceInfo => {
|
|
17
|
-
let OS = '';
|
|
18
|
-
switch (deviceInfo.PlatformName) {
|
|
19
|
-
case 'iOS':
|
|
20
|
-
OS = 'IOS';
|
|
21
|
-
break;
|
|
22
|
-
case 'mac':
|
|
23
|
-
OS = 'macOS';
|
|
24
|
-
break;
|
|
25
|
-
case 'win':
|
|
26
|
-
OS = 'Windows';
|
|
27
|
-
break;
|
|
28
|
-
case 'Android':
|
|
29
|
-
OS = 'Android';
|
|
30
|
-
break;
|
|
31
|
-
case 'cros':
|
|
32
|
-
OS = 'ChromeOS';
|
|
33
|
-
break;
|
|
34
|
-
case 'Linux':
|
|
35
|
-
OS = 'Linux';
|
|
36
|
-
break;
|
|
37
|
-
case 'openbsd':
|
|
38
|
-
OS = 'Open/FreeBSD';
|
|
39
|
-
break;
|
|
40
|
-
case 'Fuchsia':
|
|
41
|
-
OS = 'Fuchsia';
|
|
42
|
-
break;
|
|
43
|
-
default:
|
|
44
|
-
OS = 'GenericOS';
|
|
45
|
-
break;
|
|
46
|
-
}
|
|
47
|
-
if (OS.includes('Android')) {
|
|
48
|
-
preferredModelNumber = phrases.RC_modelNumberAndroid['en-US'];
|
|
49
|
-
findModel = phrases.RC_findModelAndroid['en-US'];
|
|
50
|
-
} else if (OS.includes('Bada')) {
|
|
51
|
-
preferredModelNumber = phrases.RC_modelNumberBada['en-US'];
|
|
52
|
-
findModel = phrases.RC_findModelBada['en-US'];
|
|
53
|
-
} else if (OS.includes('Blackberry')) {
|
|
54
|
-
preferredModelNumber = phrases.RC_modelNumberBlackberry['en-US'];
|
|
55
|
-
findModel = phrases.RC_findModelBlackberry['en-US'];
|
|
56
|
-
} else if (OS.includes('Firefox')) {
|
|
57
|
-
preferredModelNumber = phrases.RC_modelNumberFirefox['en-US'];
|
|
58
|
-
findModel = phrases.RC_findModelFirefox['en-US'];
|
|
59
|
-
} else if (OS.includes('IOS')) {
|
|
60
|
-
preferredModelNumber = phrases.RC_modelNumberIOs['en-US'];
|
|
61
|
-
findModel = phrases.RC_findModelIOs['en-US'];
|
|
62
|
-
} else if (OS.includes('iPad')) {
|
|
63
|
-
preferredModelNumber = phrases.RC_modelNumberIPad['en-US'];
|
|
64
|
-
findModel = phrases.RC_findModelIPad['en-US'];
|
|
65
|
-
} else if (OS.includes('Linux')) {
|
|
66
|
-
preferredModelNumber = phrases.RC_modelNumberLinux['en-US'];
|
|
67
|
-
findModel = phrases.RC_findModelLinux['en-US'];
|
|
68
|
-
} else if (OS.includes('macOS')) {
|
|
69
|
-
preferredModelNumber = phrases.RC_modelNumberMacOs['en-US'];
|
|
70
|
-
findModel = phrases.RC_findModelMacOs['en-US'];
|
|
71
|
-
} else if (OS.includes('Maemo')) {
|
|
72
|
-
preferredModelNumber = phrases.RC_modelNumberMaemo['en-US'];
|
|
73
|
-
findModel = phrases.RC_findModelMaemo['en-US'];
|
|
74
|
-
} else if (OS.includes('Palm')) {
|
|
75
|
-
preferredModelNumber = phrases.RC_modelNumberPalm['en-US'];
|
|
76
|
-
findModel = phrases.RC_findModelPalm['en-US'];
|
|
77
|
-
} else if (OS.includes('WebOS')) {
|
|
78
|
-
preferredModelNumber = phrases.RC_modelNumberWebOS['en-US'];
|
|
79
|
-
findModel = phrases.RC_findModelWebOS['en-US'];
|
|
80
|
-
} else if (OS.includes('Windows')) {
|
|
81
|
-
preferredModelNumber = phrases.RC_modelNumberWindows['en-US'];
|
|
82
|
-
findModel = phrases.RC_findModelWindows['en-US'];
|
|
83
|
-
} else {
|
|
84
|
-
preferredModelNumber = phrases.RC_modelNumber['en-US'];
|
|
85
|
-
findModel = phrases.RC_findModeGeneric['en-US'];
|
|
86
|
-
}
|
|
87
|
-
};
|
|
88
|
-
|
|
89
|
-
const container = document.getElementById('listenerContainer');
|
|
90
|
-
const recordingInProgress = phrases.RC_soundRecording['en-US'];
|
|
91
|
-
const backToExperimentWindow = phrases.RC_backToExperimentWindow['en-US'];
|
|
92
|
-
const allowMicrophone = phrases.RC_allowMicrophoneUse['en-US'];
|
|
93
|
-
const placeSmartphoneMicrophone = phrases.RC_placeSmartphoneMicrophone['en-US'];
|
|
94
|
-
const turnMeToReadBelow = phrases.RC_turnMeToReadBelow['en-US'];
|
|
95
|
-
const recordingInProgressElement = document.getElementById('recordingInProgress');
|
|
96
|
-
const allowMicrophoneElement = document.getElementById('allowMicrophone');
|
|
97
|
-
const turnMessageElement = document.getElementById('turnMeToReadBelow');
|
|
98
|
-
const turnMessageElement2 = document.createElement('p');
|
|
99
|
-
turnMessageElement2.innerHTML = turnMeToReadBelow;
|
|
100
|
-
const askModelNumberElement = document.createElement('div');
|
|
101
|
-
// const modelNumberElement = document.getElementById('askModelNumberContent');
|
|
102
|
-
const modelNumberButton = document.createElement('button');
|
|
103
|
-
|
|
104
|
-
// ask for model number
|
|
105
|
-
const deviceInfo = {};
|
|
106
|
-
try {
|
|
107
|
-
fod.complete(function (data) {
|
|
108
|
-
deviceInfo['IsMobile'] = data.device['ismobile'];
|
|
109
|
-
deviceInfo['HardwareName'] = data.device['hardwarename'];
|
|
110
|
-
deviceInfo['HardwareFamily'] = data.device['hardwarefamily'];
|
|
111
|
-
deviceInfo['HardwareModel'] = data.device['hardwaremodel'];
|
|
112
|
-
deviceInfo['OEM'] = data.device['oem'];
|
|
113
|
-
deviceInfo['HardwareModelVariants'] = data.device['hardwaremodelvariants'];
|
|
114
|
-
deviceInfo['DeviceId'] = data.device['deviceid'];
|
|
115
|
-
deviceInfo['PlatformName'] = data.device['platformname'];
|
|
116
|
-
deviceInfo['PlatformVersion'] = data.device['platformversion'];
|
|
117
|
-
deviceInfo['DeviceType'] = data.device['devicetype'];
|
|
118
|
-
});
|
|
119
|
-
console.log(deviceInfo);
|
|
120
|
-
getDeviceDetails(deviceInfo);
|
|
121
|
-
} catch (error) {
|
|
122
|
-
console.error('Error fetching or executing script:', error.message);
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
switch (isSmartPhone) {
|
|
126
|
-
case 'true':
|
|
127
|
-
// add turnMessageElement2 to body
|
|
128
|
-
// document.body.appendChild(turnMessageElement2);
|
|
129
|
-
// style turnMessageElement2
|
|
130
|
-
// turnMessageElement2.style.position = 'absolute';
|
|
131
|
-
// turnMessageElement2.style.top = '20px';
|
|
132
|
-
// turnMessageElement2.style.fontSize = 'larger';
|
|
133
|
-
|
|
134
|
-
// add askModelNumberElement to body
|
|
135
|
-
document.body.appendChild(askModelNumberElement);
|
|
136
|
-
// style askModelNumberElement
|
|
137
|
-
// askModelNumberElement.style.transform = 'rotate(180deg)';
|
|
138
|
-
askModelNumberElement.style.marginTop = '10px';
|
|
139
|
-
askModelNumberElement.style.position = 'absolute';
|
|
140
|
-
askModelNumberElement.style.top = '0';
|
|
141
|
-
askModelNumberElement.style.left = '10px';
|
|
142
|
-
|
|
143
|
-
const askModelNumberContent = document.createElement('div');
|
|
144
|
-
askModelNumberContent.style.display = 'flex';
|
|
145
|
-
askModelNumberContent.style.flexDirection = 'column';
|
|
146
|
-
askModelNumberElement.appendChild(askModelNumberContent);
|
|
147
|
-
const p = document.createElement('p');
|
|
148
|
-
p.innerHTML = findModel;
|
|
149
|
-
p.style.marginTop = '10px';
|
|
150
|
-
askModelNumberContent.appendChild(p);
|
|
151
|
-
|
|
152
|
-
// create input box for model number and name
|
|
153
|
-
const modelNumberInput = document.createElement('input');
|
|
154
|
-
modelNumberInput.type = 'text';
|
|
155
|
-
modelNumberInput.id = 'modelNumberInput';
|
|
156
|
-
modelNumberInput.name = 'modelNumberInput';
|
|
157
|
-
modelNumberInput.placeholder = preferredModelNumber;
|
|
158
|
-
|
|
159
|
-
const modelNameInput = document.createElement('input');
|
|
160
|
-
modelNameInput.type = 'text';
|
|
161
|
-
modelNameInput.id = 'modelNameInput';
|
|
162
|
-
modelNameInput.name = 'modelNameInput';
|
|
163
|
-
modelNameInput.placeholder = 'Model Name';
|
|
164
|
-
|
|
165
|
-
askModelNumberContent.appendChild(modelNameInput);
|
|
166
|
-
askModelNumberContent.appendChild(modelNumberInput);
|
|
167
|
-
|
|
168
|
-
// add modelNumberButton to askModelNumberContent
|
|
169
|
-
askModelNumberContent.appendChild(modelNumberButton);
|
|
170
|
-
modelNumberButton.innerHTML = 'Proceed';
|
|
171
|
-
modelNumberButton.style.width = '30%';
|
|
172
|
-
// add class
|
|
173
|
-
modelNumberButton.classList.add(...['btn', 'btn-success']);
|
|
174
|
-
modelNumberButton.addEventListener('click', async () => {
|
|
175
|
-
modelNumberButton.innerHTML = 'Loading...';
|
|
176
|
-
await new Promise(async resolve => {
|
|
177
|
-
// get model number and name
|
|
178
|
-
const modelNumber = document.getElementById('modelNumberInput').value;
|
|
179
|
-
const modelName = document.getElementById('modelNameInput').value;
|
|
180
|
-
if (modelNumber === '' || modelName === '') {
|
|
181
|
-
alert('Please enter model number and name');
|
|
182
|
-
modelNumberButton.innerHTML = 'Proceed';
|
|
183
|
-
} else {
|
|
184
|
-
const oem = deviceInfo['OEM'].toLowerCase().split(' ').join('');
|
|
185
|
-
if (await speakerCalibrator.Speaker.doesMicrophoneExist(modelNumber, oem)) {
|
|
186
|
-
// remove the button
|
|
187
|
-
modelNumberButton.remove();
|
|
188
|
-
askModelNumberElement.remove();
|
|
189
|
-
turnMessageElement2.remove();
|
|
190
|
-
allowMicrophoneElement.innerHTML = placeSmartphoneMicrophone;
|
|
191
|
-
turnMessageElement.innerHTML = turnMeToReadBelow;
|
|
192
|
-
// show the html upsidedown
|
|
193
|
-
const phrasesContainer = document.getElementById('phrases');
|
|
194
|
-
// add class
|
|
195
|
-
phrasesContainer.classList.add('phrases');
|
|
196
|
-
const html = document.querySelector('html');
|
|
197
|
-
html.style.overflow = 'hidden';
|
|
198
|
-
const display = document.getElementById('updateDisplay');
|
|
199
|
-
display.classList.add('updateDisplay');
|
|
200
|
-
container.style.display = 'block';
|
|
201
|
-
// event listener for id calibrationBeginButton
|
|
202
|
-
const calibrationBeginButton = document.getElementById('calibrationBeginButton');
|
|
203
|
-
calibrationBeginButton.addEventListener('click', () => {
|
|
204
|
-
// remove the button
|
|
205
|
-
calibrationBeginButton.remove();
|
|
206
|
-
// remove turn message
|
|
207
|
-
turnMessageElement.remove();
|
|
208
|
-
// set the text of the html elements
|
|
209
|
-
recordingInProgressElement.innerHTML = recordingInProgress;
|
|
210
|
-
allowMicrophoneElement.innerHTML = allowMicrophone;
|
|
211
|
-
|
|
212
|
-
recordingInProgressElement.style.whiteSpace = 'nowrap';
|
|
213
|
-
recordingInProgressElement.style.fontWeight = 'bold';
|
|
214
|
-
// fit content
|
|
215
|
-
recordingInProgressElement.style.width = 'fit-content';
|
|
216
|
-
let fontSize = 100;
|
|
217
|
-
recordingInProgressElement.style.fontSize = fontSize + 'px';
|
|
218
|
-
|
|
219
|
-
while (
|
|
220
|
-
recordingInProgressElement.scrollWidth > window.innerWidth * 0.9 &&
|
|
221
|
-
fontSize > 10
|
|
222
|
-
) {
|
|
223
|
-
fontSize--;
|
|
224
|
-
recordingInProgressElement.style.fontSize = fontSize + 'px';
|
|
225
|
-
}
|
|
226
|
-
listenerParameters.deviceInfoFromUser = {
|
|
227
|
-
modelNumber,
|
|
228
|
-
modelName,
|
|
229
|
-
OEM: deviceInfo['OEM'],
|
|
230
|
-
};
|
|
231
|
-
window.listener = new speakerCalibrator.Listener(listenerParameters);
|
|
232
|
-
console.log(window.listener);
|
|
233
|
-
});
|
|
234
|
-
} else {
|
|
235
|
-
modelNumberButton.innerHTML = 'Proceed';
|
|
236
|
-
p.innerHTML =
|
|
237
|
-
findModel +
|
|
238
|
-
'<br>' +
|
|
239
|
-
phrases.RC_sorryPhoneMicrophone['en-US']
|
|
240
|
-
.replace('MMM', deviceInfo['OEM'])
|
|
241
|
-
.replace('NNN', modelName)
|
|
242
|
-
.replace('xxx', modelNumber);
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
});
|
|
246
|
-
modelNumberButton.innerHTML = 'Proceed';
|
|
247
|
-
});
|
|
248
|
-
|
|
249
|
-
break;
|
|
250
|
-
case 'false':
|
|
251
|
-
// remove the button
|
|
252
|
-
const calibrationBeginButton2 = document.getElementById('calibrationBeginButton');
|
|
253
|
-
calibrationBeginButton2.remove();
|
|
254
|
-
container.style.display = 'block';
|
|
255
|
-
// event listener for when the page is loaded
|
|
256
|
-
window.addEventListener('load', () => {
|
|
257
|
-
// set the text of the html elements
|
|
258
|
-
recordingInProgressElement.innerHTML = recordingInProgress;
|
|
259
|
-
allowMicrophoneElement.innerHTML = allowMicrophone;
|
|
260
|
-
|
|
261
|
-
recordingInProgressElement.style.whiteSpace = 'nowrap';
|
|
262
|
-
recordingInProgressElement.style.fontWeight = 'bold';
|
|
263
|
-
|
|
264
|
-
// fit content
|
|
265
|
-
recordingInProgressElement.style.width = 'fit-content';
|
|
266
|
-
let fontSize = 100;
|
|
267
|
-
recordingInProgressElement.style.fontSize = fontSize + 'px';
|
|
268
|
-
|
|
269
|
-
while (recordingInProgressElement.scrollWidth > window.innerWidth * 0.9 && fontSize > 10) {
|
|
270
|
-
fontSize--;
|
|
271
|
-
recordingInProgressElement.style.fontSize = fontSize + 'px';
|
|
272
|
-
}
|
|
273
|
-
const message = document.getElementById('message');
|
|
274
|
-
message.style.lineHeight = '2.5rem';
|
|
275
|
-
const p = document.createElement('p');
|
|
276
|
-
p.innerHTML = backToExperimentWindow;
|
|
277
|
-
message.appendChild(p);
|
|
278
|
-
window.listener = new speakerCalibrator.Listener(listenerParameters);
|
|
279
|
-
console.log(window.listener);
|
|
280
|
-
});
|
|
281
|
-
break;
|
|
282
|
-
}
|
|
1
|
+
// get element with id message
|
|
2
|
+
import {phrases} from './i18n.js';
|
|
3
|
+
// get url query parameters
|
|
4
|
+
const urlParams = new URLSearchParams(window.location.search);
|
|
5
|
+
|
|
6
|
+
// get isSmartPhone query parameter
|
|
7
|
+
const isSmartPhone = urlParams.get('isSmartPhone');
|
|
8
|
+
|
|
9
|
+
const listenerParameters = {
|
|
10
|
+
targetElementId: 'display',
|
|
11
|
+
deviceInfoFromUser: {},
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
let preferredModelNumber = '';
|
|
15
|
+
let findModel = '';
|
|
16
|
+
const getDeviceDetails = deviceInfo => {
|
|
17
|
+
let OS = '';
|
|
18
|
+
switch (deviceInfo.PlatformName) {
|
|
19
|
+
case 'iOS':
|
|
20
|
+
OS = 'IOS';
|
|
21
|
+
break;
|
|
22
|
+
case 'mac':
|
|
23
|
+
OS = 'macOS';
|
|
24
|
+
break;
|
|
25
|
+
case 'win':
|
|
26
|
+
OS = 'Windows';
|
|
27
|
+
break;
|
|
28
|
+
case 'Android':
|
|
29
|
+
OS = 'Android';
|
|
30
|
+
break;
|
|
31
|
+
case 'cros':
|
|
32
|
+
OS = 'ChromeOS';
|
|
33
|
+
break;
|
|
34
|
+
case 'Linux':
|
|
35
|
+
OS = 'Linux';
|
|
36
|
+
break;
|
|
37
|
+
case 'openbsd':
|
|
38
|
+
OS = 'Open/FreeBSD';
|
|
39
|
+
break;
|
|
40
|
+
case 'Fuchsia':
|
|
41
|
+
OS = 'Fuchsia';
|
|
42
|
+
break;
|
|
43
|
+
default:
|
|
44
|
+
OS = 'GenericOS';
|
|
45
|
+
break;
|
|
46
|
+
}
|
|
47
|
+
if (OS.includes('Android')) {
|
|
48
|
+
preferredModelNumber = phrases.RC_modelNumberAndroid['en-US'];
|
|
49
|
+
findModel = phrases.RC_findModelAndroid['en-US'];
|
|
50
|
+
} else if (OS.includes('Bada')) {
|
|
51
|
+
preferredModelNumber = phrases.RC_modelNumberBada['en-US'];
|
|
52
|
+
findModel = phrases.RC_findModelBada['en-US'];
|
|
53
|
+
} else if (OS.includes('Blackberry')) {
|
|
54
|
+
preferredModelNumber = phrases.RC_modelNumberBlackberry['en-US'];
|
|
55
|
+
findModel = phrases.RC_findModelBlackberry['en-US'];
|
|
56
|
+
} else if (OS.includes('Firefox')) {
|
|
57
|
+
preferredModelNumber = phrases.RC_modelNumberFirefox['en-US'];
|
|
58
|
+
findModel = phrases.RC_findModelFirefox['en-US'];
|
|
59
|
+
} else if (OS.includes('IOS')) {
|
|
60
|
+
preferredModelNumber = phrases.RC_modelNumberIOs['en-US'];
|
|
61
|
+
findModel = phrases.RC_findModelIOs['en-US'];
|
|
62
|
+
} else if (OS.includes('iPad')) {
|
|
63
|
+
preferredModelNumber = phrases.RC_modelNumberIPad['en-US'];
|
|
64
|
+
findModel = phrases.RC_findModelIPad['en-US'];
|
|
65
|
+
} else if (OS.includes('Linux')) {
|
|
66
|
+
preferredModelNumber = phrases.RC_modelNumberLinux['en-US'];
|
|
67
|
+
findModel = phrases.RC_findModelLinux['en-US'];
|
|
68
|
+
} else if (OS.includes('macOS')) {
|
|
69
|
+
preferredModelNumber = phrases.RC_modelNumberMacOs['en-US'];
|
|
70
|
+
findModel = phrases.RC_findModelMacOs['en-US'];
|
|
71
|
+
} else if (OS.includes('Maemo')) {
|
|
72
|
+
preferredModelNumber = phrases.RC_modelNumberMaemo['en-US'];
|
|
73
|
+
findModel = phrases.RC_findModelMaemo['en-US'];
|
|
74
|
+
} else if (OS.includes('Palm')) {
|
|
75
|
+
preferredModelNumber = phrases.RC_modelNumberPalm['en-US'];
|
|
76
|
+
findModel = phrases.RC_findModelPalm['en-US'];
|
|
77
|
+
} else if (OS.includes('WebOS')) {
|
|
78
|
+
preferredModelNumber = phrases.RC_modelNumberWebOS['en-US'];
|
|
79
|
+
findModel = phrases.RC_findModelWebOS['en-US'];
|
|
80
|
+
} else if (OS.includes('Windows')) {
|
|
81
|
+
preferredModelNumber = phrases.RC_modelNumberWindows['en-US'];
|
|
82
|
+
findModel = phrases.RC_findModelWindows['en-US'];
|
|
83
|
+
} else {
|
|
84
|
+
preferredModelNumber = phrases.RC_modelNumber['en-US'];
|
|
85
|
+
findModel = phrases.RC_findModeGeneric['en-US'];
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
const container = document.getElementById('listenerContainer');
|
|
90
|
+
const recordingInProgress = phrases.RC_soundRecording['en-US'];
|
|
91
|
+
const backToExperimentWindow = phrases.RC_backToExperimentWindow['en-US'];
|
|
92
|
+
const allowMicrophone = phrases.RC_allowMicrophoneUse['en-US'];
|
|
93
|
+
const placeSmartphoneMicrophone = phrases.RC_placeSmartphoneMicrophone['en-US'];
|
|
94
|
+
const turnMeToReadBelow = phrases.RC_turnMeToReadBelow['en-US'];
|
|
95
|
+
const recordingInProgressElement = document.getElementById('recordingInProgress');
|
|
96
|
+
const allowMicrophoneElement = document.getElementById('allowMicrophone');
|
|
97
|
+
const turnMessageElement = document.getElementById('turnMeToReadBelow');
|
|
98
|
+
const turnMessageElement2 = document.createElement('p');
|
|
99
|
+
turnMessageElement2.innerHTML = turnMeToReadBelow;
|
|
100
|
+
const askModelNumberElement = document.createElement('div');
|
|
101
|
+
// const modelNumberElement = document.getElementById('askModelNumberContent');
|
|
102
|
+
const modelNumberButton = document.createElement('button');
|
|
103
|
+
|
|
104
|
+
// ask for model number
|
|
105
|
+
const deviceInfo = {};
|
|
106
|
+
try {
|
|
107
|
+
fod.complete(function (data) {
|
|
108
|
+
deviceInfo['IsMobile'] = data.device['ismobile'];
|
|
109
|
+
deviceInfo['HardwareName'] = data.device['hardwarename'];
|
|
110
|
+
deviceInfo['HardwareFamily'] = data.device['hardwarefamily'];
|
|
111
|
+
deviceInfo['HardwareModel'] = data.device['hardwaremodel'];
|
|
112
|
+
deviceInfo['OEM'] = data.device['oem'];
|
|
113
|
+
deviceInfo['HardwareModelVariants'] = data.device['hardwaremodelvariants'];
|
|
114
|
+
deviceInfo['DeviceId'] = data.device['deviceid'];
|
|
115
|
+
deviceInfo['PlatformName'] = data.device['platformname'];
|
|
116
|
+
deviceInfo['PlatformVersion'] = data.device['platformversion'];
|
|
117
|
+
deviceInfo['DeviceType'] = data.device['devicetype'];
|
|
118
|
+
});
|
|
119
|
+
console.log(deviceInfo);
|
|
120
|
+
getDeviceDetails(deviceInfo);
|
|
121
|
+
} catch (error) {
|
|
122
|
+
console.error('Error fetching or executing script:', error.message);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
switch (isSmartPhone) {
|
|
126
|
+
case 'true':
|
|
127
|
+
// add turnMessageElement2 to body
|
|
128
|
+
// document.body.appendChild(turnMessageElement2);
|
|
129
|
+
// style turnMessageElement2
|
|
130
|
+
// turnMessageElement2.style.position = 'absolute';
|
|
131
|
+
// turnMessageElement2.style.top = '20px';
|
|
132
|
+
// turnMessageElement2.style.fontSize = 'larger';
|
|
133
|
+
|
|
134
|
+
// add askModelNumberElement to body
|
|
135
|
+
document.body.appendChild(askModelNumberElement);
|
|
136
|
+
// style askModelNumberElement
|
|
137
|
+
// askModelNumberElement.style.transform = 'rotate(180deg)';
|
|
138
|
+
askModelNumberElement.style.marginTop = '10px';
|
|
139
|
+
askModelNumberElement.style.position = 'absolute';
|
|
140
|
+
askModelNumberElement.style.top = '0';
|
|
141
|
+
askModelNumberElement.style.left = '10px';
|
|
142
|
+
|
|
143
|
+
const askModelNumberContent = document.createElement('div');
|
|
144
|
+
askModelNumberContent.style.display = 'flex';
|
|
145
|
+
askModelNumberContent.style.flexDirection = 'column';
|
|
146
|
+
askModelNumberElement.appendChild(askModelNumberContent);
|
|
147
|
+
const p = document.createElement('p');
|
|
148
|
+
p.innerHTML = findModel;
|
|
149
|
+
p.style.marginTop = '10px';
|
|
150
|
+
askModelNumberContent.appendChild(p);
|
|
151
|
+
|
|
152
|
+
// create input box for model number and name
|
|
153
|
+
const modelNumberInput = document.createElement('input');
|
|
154
|
+
modelNumberInput.type = 'text';
|
|
155
|
+
modelNumberInput.id = 'modelNumberInput';
|
|
156
|
+
modelNumberInput.name = 'modelNumberInput';
|
|
157
|
+
modelNumberInput.placeholder = preferredModelNumber;
|
|
158
|
+
|
|
159
|
+
const modelNameInput = document.createElement('input');
|
|
160
|
+
modelNameInput.type = 'text';
|
|
161
|
+
modelNameInput.id = 'modelNameInput';
|
|
162
|
+
modelNameInput.name = 'modelNameInput';
|
|
163
|
+
modelNameInput.placeholder = 'Model Name';
|
|
164
|
+
|
|
165
|
+
askModelNumberContent.appendChild(modelNameInput);
|
|
166
|
+
askModelNumberContent.appendChild(modelNumberInput);
|
|
167
|
+
|
|
168
|
+
// add modelNumberButton to askModelNumberContent
|
|
169
|
+
askModelNumberContent.appendChild(modelNumberButton);
|
|
170
|
+
modelNumberButton.innerHTML = 'Proceed';
|
|
171
|
+
modelNumberButton.style.width = '30%';
|
|
172
|
+
// add class
|
|
173
|
+
modelNumberButton.classList.add(...['btn', 'btn-success']);
|
|
174
|
+
modelNumberButton.addEventListener('click', async () => {
|
|
175
|
+
modelNumberButton.innerHTML = 'Loading...';
|
|
176
|
+
await new Promise(async resolve => {
|
|
177
|
+
// get model number and name
|
|
178
|
+
const modelNumber = document.getElementById('modelNumberInput').value;
|
|
179
|
+
const modelName = document.getElementById('modelNameInput').value;
|
|
180
|
+
if (modelNumber === '' || modelName === '') {
|
|
181
|
+
alert('Please enter model number and name');
|
|
182
|
+
modelNumberButton.innerHTML = 'Proceed';
|
|
183
|
+
} else {
|
|
184
|
+
const oem = deviceInfo['OEM'].toLowerCase().split(' ').join('');
|
|
185
|
+
if (await speakerCalibrator.Speaker.doesMicrophoneExist(modelNumber, oem)) {
|
|
186
|
+
// remove the button
|
|
187
|
+
modelNumberButton.remove();
|
|
188
|
+
askModelNumberElement.remove();
|
|
189
|
+
turnMessageElement2.remove();
|
|
190
|
+
allowMicrophoneElement.innerHTML = placeSmartphoneMicrophone;
|
|
191
|
+
turnMessageElement.innerHTML = turnMeToReadBelow;
|
|
192
|
+
// show the html upsidedown
|
|
193
|
+
const phrasesContainer = document.getElementById('phrases');
|
|
194
|
+
// add class
|
|
195
|
+
phrasesContainer.classList.add('phrases');
|
|
196
|
+
const html = document.querySelector('html');
|
|
197
|
+
html.style.overflow = 'hidden';
|
|
198
|
+
const display = document.getElementById('updateDisplay');
|
|
199
|
+
display.classList.add('updateDisplay');
|
|
200
|
+
container.style.display = 'block';
|
|
201
|
+
// event listener for id calibrationBeginButton
|
|
202
|
+
const calibrationBeginButton = document.getElementById('calibrationBeginButton');
|
|
203
|
+
calibrationBeginButton.addEventListener('click', () => {
|
|
204
|
+
// remove the button
|
|
205
|
+
calibrationBeginButton.remove();
|
|
206
|
+
// remove turn message
|
|
207
|
+
turnMessageElement.remove();
|
|
208
|
+
// set the text of the html elements
|
|
209
|
+
recordingInProgressElement.innerHTML = recordingInProgress;
|
|
210
|
+
allowMicrophoneElement.innerHTML = allowMicrophone;
|
|
211
|
+
|
|
212
|
+
recordingInProgressElement.style.whiteSpace = 'nowrap';
|
|
213
|
+
recordingInProgressElement.style.fontWeight = 'bold';
|
|
214
|
+
// fit content
|
|
215
|
+
recordingInProgressElement.style.width = 'fit-content';
|
|
216
|
+
let fontSize = 100;
|
|
217
|
+
recordingInProgressElement.style.fontSize = fontSize + 'px';
|
|
218
|
+
|
|
219
|
+
while (
|
|
220
|
+
recordingInProgressElement.scrollWidth > window.innerWidth * 0.9 &&
|
|
221
|
+
fontSize > 10
|
|
222
|
+
) {
|
|
223
|
+
fontSize--;
|
|
224
|
+
recordingInProgressElement.style.fontSize = fontSize + 'px';
|
|
225
|
+
}
|
|
226
|
+
listenerParameters.deviceInfoFromUser = {
|
|
227
|
+
modelNumber,
|
|
228
|
+
modelName,
|
|
229
|
+
OEM: deviceInfo['OEM'],
|
|
230
|
+
};
|
|
231
|
+
window.listener = new speakerCalibrator.Listener(listenerParameters);
|
|
232
|
+
console.log(window.listener);
|
|
233
|
+
});
|
|
234
|
+
} else {
|
|
235
|
+
modelNumberButton.innerHTML = 'Proceed';
|
|
236
|
+
p.innerHTML =
|
|
237
|
+
findModel +
|
|
238
|
+
'<br>' +
|
|
239
|
+
phrases.RC_sorryPhoneMicrophone['en-US']
|
|
240
|
+
.replace('MMM', deviceInfo['OEM'])
|
|
241
|
+
.replace('NNN', modelName)
|
|
242
|
+
.replace('xxx', modelNumber);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
});
|
|
246
|
+
modelNumberButton.innerHTML = 'Proceed';
|
|
247
|
+
});
|
|
248
|
+
|
|
249
|
+
break;
|
|
250
|
+
case 'false':
|
|
251
|
+
// remove the button
|
|
252
|
+
const calibrationBeginButton2 = document.getElementById('calibrationBeginButton');
|
|
253
|
+
calibrationBeginButton2.remove();
|
|
254
|
+
container.style.display = 'block';
|
|
255
|
+
// event listener for when the page is loaded
|
|
256
|
+
window.addEventListener('load', () => {
|
|
257
|
+
// set the text of the html elements
|
|
258
|
+
recordingInProgressElement.innerHTML = recordingInProgress;
|
|
259
|
+
allowMicrophoneElement.innerHTML = allowMicrophone;
|
|
260
|
+
|
|
261
|
+
recordingInProgressElement.style.whiteSpace = 'nowrap';
|
|
262
|
+
recordingInProgressElement.style.fontWeight = 'bold';
|
|
263
|
+
|
|
264
|
+
// fit content
|
|
265
|
+
recordingInProgressElement.style.width = 'fit-content';
|
|
266
|
+
let fontSize = 100;
|
|
267
|
+
recordingInProgressElement.style.fontSize = fontSize + 'px';
|
|
268
|
+
|
|
269
|
+
while (recordingInProgressElement.scrollWidth > window.innerWidth * 0.9 && fontSize > 10) {
|
|
270
|
+
fontSize--;
|
|
271
|
+
recordingInProgressElement.style.fontSize = fontSize + 'px';
|
|
272
|
+
}
|
|
273
|
+
const message = document.getElementById('message');
|
|
274
|
+
message.style.lineHeight = '2.5rem';
|
|
275
|
+
const p = document.createElement('p');
|
|
276
|
+
p.innerHTML = backToExperimentWindow;
|
|
277
|
+
message.appendChild(p);
|
|
278
|
+
window.listener = new speakerCalibrator.Listener(listenerParameters);
|
|
279
|
+
console.log(window.listener);
|
|
280
|
+
});
|
|
281
|
+
break;
|
|
282
|
+
}
|