speaker-calibration 2.2.111 → 2.2.112
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 +129 -129
- 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 +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 +26 -26
- 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 +327 -327
- package/src/peer-connection/peerErrors.js +25 -25
- package/src/peer-connection/speaker.js +474 -474
- package/src/server/PythonServerAPI.js +673 -673
- package/src/tasks/audioCalibrator.js +308 -308
- package/src/tasks/audioRecorder.js +301 -301
- package/src/tasks/combination/combination.js +2424 -2421
- 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 +135 -135
- package/webpack.config.js +37 -37
- package/makefile +0 -74
package/src/utils.js
CHANGED
|
@@ -1,135 +1,135 @@
|
|
|
1
|
-
/** .
|
|
2
|
-
* .
|
|
3
|
-
* .
|
|
4
|
-
* Utlity function to pause execution for a given time
|
|
5
|
-
*
|
|
6
|
-
* @param {number} seconds
|
|
7
|
-
* @returns {Promise}
|
|
8
|
-
* @example
|
|
9
|
-
*/
|
|
10
|
-
const sleep = seconds =>
|
|
11
|
-
new Promise(resolve => {
|
|
12
|
-
setTimeout(resolve, seconds * 1000);
|
|
13
|
-
});
|
|
14
|
-
|
|
15
|
-
/** .
|
|
16
|
-
* .
|
|
17
|
-
* .
|
|
18
|
-
* Uiltity function to create and save a CSV file from a buffer
|
|
19
|
-
*
|
|
20
|
-
* @param {*} data
|
|
21
|
-
* @param {*} filename
|
|
22
|
-
* @example
|
|
23
|
-
*/
|
|
24
|
-
const saveToCSV = (data, filename = 'recordedMLSignal.csv') => {
|
|
25
|
-
// console.log(data)
|
|
26
|
-
let csvContent = 'data:text/csv;charset=utf-8,';
|
|
27
|
-
|
|
28
|
-
data.forEach((val, idx) => {
|
|
29
|
-
csvContent += `${idx},${val}\r\n`;
|
|
30
|
-
});
|
|
31
|
-
const encodedUri = encodeURI(csvContent);
|
|
32
|
-
const link = document.createElement('a');
|
|
33
|
-
link.setAttribute('href', encodedUri);
|
|
34
|
-
link.setAttribute('download', filename);
|
|
35
|
-
document.body.appendChild(link);
|
|
36
|
-
link.click();
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
const saveToJSON = (data, filename = 'recordedMLSignal.json') => {
|
|
40
|
-
const jsonData = JSON.stringify(data, null, 2);
|
|
41
|
-
const blob = new Blob([jsonData], { type: 'application/json' });
|
|
42
|
-
const url = URL.createObjectURL(blob);
|
|
43
|
-
const link = document.createElement('a');
|
|
44
|
-
link.setAttribute('href', url);
|
|
45
|
-
link.setAttribute('download', filename);
|
|
46
|
-
document.body.appendChild(link);
|
|
47
|
-
link.click();
|
|
48
|
-
URL.revokeObjectURL(url);
|
|
49
|
-
};
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
/** .
|
|
53
|
-
* .
|
|
54
|
-
* .
|
|
55
|
-
* Utility function to create a buffer from a CSV file
|
|
56
|
-
*
|
|
57
|
-
* @param {*} csvString
|
|
58
|
-
* @param {*} delimiter
|
|
59
|
-
* @returns
|
|
60
|
-
* @example
|
|
61
|
-
*/
|
|
62
|
-
const csvToArray = (csvString, delimiter = ',') =>
|
|
63
|
-
csvString
|
|
64
|
-
.trim()
|
|
65
|
-
.split('\n')
|
|
66
|
-
.map(row => parseFloat(row.trim().split(delimiter)[1]));
|
|
67
|
-
|
|
68
|
-
const findMinValue = (array) => {
|
|
69
|
-
let minValue = array[0];
|
|
70
|
-
for (let i = 1; i < array.length; i++) {
|
|
71
|
-
if (array[i] < minValue) {
|
|
72
|
-
minValue = array[i];
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
return minValue;
|
|
76
|
-
};
|
|
77
|
-
|
|
78
|
-
const findMaxValue = (array) => {
|
|
79
|
-
let maxValue = array[0];
|
|
80
|
-
for (let i = 1; i < array.length; i++) {
|
|
81
|
-
if (array[i] > maxValue) {
|
|
82
|
-
maxValue = array[i];
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
return maxValue;
|
|
86
|
-
};
|
|
87
|
-
|
|
88
|
-
export const getCurrentTimeString = () => {
|
|
89
|
-
const date = new Date();
|
|
90
|
-
|
|
91
|
-
// Get the date string in the user's locale
|
|
92
|
-
const dateOptions = {
|
|
93
|
-
year: "numeric",
|
|
94
|
-
month: "long",
|
|
95
|
-
day: "numeric",
|
|
96
|
-
timeZoneName: "longOffset",
|
|
97
|
-
hour: "numeric",
|
|
98
|
-
minute: "numeric",
|
|
99
|
-
};
|
|
100
|
-
const dateString = date.toLocaleDateString(undefined, dateOptions);
|
|
101
|
-
|
|
102
|
-
return dateString.replace("at ", "");
|
|
103
|
-
};
|
|
104
|
-
|
|
105
|
-
const standardDeviation = (values) => {
|
|
106
|
-
const avg = average(values);
|
|
107
|
-
|
|
108
|
-
const squareDiffs = values.map((value) => {
|
|
109
|
-
const diff = value - avg;
|
|
110
|
-
const sqrDiff = diff * diff;
|
|
111
|
-
return sqrDiff;
|
|
112
|
-
});
|
|
113
|
-
|
|
114
|
-
const avgSquareDiff = average(squareDiffs);
|
|
115
|
-
|
|
116
|
-
const stdDev = Math.sqrt(avgSquareDiff);
|
|
117
|
-
// only 1 digit after the decimal place
|
|
118
|
-
const std = Math.round(stdDev * 10) / 10;
|
|
119
|
-
return std.toFixed(1);
|
|
120
|
-
};
|
|
121
|
-
|
|
122
|
-
const average = (data) => {
|
|
123
|
-
const sum = data.reduce((sum, value) => {
|
|
124
|
-
return sum + value;
|
|
125
|
-
}, 0);
|
|
126
|
-
|
|
127
|
-
const avg = sum / data.length;
|
|
128
|
-
return avg;
|
|
129
|
-
};
|
|
130
|
-
|
|
131
|
-
function interpolate(x, x0, x1, y0, y1) {
|
|
132
|
-
return y0 + (y1 - y0) * (x - x0) / (x1 - x0);
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
export {sleep, saveToCSV, saveToJSON, csvToArray,findMinValue,findMaxValue, standardDeviation, interpolate};
|
|
1
|
+
/** .
|
|
2
|
+
* .
|
|
3
|
+
* .
|
|
4
|
+
* Utlity function to pause execution for a given time
|
|
5
|
+
*
|
|
6
|
+
* @param {number} seconds
|
|
7
|
+
* @returns {Promise}
|
|
8
|
+
* @example
|
|
9
|
+
*/
|
|
10
|
+
const sleep = seconds =>
|
|
11
|
+
new Promise(resolve => {
|
|
12
|
+
setTimeout(resolve, seconds * 1000);
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
/** .
|
|
16
|
+
* .
|
|
17
|
+
* .
|
|
18
|
+
* Uiltity function to create and save a CSV file from a buffer
|
|
19
|
+
*
|
|
20
|
+
* @param {*} data
|
|
21
|
+
* @param {*} filename
|
|
22
|
+
* @example
|
|
23
|
+
*/
|
|
24
|
+
const saveToCSV = (data, filename = 'recordedMLSignal.csv') => {
|
|
25
|
+
// console.log(data)
|
|
26
|
+
let csvContent = 'data:text/csv;charset=utf-8,';
|
|
27
|
+
|
|
28
|
+
data.forEach((val, idx) => {
|
|
29
|
+
csvContent += `${idx},${val}\r\n`;
|
|
30
|
+
});
|
|
31
|
+
const encodedUri = encodeURI(csvContent);
|
|
32
|
+
const link = document.createElement('a');
|
|
33
|
+
link.setAttribute('href', encodedUri);
|
|
34
|
+
link.setAttribute('download', filename);
|
|
35
|
+
document.body.appendChild(link);
|
|
36
|
+
link.click();
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
const saveToJSON = (data, filename = 'recordedMLSignal.json') => {
|
|
40
|
+
const jsonData = JSON.stringify(data, null, 2);
|
|
41
|
+
const blob = new Blob([jsonData], { type: 'application/json' });
|
|
42
|
+
const url = URL.createObjectURL(blob);
|
|
43
|
+
const link = document.createElement('a');
|
|
44
|
+
link.setAttribute('href', url);
|
|
45
|
+
link.setAttribute('download', filename);
|
|
46
|
+
document.body.appendChild(link);
|
|
47
|
+
link.click();
|
|
48
|
+
URL.revokeObjectURL(url);
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
/** .
|
|
53
|
+
* .
|
|
54
|
+
* .
|
|
55
|
+
* Utility function to create a buffer from a CSV file
|
|
56
|
+
*
|
|
57
|
+
* @param {*} csvString
|
|
58
|
+
* @param {*} delimiter
|
|
59
|
+
* @returns
|
|
60
|
+
* @example
|
|
61
|
+
*/
|
|
62
|
+
const csvToArray = (csvString, delimiter = ',') =>
|
|
63
|
+
csvString
|
|
64
|
+
.trim()
|
|
65
|
+
.split('\n')
|
|
66
|
+
.map(row => parseFloat(row.trim().split(delimiter)[1]));
|
|
67
|
+
|
|
68
|
+
const findMinValue = (array) => {
|
|
69
|
+
let minValue = array[0];
|
|
70
|
+
for (let i = 1; i < array.length; i++) {
|
|
71
|
+
if (array[i] < minValue) {
|
|
72
|
+
minValue = array[i];
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return minValue;
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
const findMaxValue = (array) => {
|
|
79
|
+
let maxValue = array[0];
|
|
80
|
+
for (let i = 1; i < array.length; i++) {
|
|
81
|
+
if (array[i] > maxValue) {
|
|
82
|
+
maxValue = array[i];
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return maxValue;
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
export const getCurrentTimeString = () => {
|
|
89
|
+
const date = new Date();
|
|
90
|
+
|
|
91
|
+
// Get the date string in the user's locale
|
|
92
|
+
const dateOptions = {
|
|
93
|
+
year: "numeric",
|
|
94
|
+
month: "long",
|
|
95
|
+
day: "numeric",
|
|
96
|
+
timeZoneName: "longOffset",
|
|
97
|
+
hour: "numeric",
|
|
98
|
+
minute: "numeric",
|
|
99
|
+
};
|
|
100
|
+
const dateString = date.toLocaleDateString(undefined, dateOptions);
|
|
101
|
+
|
|
102
|
+
return dateString.replace("at ", "");
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
const standardDeviation = (values) => {
|
|
106
|
+
const avg = average(values);
|
|
107
|
+
|
|
108
|
+
const squareDiffs = values.map((value) => {
|
|
109
|
+
const diff = value - avg;
|
|
110
|
+
const sqrDiff = diff * diff;
|
|
111
|
+
return sqrDiff;
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
const avgSquareDiff = average(squareDiffs);
|
|
115
|
+
|
|
116
|
+
const stdDev = Math.sqrt(avgSquareDiff);
|
|
117
|
+
// only 1 digit after the decimal place
|
|
118
|
+
const std = Math.round(stdDev * 10) / 10;
|
|
119
|
+
return std.toFixed(1);
|
|
120
|
+
};
|
|
121
|
+
|
|
122
|
+
const average = (data) => {
|
|
123
|
+
const sum = data.reduce((sum, value) => {
|
|
124
|
+
return sum + value;
|
|
125
|
+
}, 0);
|
|
126
|
+
|
|
127
|
+
const avg = sum / data.length;
|
|
128
|
+
return avg;
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
function interpolate(x, x0, x1, y0, y1) {
|
|
132
|
+
return y0 + (y1 - y0) * (x - x0) / (x1 - x0);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
export {sleep, saveToCSV, saveToJSON, csvToArray,findMinValue,findMaxValue, standardDeviation, interpolate};
|
package/webpack.config.js
CHANGED
|
@@ -1,37 +1,37 @@
|
|
|
1
|
-
const path = require('path');
|
|
2
|
-
const {BundleAnalyzerPlugin} = require('webpack-bundle-analyzer');
|
|
3
|
-
|
|
4
|
-
const config = {
|
|
5
|
-
entry: {
|
|
6
|
-
main: './src/main.js',
|
|
7
|
-
},
|
|
8
|
-
output: {
|
|
9
|
-
path: path.resolve(__dirname, 'dist'),
|
|
10
|
-
filename: '[name].js',
|
|
11
|
-
library: {
|
|
12
|
-
name: 'speakerCalibrator',
|
|
13
|
-
type: 'umd',
|
|
14
|
-
},
|
|
15
|
-
},
|
|
16
|
-
module: {
|
|
17
|
-
rules: [
|
|
18
|
-
{
|
|
19
|
-
test: /\.css$/,
|
|
20
|
-
use: ['style-loader', 'css-loader'],
|
|
21
|
-
},
|
|
22
|
-
],
|
|
23
|
-
},
|
|
24
|
-
plugins: [],
|
|
25
|
-
resolve: {
|
|
26
|
-
fallback: {
|
|
27
|
-
path: require.resolve('path-browserify'),
|
|
28
|
-
fs: false,
|
|
29
|
-
},
|
|
30
|
-
},
|
|
31
|
-
};
|
|
32
|
-
|
|
33
|
-
if (process.env.WEBPACK_ANALYZE === 'true') {
|
|
34
|
-
config.plugins.push(new BundleAnalyzerPlugin());
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
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
|
+
},
|
|
8
|
+
output: {
|
|
9
|
+
path: path.resolve(__dirname, 'dist'),
|
|
10
|
+
filename: '[name].js',
|
|
11
|
+
library: {
|
|
12
|
+
name: 'speakerCalibrator',
|
|
13
|
+
type: 'umd',
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
module: {
|
|
17
|
+
rules: [
|
|
18
|
+
{
|
|
19
|
+
test: /\.css$/,
|
|
20
|
+
use: ['style-loader', 'css-loader'],
|
|
21
|
+
},
|
|
22
|
+
],
|
|
23
|
+
},
|
|
24
|
+
plugins: [],
|
|
25
|
+
resolve: {
|
|
26
|
+
fallback: {
|
|
27
|
+
path: require.resolve('path-browserify'),
|
|
28
|
+
fs: false,
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
if (process.env.WEBPACK_ANALYZE === 'true') {
|
|
34
|
+
config.plugins.push(new BundleAnalyzerPlugin());
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
module.exports = config;
|
package/makefile
DELETED
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
##################################### UTILITIES ######################################
|
|
2
|
-
COM_COLOR = \033[0;34m
|
|
3
|
-
OBJ_COLOR = \033[0;36m
|
|
4
|
-
OK_COLOR = \033[0;32m
|
|
5
|
-
ERROR_COLOR = \033[0;31m
|
|
6
|
-
WARN_COLOR = \033[0;33m
|
|
7
|
-
NO_COLOR = \033[m
|
|
8
|
-
|
|
9
|
-
OK_STRING = "[OK]"
|
|
10
|
-
ERROR_STRING = "[ERROR]"
|
|
11
|
-
WARN_STRING = "[WARNING]"
|
|
12
|
-
COM_STRING = "Compiling..."
|
|
13
|
-
|
|
14
|
-
define run_and_test
|
|
15
|
-
printf "%b" "$(COM_COLOR)$(COM_STRING) $(OBJ_COLOR)$(@F)$(NO_COLOR)\r"; \
|
|
16
|
-
$(1) 2> $@.log; \
|
|
17
|
-
RESULT=$$?; \
|
|
18
|
-
if [ $$RESULT -ne 0 ]; then \
|
|
19
|
-
printf "%-60b%b" "$(COM_COLOR)$(COM_STRING)$(OBJ_COLOR) $@" "$(ERROR_COLOR)$(ERROR_STRING)$(NO_COLOR)\n" ; \
|
|
20
|
-
elif [ -s $@.log ]; then \
|
|
21
|
-
printf "%-60b%b" "$(COM_COLOR)$(COM_STRING)$(OBJ_COLOR) $@" "$(WARN_COLOR)$(WARN_STRING)$(NO_COLOR)\n" ; \
|
|
22
|
-
else \
|
|
23
|
-
printf "%-60b%b" "$(COM_COLOR)$(COM_STRING)$(OBJ_COLOR) $(@F)" "$(OK_COLOR)$(OK_STRING)$(NO_COLOR)\n" ; \
|
|
24
|
-
fi; \
|
|
25
|
-
cat $@.log; \
|
|
26
|
-
rm -f $@.log; \
|
|
27
|
-
exit $$RESULT
|
|
28
|
-
endef
|
|
29
|
-
|
|
30
|
-
##################################### WASM ########################################
|
|
31
|
-
PROJECT_NAME = mlsGen
|
|
32
|
-
|
|
33
|
-
# directories
|
|
34
|
-
DIST_DIR = ./dist/
|
|
35
|
-
SRC_DIR = $(addprefix ./src/tasks/impulse-response/,$(PROJECT_NAME)/)
|
|
36
|
-
|
|
37
|
-
# WASM files
|
|
38
|
-
SRC_FILE := $(addprefix $(SRC_DIR),$(PROJECT_NAME).cpp) # SRC_DIR + PROJECT_NAME + .cpp
|
|
39
|
-
OBJ_FILE := $(addprefix $(SRC_DIR),$(PROJECT_NAME).o)
|
|
40
|
-
OUTPUT_WASM_JS := $(addprefix $(DIST_DIR),$(PROJECT_NAME).js) # DIST_DIR + PROJECT_NAME + .js
|
|
41
|
-
OUTPUT_WASM := $(addprefix $(DIST_DIR),$(PROJECT_NAME).wasm) # DIST_DIR + PROJECT_NAME + .wasm
|
|
42
|
-
OUTPUT := $(addprefix $(DIST_DIR),$(PROJECT_NAME).*) # DIST_DIR + PROJECT_NAME + .*
|
|
43
|
-
|
|
44
|
-
# emcc compiler options
|
|
45
|
-
EMCC = em++ # emcc compiler front end
|
|
46
|
-
STD = --std=c++17 # C++ standard
|
|
47
|
-
OPTIMIZE = -O3 # Optimization level O0 ~ 28.8 kB, O1 ~ 20.3 kB, O2 ~ 20.3 kB, O3 ~ 19.7 kB
|
|
48
|
-
ENV = -s ENVIRONMENT='web' # environment
|
|
49
|
-
NOENTRY = --no-entry # no entry point (no main function)
|
|
50
|
-
MODULARIZE = -s MODULARIZE=1 -s 'EXPORT_NAME="createMLSGenModule"' # puts all of the generated JavaScript into a factory function
|
|
51
|
-
BIND = -lembind # links against embind library
|
|
52
|
-
MEMORY_CHECKS = -s ASSERTIONS=1 -fsanitize=address -g2
|
|
53
|
-
|
|
54
|
-
# gcc compiler options
|
|
55
|
-
GCC = gcc # gcc compiler front end
|
|
56
|
-
|
|
57
|
-
# KISSFFT Library
|
|
58
|
-
KISS_LIB= /Users/hugo/Desktop/dev/easyeyes/speaker-calibration/src/tasks/impulse-response/kissfft/libkissfft-float.a
|
|
59
|
-
KISS_H= -I /Users/hugo/Desktop/dev/easyeyes/speaker-calibration/src/tasks/impulse-response/kissfft/
|
|
60
|
-
|
|
61
|
-
# build the WASM + JS glue module, linked with embind
|
|
62
|
-
$(PROJECT_NAME)_bind: # $(OBJ_FILE)
|
|
63
|
-
@mkdir -p $(@D)
|
|
64
|
-
@$(call run_and_test, $(EMCC) $(STD) $(BIND) $(SRC_FILE) -o $(OUTPUT_WASM_JS) $(MODULARIZE) $(OPTIMIZE) $(ENV) $(MEMORY_CHECKS) $(KISS_H) $(KISS_LIB))
|
|
65
|
-
|
|
66
|
-
# clean the WASM + JS files
|
|
67
|
-
.PHONY: clean
|
|
68
|
-
clean:
|
|
69
|
-
@mkdir -p $(@D)
|
|
70
|
-
@$(call run_and_test, rm -f $(OUTPUT))
|
|
71
|
-
|
|
72
|
-
.PHONY: rebuild
|
|
73
|
-
rebuild:
|
|
74
|
-
@make clean; make $(PROJECT_NAME)_bind
|