Skip to content

Commit ef2e076

Browse files
authored
emscripten fix audio input to use mediaDevices closes #7638 (#7639)
#changelog #emscripten
1 parent 515bd04 commit ef2e076

File tree

1 file changed

+33
-41
lines changed

1 file changed

+33
-41
lines changed

addons/ofxEmscripten/libs/html5audio/lib/emscripten/library_html5audio.js

Lines changed: 33 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -202,55 +202,47 @@ var LibraryHTML5Audio = {
202202
},
203203

204204
html5audio_stream_create: function(bufferSize, inputChannels, outputChannels, inbuffer, outbuffer, callback, userData) {
205-
var stream = AUDIO.context.createScriptProcessor(bufferSize, inputChannels, outputChannels);
206-
var inbufferArray = Module.HEAPF32.subarray(inbuffer >> 2,(inbuffer>>2) + bufferSize * inputChannels);
207-
var outbufferArray = Module.HEAPF32.subarray(outbuffer >> 2, (outbuffer>>2) + bufferSize * outputChannels);
208-
209-
stream.onaudioprocess = function(event) {
210-
var i, j, c;
211-
if (inputChannels > 0) {
212-
for (c = 0; c < inputChannels; ++c) {
213-
var inChannel = event.inputBuffer.getChannelData(c);
214-
for (i = 0, j = c; i < bufferSize; ++i, j += inputChannels) {
215-
inbufferArray[j] = inChannel[i];
205+
var stream = AUDIO.context.createScriptProcessor(bufferSize, inputChannels, outputChannels);
206+
var inbufferArray = Module.HEAPF32.subarray(inbuffer >> 2, (inbuffer >> 2) + bufferSize * inputChannels);
207+
var outbufferArray = Module.HEAPF32.subarray(outbuffer >> 2, (outbuffer >> 2) + bufferSize * outputChannels);
208+
209+
stream.onaudioprocess = function(event) {
210+
var i, j, c;
211+
if (inputChannels > 0) {
212+
for (c = 0; c < inputChannels; ++c) {
213+
var inChannel = event.inputBuffer.getChannelData(c);
214+
for (i = 0, j = c; i < bufferSize; ++i, j += inputChannels) {
215+
inbufferArray[j] = inChannel[i];
216+
}
216217
}
217218
}
218-
}
219219

220-
{{{ makeDynCall('viiii', 'callback') }}}(bufferSize, inputChannels, outputChannels, userData);
220+
{{{ makeDynCall('viiii', 'callback') }}}(bufferSize, inputChannels, outputChannels, userData);
221221

222-
if (outputChannels > 0) {
223-
for (c = 0; c < outputChannels; ++c) {
224-
var outChannel = event.outputBuffer.getChannelData(c);
225-
for (i = 0, j = c; i<bufferSize; ++i, j += outputChannels) {
226-
outChannel[i] = outbufferArray[j];
222+
if (outputChannels > 0) {
223+
for (c = 0; c < outputChannels; ++c) {
224+
var outChannel = event.outputBuffer.getChannelData(c);
225+
for (i = 0, j = c; i < bufferSize; ++i, j += outputChannels) {
226+
outChannel[i] = outbufferArray[j];
227+
}
227228
}
228229
}
229-
}
230-
};
230+
};
231231

232-
if (inputChannels > 0) {
233-
navigator.getUserMedia = navigator.getUserMedia ||
234-
navigator.webkitGetUserMedia ||
235-
navigator.mozGetUserMedia ||
236-
navigator.msGetUserMedia;
237-
238-
if (navigator.getUserMedia) {
239-
navigator.getUserMedia(
240-
{audio: true},
241-
function (audioIn){
242-
var mediaElement = AUDIO.context.createMediaStreamSource(audioIn);
243-
mediaElement.connect(stream);
244-
AUDIO.mediaElement = mediaElement;
245-
},
246-
function (error){
247-
console.log("error creating audio in",error);
248-
});
249-
}
250-
}
232+
if (inputChannels > 0) {
233+
navigator.mediaDevices.getUserMedia({ audio: true })
234+
.then(function (audioIn) {
235+
var mediaElement = AUDIO.context.createMediaStreamSource(audioIn);
236+
mediaElement.connect(stream);
237+
AUDIO.mediaElement = mediaElement;
238+
})
239+
.catch(function (error) {
240+
console.log("Error creating audio in", error);
241+
});
242+
}
251243

252-
stream.connect(AUDIO.fft);
253-
},
244+
stream.connect(AUDIO.fft);
245+
},
254246

255247
html5audio_stream_free: function () {
256248

0 commit comments

Comments
 (0)