speaker-calibration 2.0.0 → 2.1.0
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 +72 -0
- package/.eslintrc.json +40 -0
- package/.gitignore +78 -0
- package/.prettierignore +70 -0
- package/.prettierrc +15 -0
- package/LICENSE +20 -20
- package/README.md +133 -133
- package/__mocks__/fileMock.js +1 -0
- package/__mocks__/styleMock.js +1 -0
- package/babel.config.js +3 -0
- package/coverage/clover.xml +71 -0
- package/coverage/coverage-final.json +224 -0
- package/coverage/lcov-report/PythonServerInterface.js.html +265 -0
- package/coverage/lcov-report/base.css +354 -0
- package/coverage/lcov-report/block-navigation.js +82 -0
- package/coverage/lcov-report/favicon.png +0 -0
- package/coverage/lcov-report/index.html +123 -0
- package/coverage/lcov-report/prettify.css +101 -0
- package/coverage/lcov-report/prettify.js +937 -0
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +189 -0
- package/coverage/lcov-report/src/index.html +121 -0
- package/coverage/lcov-report/src/server/PythonServerInterface.js.html +268 -0
- package/coverage/lcov-report/src/server/index.html +123 -0
- package/coverage/lcov-report/src/tasks/audioCalibrator.js.html +499 -0
- package/coverage/lcov-report/src/tasks/audioRecorder.js.html +412 -0
- package/coverage/lcov-report/src/tasks/index.html +143 -0
- package/coverage/lcov-report/src/tasks/volume/index.html +123 -0
- package/coverage/lcov-report/src/tasks/volume/volume.js.html +409 -0
- package/coverage/lcov-report/src/utils.js.html +172 -0
- package/coverage/lcov.info +91 -0
- package/dist/example/Queen-Bohemian_Rhapsody.wav +0 -0
- package/dist/example/Queen-Bohemian_Rhapsody_g_filtered.wav +0 -0
- package/dist/example/index.html +47 -0
- package/dist/example/listener.html +89 -0
- package/dist/example/server.js +49 -0
- package/dist/example/speaker.html +126 -0
- package/dist/example/speakerUI.js +217 -0
- package/dist/example/styles.css +40 -0
- package/dist/main.js +1 -1
- package/dist/mlsGen.js +6814 -6814
- package/dist/mlsGen.wasm +0 -0
- package/doc/AudioCalibrator.html +417 -0
- package/doc/AudioPeer.html +251 -0
- package/doc/AudioRecorder.html +195 -0
- package/doc/ImpulseResponse.html +215 -0
- package/doc/Listener.html +308 -0
- package/doc/MlsGenInterface.html +226 -0
- package/doc/MyEventEmitter.html +274 -0
- package/doc/PythonServerAPI.html +109 -0
- package/doc/Speaker-Calibration-UML-Diagram.png +0 -0
- package/doc/Speaker.html +276 -0
- package/doc/Takes%20a%20target%20element%20where%20html%20elements%20will%20be%20appended..html +128 -0
- package/doc/Takes%20the%20url%20of%20the%20current%20site%0Aand%20a%20target%20element%20where%20html%20elements%20will%20be%20appended..html +138 -0
- package/doc/Takes%20the%20url%20of%20the%20current%20site%20and%20a%20target%20element%20where%20html%20elements%20will%20be%20appended..html +137 -0
- package/doc/Volume.html +88 -0
- package/doc/audioCalibrator.js.html +179 -0
- package/doc/audioPeer.js.html +175 -0
- package/doc/audioRecorder.js.html +163 -0
- package/doc/creates%20a%20new%20AudioRecorder%20instance.%20%0ASets%20up%20the%20audio%20context%20and%20file%20reader..html +114 -0
- package/doc/fonts/OpenSans-Bold-webfont.eot +0 -0
- package/doc/fonts/OpenSans-Bold-webfont.svg +1830 -0
- 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 +1830 -0
- 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 +1830 -0
- 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 +1831 -0
- 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 +1835 -0
- 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 +1831 -0
- package/doc/fonts/OpenSans-Regular-webfont.woff +0 -0
- package/doc/global.html +308 -0
- package/doc/index.html +58 -0
- package/doc/listener.js.html +170 -0
- package/doc/mlsGen_mlsGenInterface.js.html +117 -0
- package/doc/myEventEmitter.js.html +124 -0
- package/doc/peer-connection_audioPeer.js.html +188 -0
- package/doc/peer-connection_listener.js.html +311 -0
- package/doc/peer-connection_speaker.js.html +381 -0
- package/doc/sc-activity-diagram.png +0 -0
- package/doc/scripts/linenumber.js +25 -0
- package/doc/scripts/prettify/Apache-License-2.0.txt +202 -0
- package/doc/scripts/prettify/lang-css.js +24 -0
- package/doc/scripts/prettify/prettify.js +640 -0
- package/doc/server_PythonServerAPI.js.html +160 -0
- package/doc/speaker.js.html +248 -0
- package/doc/styles/jsdoc-default.css +371 -0
- package/doc/styles/prettify-jsdoc.css +111 -0
- package/doc/styles/prettify-tomorrow.css +163 -0
- package/doc/tasks_audioCalibrator.js.html +207 -0
- package/doc/tasks_audioRecorder.js.html +190 -0
- package/doc/tasks_impulse-response_impulseResponse.js.html +442 -0
- package/doc/tasks_impulse-response_mlsGen_mlsGenInterface.js.html +175 -0
- package/doc/tasks_volume_volume.js.html +185 -0
- package/doc/utils.js.html +105 -0
- package/jest.config.js +173 -0
- package/netlify.toml +27 -0
- package/package.json +67 -66
- package/src/index.html +21 -0
- package/src/main.js +21 -0
- package/src/myEventEmitter.js +83 -0
- package/src/peer-connection/audioPeer.js +151 -0
- package/src/peer-connection/listener.js +251 -0
- package/src/peer-connection/peerErrors.js +25 -0
- package/src/peer-connection/speaker.js +346 -0
- package/src/server/PythonServerAPI.js +117 -0
- package/src/tasks/audioCalibrator.js +218 -0
- package/src/tasks/audioRecorder.js +148 -0
- package/src/tasks/impulse-response/impulseResponse.js +436 -0
- package/src/tasks/impulse-response/mlsGen/mlsGen.cpp +99 -0
- package/src/tasks/impulse-response/mlsGen/mlsGen.hpp +304 -0
- package/src/tasks/impulse-response/mlsGen/mlsGenInterface.js +131 -0
- package/src/tasks/impulse-response/mlsGen/mlsGenTest.cpp +181 -0
- package/src/tasks/volume/volume.cpp +3 -0
- package/src/tasks/volume/volume.hpp +23 -0
- package/src/tasks/volume/volume.js +157 -0
- package/src/utils.js +55 -0
- package/webpack.config.js +37 -0
- package/README +0 -3
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8" />
|
|
5
|
+
<title>JSDoc: Source: audioPeer.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: audioPeer.js</h1>
|
|
19
|
+
|
|
20
|
+
<section>
|
|
21
|
+
<article>
|
|
22
|
+
<pre class="prettyprint source linenums"><code>import Peer from 'peerjs';
|
|
23
|
+
|
|
24
|
+
// TODO: this was already here before, but appears to be unused
|
|
25
|
+
const pressFeedbackURI =
|
|
26
|
+
'data:audio/mpeg;base64,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VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//uSZIIP9BFGHYksMlIAAA0gAAABAAABpAAAACAAADSAAAAEVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQ==';
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* @typedef initParameters - Parameters for initializing the AudioPeer
|
|
30
|
+
* @type {object}
|
|
31
|
+
* @property {string} targetElementId - target element where new elements will be appended
|
|
32
|
+
* @property {string} siteUrl: the url of the current site
|
|
33
|
+
*/
|
|
34
|
+
const initParameters = {
|
|
35
|
+
targetElementId: null,
|
|
36
|
+
siteUrl: null,
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* @class The first layer of abstraction on the PeerJS library.
|
|
41
|
+
* It meant to be extended by the two seperate client classes, Speaker and Listener.
|
|
42
|
+
* It implements the shared methods and properties of both classes.
|
|
43
|
+
*/
|
|
44
|
+
class AudioPeer {
|
|
45
|
+
/**
|
|
46
|
+
* Creates an instance of AudioPeer
|
|
47
|
+
* Takes the url of the current site and a target element where html elements will be appended.
|
|
48
|
+
* @param {initParameters} params - see type definition for initParameters
|
|
49
|
+
*/
|
|
50
|
+
constructor(param = initParameters) {
|
|
51
|
+
// PeerJS
|
|
52
|
+
/* Create the Peer object for our end of the connection. */
|
|
53
|
+
this.peer = new Peer(null, {debug: 2});
|
|
54
|
+
this.conn = null;
|
|
55
|
+
this.lastPeerId = null;
|
|
56
|
+
|
|
57
|
+
// Display information to HTML elem with given id
|
|
58
|
+
this.targetElement = param.targetElementId;
|
|
59
|
+
|
|
60
|
+
this.siteUrl = param.siteUrl;
|
|
61
|
+
|
|
62
|
+
// Store for all incoming data
|
|
63
|
+
this.dataStore = [];
|
|
64
|
+
|
|
65
|
+
// Create and play sounds using this audio context
|
|
66
|
+
this.sourceAudioContext = new (window.AudioContext ||
|
|
67
|
+
window.webkitAudioContext ||
|
|
68
|
+
window.audioContext)();
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Helper method to display information to DOM element
|
|
73
|
+
* @param {string} message
|
|
74
|
+
* @param {boolean} append
|
|
75
|
+
*/
|
|
76
|
+
displayUpdate = (message, append = false) => {
|
|
77
|
+
// If the specified elem exists, update that elem
|
|
78
|
+
if (document.getElementById(this.targetElement)) {
|
|
79
|
+
const displayElement = document.getElementById(this.targetElement);
|
|
80
|
+
if (append) {
|
|
81
|
+
displayElement.innerText += `\n${message}`;
|
|
82
|
+
} else {
|
|
83
|
+
displayElement.innerText = message;
|
|
84
|
+
}
|
|
85
|
+
} else {
|
|
86
|
+
console.log('MESSAGE: ', message);
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Callback method for when a peer connection is lost
|
|
92
|
+
* saves the last peer id, last server id, and attempts to reconnect
|
|
93
|
+
*/
|
|
94
|
+
onPeerDisconnected = () => {
|
|
95
|
+
this.displayUpdate('Connection lost. Please reconnect');
|
|
96
|
+
|
|
97
|
+
// Workaround for peer.reconnect deleting previous id
|
|
98
|
+
this.peer.id = this.lastPeerId;
|
|
99
|
+
// eslint-disable-next-line no-underscore-dangle
|
|
100
|
+
this.peer._lastServerId = this.lastPeerId;
|
|
101
|
+
this.peer.reconnect();
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Callback method that cleans up after peer connection is closed
|
|
106
|
+
*/
|
|
107
|
+
onPeerClose = () => {
|
|
108
|
+
this.displayUpdate('Connection closed');
|
|
109
|
+
this.conn = null;
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Helper method for when an error occurs
|
|
114
|
+
* @param {*} err
|
|
115
|
+
*/
|
|
116
|
+
onPeerError = err => {
|
|
117
|
+
this.displayUpdate(err);
|
|
118
|
+
console.log(`${err}`);
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Helper method that converts url paramters to an object
|
|
123
|
+
* @returns {object}
|
|
124
|
+
*/
|
|
125
|
+
parseURLSearchParams = () =>
|
|
126
|
+
// SOURCE: chickens, https://stackoverflow.com/questions/8648892/how-to-convert-url-parameters-to-a-javascript-object
|
|
127
|
+
// eslint-disable-next-line no-restricted-globals
|
|
128
|
+
Object.fromEntries(new URLSearchParams(location.search));
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Helper method that converts an object to a query string
|
|
132
|
+
* @param {object} params
|
|
133
|
+
* @returns {string}
|
|
134
|
+
*/
|
|
135
|
+
queryStringFromObject = params =>
|
|
136
|
+
Object.keys(params)
|
|
137
|
+
.map(key => `${key}=${params[key]}`)
|
|
138
|
+
.join('&');
|
|
139
|
+
|
|
140
|
+
static keypressFeedbackSound = pressFeedbackURI;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
export default AudioPeer;
|
|
144
|
+
</code></pre>
|
|
145
|
+
</article>
|
|
146
|
+
</section>
|
|
147
|
+
</div>
|
|
148
|
+
|
|
149
|
+
<nav>
|
|
150
|
+
<h2><a href="index.html">Home</a></h2>
|
|
151
|
+
<h3>Classes</h3>
|
|
152
|
+
<ul>
|
|
153
|
+
<li><a href="AudioCalibrator.html">AudioCalibrator</a></li>
|
|
154
|
+
<li><a href="AudioPeer.html">AudioPeer</a></li>
|
|
155
|
+
<li><a href="AudioRecorder.html">AudioRecorder</a></li>
|
|
156
|
+
<li><a href="Listener.html">Listener</a></li>
|
|
157
|
+
<li><a href="MlsGenInterface.html">MlsGenInterface</a></li>
|
|
158
|
+
<li><a href="Speaker.html">Speaker</a></li>
|
|
159
|
+
</ul>
|
|
160
|
+
<h3><a href="global.html">Global</a></h3>
|
|
161
|
+
</nav>
|
|
162
|
+
|
|
163
|
+
<br class="clear" />
|
|
164
|
+
|
|
165
|
+
<footer>
|
|
166
|
+
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.10</a> on Tue
|
|
167
|
+
Mar 01 2022 12:39:42 GMT-0500 (Eastern Standard Time)
|
|
168
|
+
</footer>
|
|
169
|
+
|
|
170
|
+
<script>
|
|
171
|
+
prettyPrint();
|
|
172
|
+
</script>
|
|
173
|
+
<script src="scripts/linenumber.js"></script>
|
|
174
|
+
</body>
|
|
175
|
+
</html>
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8" />
|
|
5
|
+
<title>JSDoc: Source: 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: audioRecorder.js</h1>
|
|
19
|
+
|
|
20
|
+
<section>
|
|
21
|
+
<article>
|
|
22
|
+
<pre class="prettyprint source linenums"><code>/**
|
|
23
|
+
* @class provides a simple interface for recording audio from a microphone
|
|
24
|
+
* using the Media Recorder API.
|
|
25
|
+
*/
|
|
26
|
+
class AudioRecorder {
|
|
27
|
+
/** @private */
|
|
28
|
+
#mediaRecorder;
|
|
29
|
+
|
|
30
|
+
/** @private */
|
|
31
|
+
#recordedChunks = [];
|
|
32
|
+
|
|
33
|
+
/** @private */
|
|
34
|
+
#audioBlob;
|
|
35
|
+
|
|
36
|
+
/** @private */
|
|
37
|
+
#audioContext;
|
|
38
|
+
|
|
39
|
+
/** @private */
|
|
40
|
+
#fileReader;
|
|
41
|
+
|
|
42
|
+
/** @private */
|
|
43
|
+
#arrayBuffer;
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* creates a new AudioRecorder instance.
|
|
47
|
+
* Sets up the audio context and file reader.
|
|
48
|
+
*/
|
|
49
|
+
constructor() {
|
|
50
|
+
this.#audioContext = new (window.AudioContext ||
|
|
51
|
+
window.webkitAudioContext ||
|
|
52
|
+
window.audioContext)();
|
|
53
|
+
this.#fileReader = new FileReader();
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Event listener triggered when the file reader is done loading
|
|
58
|
+
* @private
|
|
59
|
+
*/
|
|
60
|
+
#onFileReaderLoad = () => {
|
|
61
|
+
// read the file as an array buffer
|
|
62
|
+
this.#arrayBuffer = this.#fileReader.result;
|
|
63
|
+
|
|
64
|
+
// Convert array buffer into audio buffer
|
|
65
|
+
this.#audioContext.decodeAudioData(this.#arrayBuffer, (audioBuffer) => {
|
|
66
|
+
// Do something with audioBuffer
|
|
67
|
+
console.log(audioBuffer.getChannelData(0));
|
|
68
|
+
});
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Event listener triggered when data is available in the media recorder.
|
|
73
|
+
* @private
|
|
74
|
+
* @param {*} e - The event object.
|
|
75
|
+
*/
|
|
76
|
+
#onRecorderDataAvailable = (e) => {
|
|
77
|
+
if (e.data.size > 0) this.#recordedChunks.push(e.data);
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Event listener triggered when the media recorder stops recording.
|
|
82
|
+
* @private
|
|
83
|
+
*/
|
|
84
|
+
#onRecorderStop = () => {
|
|
85
|
+
// Create a blob from the recorded audio chunks
|
|
86
|
+
this.#audioBlob = new Blob(this.#recordedChunks, {
|
|
87
|
+
type: "audio/wav; codecs=MS_PCM",
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
// Set up file reader on loaded end event
|
|
91
|
+
this.#fileReader.onloadend = this.#onFileReaderLoad;
|
|
92
|
+
|
|
93
|
+
// Load blob
|
|
94
|
+
this.#fileReader.readAsArrayBuffer(this.#audioBlob);
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Method to create a media recorder object and set up event listeners.
|
|
99
|
+
* @private
|
|
100
|
+
* @param {MediaStream} stream - The stream of audio from the Listener.
|
|
101
|
+
*/
|
|
102
|
+
#setMediaRecorder = (stream) => {
|
|
103
|
+
// Create a new MediaRecorder object
|
|
104
|
+
this.#mediaRecorder = new MediaRecorder(stream, { mimeType: "audio/webm" });
|
|
105
|
+
|
|
106
|
+
// Add event listeners
|
|
107
|
+
this.#mediaRecorder.ondataavailable = (e) =>
|
|
108
|
+
this.#onRecorderDataAvailable(e);
|
|
109
|
+
this.#mediaRecorder.onstop = () => this.#onRecorderStop();
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Public method to start the recording process.
|
|
114
|
+
* @param {MediaStream} stream - The stream of audio from the Listener.
|
|
115
|
+
*/
|
|
116
|
+
startRecording = (stream) => {
|
|
117
|
+
// Set up media recorder if needed
|
|
118
|
+
if (!this.#mediaRecorder) this.#setMediaRecorder(stream);
|
|
119
|
+
this.#mediaRecorder.start();
|
|
120
|
+
};
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Method to stop the recording process.
|
|
124
|
+
* @public
|
|
125
|
+
*/
|
|
126
|
+
stopRecording = () => {
|
|
127
|
+
this.#mediaRecorder.stop();
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
export default AudioRecorder;
|
|
132
|
+
</code></pre>
|
|
133
|
+
</article>
|
|
134
|
+
</section>
|
|
135
|
+
</div>
|
|
136
|
+
|
|
137
|
+
<nav>
|
|
138
|
+
<h2><a href="index.html">Home</a></h2>
|
|
139
|
+
<h3>Classes</h3>
|
|
140
|
+
<ul>
|
|
141
|
+
<li><a href="AudioCalibrator.html">AudioCalibrator</a></li>
|
|
142
|
+
<li><a href="AudioPeer.html">AudioPeer</a></li>
|
|
143
|
+
<li><a href="AudioRecorder.html">AudioRecorder</a></li>
|
|
144
|
+
<li><a href="Listener.html">Listener</a></li>
|
|
145
|
+
<li><a href="MlsGenInterface.html">MlsGenInterface</a></li>
|
|
146
|
+
<li><a href="Speaker.html">Speaker</a></li>
|
|
147
|
+
</ul>
|
|
148
|
+
<h3><a href="global.html">Global</a></h3>
|
|
149
|
+
</nav>
|
|
150
|
+
|
|
151
|
+
<br class="clear" />
|
|
152
|
+
|
|
153
|
+
<footer>
|
|
154
|
+
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.10</a> on Tue
|
|
155
|
+
Mar 01 2022 12:39:42 GMT-0500 (Eastern Standard Time)
|
|
156
|
+
</footer>
|
|
157
|
+
|
|
158
|
+
<script>
|
|
159
|
+
prettyPrint();
|
|
160
|
+
</script>
|
|
161
|
+
<script src="scripts/linenumber.js"></script>
|
|
162
|
+
</body>
|
|
163
|
+
</html>
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8" />
|
|
5
|
+
<title>
|
|
6
|
+
JSDoc: Class: creates a new AudioRecorder instance. Sets up the audio context and file reader.
|
|
7
|
+
</title>
|
|
8
|
+
|
|
9
|
+
<script src="scripts/prettify/prettify.js"></script>
|
|
10
|
+
<script src="scripts/prettify/lang-css.js"></script>
|
|
11
|
+
<!--[if lt IE 9]>
|
|
12
|
+
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
|
|
13
|
+
<![endif]-->
|
|
14
|
+
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css" />
|
|
15
|
+
<link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css" />
|
|
16
|
+
</head>
|
|
17
|
+
|
|
18
|
+
<body>
|
|
19
|
+
<div id="main">
|
|
20
|
+
<h1 class="page-title">
|
|
21
|
+
Class: creates a new AudioRecorder instance. Sets up the audio context and file reader.
|
|
22
|
+
</h1>
|
|
23
|
+
|
|
24
|
+
<section>
|
|
25
|
+
<header>
|
|
26
|
+
<h2>
|
|
27
|
+
<span class="attribs"><span class="type-signature"></span></span>creates a new
|
|
28
|
+
AudioRecorder instance. Sets up the audio context and file reader.<span
|
|
29
|
+
class="signature"
|
|
30
|
+
>()</span
|
|
31
|
+
><span class="type-signature"></span>
|
|
32
|
+
</h2>
|
|
33
|
+
</header>
|
|
34
|
+
|
|
35
|
+
<article>
|
|
36
|
+
<div class="container-overview">
|
|
37
|
+
<h4
|
|
38
|
+
class="name"
|
|
39
|
+
id="creates a new AudioRecorder instance.
|
|
40
|
+
Sets up the audio context and file reader."
|
|
41
|
+
>
|
|
42
|
+
<span class="type-signature"></span>new creates a new AudioRecorder instance. Sets up
|
|
43
|
+
the audio context and file reader.<span class="signature">()</span
|
|
44
|
+
><span class="type-signature"></span>
|
|
45
|
+
</h4>
|
|
46
|
+
|
|
47
|
+
<dl class="details">
|
|
48
|
+
<dt class="tag-source">Source:</dt>
|
|
49
|
+
<dd class="tag-source">
|
|
50
|
+
<ul class="dummy">
|
|
51
|
+
<li>
|
|
52
|
+
<a href="audioRecorder.js.html">audioRecorder.js</a>,
|
|
53
|
+
<a href="audioRecorder.js.html#line24">line 24</a>
|
|
54
|
+
</li>
|
|
55
|
+
</ul>
|
|
56
|
+
</dd>
|
|
57
|
+
</dl>
|
|
58
|
+
</div>
|
|
59
|
+
</article>
|
|
60
|
+
</section>
|
|
61
|
+
</div>
|
|
62
|
+
|
|
63
|
+
<nav>
|
|
64
|
+
<h2><a href="index.html">Home</a></h2>
|
|
65
|
+
<h3>Classes</h3>
|
|
66
|
+
<ul>
|
|
67
|
+
<li><a href="AudioPeer.html">AudioPeer</a></li>
|
|
68
|
+
<li><a href="AudioRecorder.html">AudioRecorder</a></li>
|
|
69
|
+
<li>
|
|
70
|
+
<a
|
|
71
|
+
href="creates%2520a%2520new%2520AudioRecorder%2520instance.%2520%250ASets%2520up%2520the%2520audio%2520context%2520and%2520file%2520reader..html"
|
|
72
|
+
>creates a new AudioRecorder instance. Sets up the audio context and file reader.</a
|
|
73
|
+
>
|
|
74
|
+
</li>
|
|
75
|
+
<li><a href="Listener.html">Listener</a></li>
|
|
76
|
+
<li><a href="MlsGenInterface.html">MlsGenInterface</a></li>
|
|
77
|
+
<li><a href="Speaker.html">Speaker</a></li>
|
|
78
|
+
<li>
|
|
79
|
+
<a
|
|
80
|
+
href="Takes%2520a%2520target%2520element%2520where%2520html%2520elements%2520will%2520be%2520appended..html"
|
|
81
|
+
>Takes a target element where html elements will be appended.</a
|
|
82
|
+
>
|
|
83
|
+
</li>
|
|
84
|
+
<li>
|
|
85
|
+
<a
|
|
86
|
+
href="Takes%2520the%2520url%2520of%2520the%2520current%2520site%250Aand%2520a%2520target%2520element%2520where%2520html%2520elements%2520will%2520be%2520appended..html"
|
|
87
|
+
>Takes the url of the current site and a target element where html elements will be
|
|
88
|
+
appended.</a
|
|
89
|
+
>
|
|
90
|
+
</li>
|
|
91
|
+
<li>
|
|
92
|
+
<a
|
|
93
|
+
href="Takes%2520the%2520url%2520of%2520the%2520current%2520site%2520and%2520a%2520target%2520element%2520where%2520html%2520elements%2520will%2520be%2520appended..html"
|
|
94
|
+
>Takes the url of the current site and a target element where html elements will be
|
|
95
|
+
appended.</a
|
|
96
|
+
>
|
|
97
|
+
</li>
|
|
98
|
+
</ul>
|
|
99
|
+
<h3><a href="global.html">Global</a></h3>
|
|
100
|
+
</nav>
|
|
101
|
+
|
|
102
|
+
<br class="clear" />
|
|
103
|
+
|
|
104
|
+
<footer>
|
|
105
|
+
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.10</a> on Tue
|
|
106
|
+
Mar 01 2022 11:13:23 GMT-0500 (Eastern Standard Time)
|
|
107
|
+
</footer>
|
|
108
|
+
|
|
109
|
+
<script>
|
|
110
|
+
prettyPrint();
|
|
111
|
+
</script>
|
|
112
|
+
<script src="scripts/linenumber.js"></script>
|
|
113
|
+
</body>
|
|
114
|
+
</html>
|
|
Binary file
|