speaker-calibration 2.2.210 → 2.2.211
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 -81
- 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 +27366 -27366
- package/dist/example/index.html +47 -47
- package/dist/example/listener.html +79 -79
- package/dist/example/listener.js +152 -152
- 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/main.js +1223 -1223
- package/dist/main.js.LICENSE.txt +118 -118
- 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/netlify.toml +26 -26
- package/package.json +73 -73
- 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 +183 -183
- package/src/peer-connection/listener.js +364 -364
- package/src/peer-connection/peerErrors.js +25 -25
- package/src/peer-connection/speaker.js +738 -738
- package/src/powerCheck.js +98 -98
- package/src/server/PythonServerAPI.js +869 -869
- package/src/tasks/audioCalibrator.js +351 -351
- package/src/tasks/audioRecorder.js +315 -315
- package/src/tasks/combination/combination.js +3030 -3030
- 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 +37 -37
|
@@ -1,190 +1,190 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang="en">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="utf-8" />
|
|
5
|
-
<title>JSDoc: Source: tasks/audioRecorder.js</title>
|
|
6
|
-
|
|
7
|
-
<script src="scripts/prettify/prettify.js"></script>
|
|
8
|
-
<script src="scripts/prettify/lang-css.js"></script>
|
|
9
|
-
<!--[if lt IE 9]>
|
|
10
|
-
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
|
|
11
|
-
<![endif]-->
|
|
12
|
-
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css" />
|
|
13
|
-
<link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css" />
|
|
14
|
-
</head>
|
|
15
|
-
|
|
16
|
-
<body>
|
|
17
|
-
<div id="main">
|
|
18
|
-
<h1 class="page-title">Source: tasks/audioRecorder.js</h1>
|
|
19
|
-
|
|
20
|
-
<section>
|
|
21
|
-
<article>
|
|
22
|
-
<pre
|
|
23
|
-
class="prettyprint source linenums"
|
|
24
|
-
><code>import MyEventEmitter from '../myEventEmitter';
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* @class provides a simple interface for recording audio from a microphone
|
|
28
|
-
* using the Media Recorder API.
|
|
29
|
-
*/
|
|
30
|
-
class AudioRecorder extends MyEventEmitter {
|
|
31
|
-
/** @private */
|
|
32
|
-
#mediaRecorder;
|
|
33
|
-
|
|
34
|
-
/** @private */
|
|
35
|
-
#recordedChunks = [];
|
|
36
|
-
|
|
37
|
-
/** @private */
|
|
38
|
-
#audioBlob;
|
|
39
|
-
|
|
40
|
-
/** @private */
|
|
41
|
-
#audioContext;
|
|
42
|
-
|
|
43
|
-
/** @private */
|
|
44
|
-
#recordedSignals = [];
|
|
45
|
-
|
|
46
|
-
/** @private */
|
|
47
|
-
sinkSamplingRate;
|
|
48
|
-
|
|
49
|
-
/**
|
|
50
|
-
* Decode the audio data from the recorded audio blob.
|
|
51
|
-
* @private
|
|
52
|
-
*/
|
|
53
|
-
#saveRecording = async () => {
|
|
54
|
-
const arrayBuffer = await this.#audioBlob.arrayBuffer();
|
|
55
|
-
const audioBuffer = await this.#audioContext.decodeAudioData(arrayBuffer);
|
|
56
|
-
const data = audioBuffer.getChannelData(0);
|
|
57
|
-
|
|
58
|
-
console.log(`Decoded audio buffer with ${data.length} samples`);
|
|
59
|
-
this.#recordedSignals.push(Array.from(data));
|
|
60
|
-
};
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* Event listener triggered when data is available in the media recorder.
|
|
64
|
-
* @private
|
|
65
|
-
* @param {*} e - The event object.
|
|
66
|
-
*/
|
|
67
|
-
#onRecorderDataAvailable = e => {
|
|
68
|
-
if (e.data && e.data.size > 0) this.#recordedChunks.push(e.data);
|
|
69
|
-
};
|
|
70
|
-
|
|
71
|
-
/**
|
|
72
|
-
* Method to create a media recorder object and set up event listeners.
|
|
73
|
-
* @private
|
|
74
|
-
* @param {MediaStream} stream - The stream of audio from the Listener.
|
|
75
|
-
*/
|
|
76
|
-
#setMediaRecorder = stream => {
|
|
77
|
-
// Create a new MediaRecorder object
|
|
78
|
-
this.#mediaRecorder = new MediaRecorder(stream);
|
|
79
|
-
|
|
80
|
-
// Add event listeners
|
|
81
|
-
this.#mediaRecorder.ondataavailable = e => this.#onRecorderDataAvailable(e);
|
|
82
|
-
};
|
|
83
|
-
|
|
84
|
-
#setAudioContext = () => {
|
|
85
|
-
this.#audioContext = new (window.AudioContext ||
|
|
86
|
-
window.webkitAudioContext ||
|
|
87
|
-
window.audioContext)({
|
|
88
|
-
sampleRate: this.sinkSamplingRate,
|
|
89
|
-
});
|
|
90
|
-
};
|
|
91
|
-
|
|
92
|
-
/**
|
|
93
|
-
* Public method to start the recording process.
|
|
94
|
-
* @param {MediaStream} stream - The stream of audio from the Listener.
|
|
95
|
-
*/
|
|
96
|
-
startRecording = async stream => {
|
|
97
|
-
// Create a fresh audio context
|
|
98
|
-
this.#setAudioContext();
|
|
99
|
-
// Set up media recorder if needed
|
|
100
|
-
if (!this.#mediaRecorder) this.#setMediaRecorder(stream);
|
|
101
|
-
// clear recorded chunks
|
|
102
|
-
this.#recordedChunks = [];
|
|
103
|
-
// start recording
|
|
104
|
-
this.#mediaRecorder.start();
|
|
105
|
-
};
|
|
106
|
-
|
|
107
|
-
/**
|
|
108
|
-
* Method to stop the recording process.
|
|
109
|
-
* @public
|
|
110
|
-
*/
|
|
111
|
-
stopRecording = async () => {
|
|
112
|
-
// Stop the media recorder, and wait for the data to be available
|
|
113
|
-
await new Promise(resolve => {
|
|
114
|
-
this.#mediaRecorder.onstop = () => {
|
|
115
|
-
// when the stop event is triggered, resolve the promise
|
|
116
|
-
this.#audioBlob = new Blob(this.#recordedChunks, {
|
|
117
|
-
type: 'audio/wav; codecs=opus',
|
|
118
|
-
});
|
|
119
|
-
resolve(this.#audioBlob);
|
|
120
|
-
};
|
|
121
|
-
// call stop
|
|
122
|
-
this.#mediaRecorder.stop();
|
|
123
|
-
});
|
|
124
|
-
// Now that we have data, save it
|
|
125
|
-
await this.#saveRecording();
|
|
126
|
-
};
|
|
127
|
-
|
|
128
|
-
/**
|
|
129
|
-
* Public method to get the last recorded audio signal
|
|
130
|
-
* @returns
|
|
131
|
-
*/
|
|
132
|
-
getLastRecordedSignal = () => this.#recordedSignals[this.#recordedSignals.length - 1];
|
|
133
|
-
|
|
134
|
-
/**
|
|
135
|
-
* Public method to get all the recorded audio signals
|
|
136
|
-
* @returns
|
|
137
|
-
*/
|
|
138
|
-
getAllRecordedSignals = () => this.#recordedSignals;
|
|
139
|
-
|
|
140
|
-
/**
|
|
141
|
-
* Public method to set the sampling rate used by the capture device
|
|
142
|
-
* @param {Number} sinkSamplingRate - The sampling rate of the capture device
|
|
143
|
-
*/
|
|
144
|
-
setSinkSamplingRate = sinkSamplingRate => {
|
|
145
|
-
this.sinkSamplingRate = sinkSamplingRate;
|
|
146
|
-
};
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
export default AudioRecorder;
|
|
150
|
-
</code></pre>
|
|
151
|
-
</article>
|
|
152
|
-
</section>
|
|
153
|
-
</div>
|
|
154
|
-
|
|
155
|
-
<nav>
|
|
156
|
-
<h2><a href="index.html">Home</a></h2>
|
|
157
|
-
<h3>Classes</h3>
|
|
158
|
-
<ul>
|
|
159
|
-
<li><a href="AudioCalibrator.html">AudioCalibrator</a></li>
|
|
160
|
-
<li><a href="AudioPeer.html">AudioPeer</a></li>
|
|
161
|
-
<li><a href="AudioRecorder.html">AudioRecorder</a></li>
|
|
162
|
-
<li><a href="ImpulseResponse.html">ImpulseResponse</a></li>
|
|
163
|
-
<li><a href="Listener.html">Listener</a></li>
|
|
164
|
-
<li><a href="MlsGenInterface.html">MlsGenInterface</a></li>
|
|
165
|
-
<li><a href="MyEventEmitter.html">MyEventEmitter</a></li>
|
|
166
|
-
<li><a href="PythonServerAPI.html">PythonServerAPI</a></li>
|
|
167
|
-
<li><a href="Speaker.html">Speaker</a></li>
|
|
168
|
-
<li><a href="Volume.html">Volume</a></li>
|
|
169
|
-
</ul>
|
|
170
|
-
<h3>Global</h3>
|
|
171
|
-
<ul>
|
|
172
|
-
<li><a href="global.html#csvToArray">csvToArray</a></li>
|
|
173
|
-
<li><a href="global.html#saveToCSV">saveToCSV</a></li>
|
|
174
|
-
<li><a href="global.html#sleep">sleep</a></li>
|
|
175
|
-
</ul>
|
|
176
|
-
</nav>
|
|
177
|
-
|
|
178
|
-
<br class="clear" />
|
|
179
|
-
|
|
180
|
-
<footer>
|
|
181
|
-
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.10</a> on Fri
|
|
182
|
-
Jul 29 2022 15:09:48 GMT-0400 (Eastern Daylight Time)
|
|
183
|
-
</footer>
|
|
184
|
-
|
|
185
|
-
<script>
|
|
186
|
-
prettyPrint();
|
|
187
|
-
</script>
|
|
188
|
-
<script src="scripts/linenumber.js"></script>
|
|
189
|
-
</body>
|
|
190
|
-
</html>
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8" />
|
|
5
|
+
<title>JSDoc: Source: tasks/audioRecorder.js</title>
|
|
6
|
+
|
|
7
|
+
<script src="scripts/prettify/prettify.js"></script>
|
|
8
|
+
<script src="scripts/prettify/lang-css.js"></script>
|
|
9
|
+
<!--[if lt IE 9]>
|
|
10
|
+
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
|
|
11
|
+
<![endif]-->
|
|
12
|
+
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css" />
|
|
13
|
+
<link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css" />
|
|
14
|
+
</head>
|
|
15
|
+
|
|
16
|
+
<body>
|
|
17
|
+
<div id="main">
|
|
18
|
+
<h1 class="page-title">Source: tasks/audioRecorder.js</h1>
|
|
19
|
+
|
|
20
|
+
<section>
|
|
21
|
+
<article>
|
|
22
|
+
<pre
|
|
23
|
+
class="prettyprint source linenums"
|
|
24
|
+
><code>import MyEventEmitter from '../myEventEmitter';
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* @class provides a simple interface for recording audio from a microphone
|
|
28
|
+
* using the Media Recorder API.
|
|
29
|
+
*/
|
|
30
|
+
class AudioRecorder extends MyEventEmitter {
|
|
31
|
+
/** @private */
|
|
32
|
+
#mediaRecorder;
|
|
33
|
+
|
|
34
|
+
/** @private */
|
|
35
|
+
#recordedChunks = [];
|
|
36
|
+
|
|
37
|
+
/** @private */
|
|
38
|
+
#audioBlob;
|
|
39
|
+
|
|
40
|
+
/** @private */
|
|
41
|
+
#audioContext;
|
|
42
|
+
|
|
43
|
+
/** @private */
|
|
44
|
+
#recordedSignals = [];
|
|
45
|
+
|
|
46
|
+
/** @private */
|
|
47
|
+
sinkSamplingRate;
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Decode the audio data from the recorded audio blob.
|
|
51
|
+
* @private
|
|
52
|
+
*/
|
|
53
|
+
#saveRecording = async () => {
|
|
54
|
+
const arrayBuffer = await this.#audioBlob.arrayBuffer();
|
|
55
|
+
const audioBuffer = await this.#audioContext.decodeAudioData(arrayBuffer);
|
|
56
|
+
const data = audioBuffer.getChannelData(0);
|
|
57
|
+
|
|
58
|
+
console.log(`Decoded audio buffer with ${data.length} samples`);
|
|
59
|
+
this.#recordedSignals.push(Array.from(data));
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Event listener triggered when data is available in the media recorder.
|
|
64
|
+
* @private
|
|
65
|
+
* @param {*} e - The event object.
|
|
66
|
+
*/
|
|
67
|
+
#onRecorderDataAvailable = e => {
|
|
68
|
+
if (e.data && e.data.size > 0) this.#recordedChunks.push(e.data);
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Method to create a media recorder object and set up event listeners.
|
|
73
|
+
* @private
|
|
74
|
+
* @param {MediaStream} stream - The stream of audio from the Listener.
|
|
75
|
+
*/
|
|
76
|
+
#setMediaRecorder = stream => {
|
|
77
|
+
// Create a new MediaRecorder object
|
|
78
|
+
this.#mediaRecorder = new MediaRecorder(stream);
|
|
79
|
+
|
|
80
|
+
// Add event listeners
|
|
81
|
+
this.#mediaRecorder.ondataavailable = e => this.#onRecorderDataAvailable(e);
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
#setAudioContext = () => {
|
|
85
|
+
this.#audioContext = new (window.AudioContext ||
|
|
86
|
+
window.webkitAudioContext ||
|
|
87
|
+
window.audioContext)({
|
|
88
|
+
sampleRate: this.sinkSamplingRate,
|
|
89
|
+
});
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Public method to start the recording process.
|
|
94
|
+
* @param {MediaStream} stream - The stream of audio from the Listener.
|
|
95
|
+
*/
|
|
96
|
+
startRecording = async stream => {
|
|
97
|
+
// Create a fresh audio context
|
|
98
|
+
this.#setAudioContext();
|
|
99
|
+
// Set up media recorder if needed
|
|
100
|
+
if (!this.#mediaRecorder) this.#setMediaRecorder(stream);
|
|
101
|
+
// clear recorded chunks
|
|
102
|
+
this.#recordedChunks = [];
|
|
103
|
+
// start recording
|
|
104
|
+
this.#mediaRecorder.start();
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Method to stop the recording process.
|
|
109
|
+
* @public
|
|
110
|
+
*/
|
|
111
|
+
stopRecording = async () => {
|
|
112
|
+
// Stop the media recorder, and wait for the data to be available
|
|
113
|
+
await new Promise(resolve => {
|
|
114
|
+
this.#mediaRecorder.onstop = () => {
|
|
115
|
+
// when the stop event is triggered, resolve the promise
|
|
116
|
+
this.#audioBlob = new Blob(this.#recordedChunks, {
|
|
117
|
+
type: 'audio/wav; codecs=opus',
|
|
118
|
+
});
|
|
119
|
+
resolve(this.#audioBlob);
|
|
120
|
+
};
|
|
121
|
+
// call stop
|
|
122
|
+
this.#mediaRecorder.stop();
|
|
123
|
+
});
|
|
124
|
+
// Now that we have data, save it
|
|
125
|
+
await this.#saveRecording();
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Public method to get the last recorded audio signal
|
|
130
|
+
* @returns
|
|
131
|
+
*/
|
|
132
|
+
getLastRecordedSignal = () => this.#recordedSignals[this.#recordedSignals.length - 1];
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Public method to get all the recorded audio signals
|
|
136
|
+
* @returns
|
|
137
|
+
*/
|
|
138
|
+
getAllRecordedSignals = () => this.#recordedSignals;
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Public method to set the sampling rate used by the capture device
|
|
142
|
+
* @param {Number} sinkSamplingRate - The sampling rate of the capture device
|
|
143
|
+
*/
|
|
144
|
+
setSinkSamplingRate = sinkSamplingRate => {
|
|
145
|
+
this.sinkSamplingRate = sinkSamplingRate;
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
export default AudioRecorder;
|
|
150
|
+
</code></pre>
|
|
151
|
+
</article>
|
|
152
|
+
</section>
|
|
153
|
+
</div>
|
|
154
|
+
|
|
155
|
+
<nav>
|
|
156
|
+
<h2><a href="index.html">Home</a></h2>
|
|
157
|
+
<h3>Classes</h3>
|
|
158
|
+
<ul>
|
|
159
|
+
<li><a href="AudioCalibrator.html">AudioCalibrator</a></li>
|
|
160
|
+
<li><a href="AudioPeer.html">AudioPeer</a></li>
|
|
161
|
+
<li><a href="AudioRecorder.html">AudioRecorder</a></li>
|
|
162
|
+
<li><a href="ImpulseResponse.html">ImpulseResponse</a></li>
|
|
163
|
+
<li><a href="Listener.html">Listener</a></li>
|
|
164
|
+
<li><a href="MlsGenInterface.html">MlsGenInterface</a></li>
|
|
165
|
+
<li><a href="MyEventEmitter.html">MyEventEmitter</a></li>
|
|
166
|
+
<li><a href="PythonServerAPI.html">PythonServerAPI</a></li>
|
|
167
|
+
<li><a href="Speaker.html">Speaker</a></li>
|
|
168
|
+
<li><a href="Volume.html">Volume</a></li>
|
|
169
|
+
</ul>
|
|
170
|
+
<h3>Global</h3>
|
|
171
|
+
<ul>
|
|
172
|
+
<li><a href="global.html#csvToArray">csvToArray</a></li>
|
|
173
|
+
<li><a href="global.html#saveToCSV">saveToCSV</a></li>
|
|
174
|
+
<li><a href="global.html#sleep">sleep</a></li>
|
|
175
|
+
</ul>
|
|
176
|
+
</nav>
|
|
177
|
+
|
|
178
|
+
<br class="clear" />
|
|
179
|
+
|
|
180
|
+
<footer>
|
|
181
|
+
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.10</a> on Fri
|
|
182
|
+
Jul 29 2022 15:09:48 GMT-0400 (Eastern Daylight Time)
|
|
183
|
+
</footer>
|
|
184
|
+
|
|
185
|
+
<script>
|
|
186
|
+
prettyPrint();
|
|
187
|
+
</script>
|
|
188
|
+
<script src="scripts/linenumber.js"></script>
|
|
189
|
+
</body>
|
|
190
|
+
</html>
|