diff --git a/addons/ofxEmscripten/libs/html5audio/lib/emscripten/library_audioDeviceSelect.js b/addons/ofxEmscripten/libs/html5audio/lib/emscripten/library_audioDeviceSelect.js new file mode 100644 index 00000000000..08bfd9147a0 --- /dev/null +++ b/addons/ofxEmscripten/libs/html5audio/lib/emscripten/library_audioDeviceSelect.js @@ -0,0 +1,48 @@ +var mediaElement = null; + +function getAudioDevices(){ + var audioInDevices = ""; + var audioOutDevices = ""; + if(!navigator.mediaDevices.enumerateDevices){ + console.log("enumerateDevices() not supported."); + }else{ + navigator.mediaDevices.getUserMedia({audio: true, video: false}).then(s => { + navigator.mediaDevices.enumerateDevices().then((devices) => { + devices.forEach((device) => { + if(device.kind == "audioinput"){ + audioInDevices = audioInDevices.concat(",", `${device.deviceId}`,",", `${device.label}`); + } + if(device.kind == "audiooutput"){ + audioOutDevices = audioOutDevices.concat(",", `${device.groupId}`,",", `${device.label}`); + } + }); + Module.loadAudioInDevices(audioInDevices); + Module.loadAudioOutDevices(audioOutDevices); + }) + .catch((err) => { + console.error(`${err.name}: ${err.message}`); + }); + }); + } +} + +function selectAudioIn(file){ + if (navigator.getUserMedia){ + navigator.getUserMedia( + { audio: { deviceId: { exact: file } } }, + function (audioIn){ + if(mediaElement){ + mediaElement.disconnect(); + } + mediaElement = AUDIO.context.createMediaStreamSource(audioIn); + mediaElement.connect(AUDIO.stream); + }, + function (error){ + console.log("error creating audio in",error); + }); + } +} + +function selectAudioOut(file){ + //AUDIO.context.setSinkId(file); +} diff --git a/addons/ofxEmscripten/libs/html5audio/lib/emscripten/library_html5audio.js b/addons/ofxEmscripten/libs/html5audio/lib/emscripten/library_html5audio.js index cd0ff957fd9..b6ba5361717 100644 --- a/addons/ofxEmscripten/libs/html5audio/lib/emscripten/library_html5audio.js +++ b/addons/ofxEmscripten/libs/html5audio/lib/emscripten/library_html5audio.js @@ -174,26 +174,6 @@ var LibraryHTML5Audio = { } }; - if (inputChannels > 0){ - navigator.getUserMedia = navigator.getUserMedia || - navigator.webkitGetUserMedia || - navigator.mozGetUserMedia || - navigator.msGetUserMedia; - - if (navigator.getUserMedia){ - navigator.getUserMedia( - {audio: true}, - function (audioIn){ - var mediaElement = AUDIO.context.createMediaStreamSource(audioIn); - mediaElement.connect(stream); - AUDIO.mediaElement = mediaElement; - }, - function (error){ - console.log("error creating audio in",error); - }); - } - } - stream.connect(AUDIO.fft); AUDIO.stream = stream; }, diff --git a/libs/openFrameworksCompiled/project/emscripten/config.emscripten.default.mk b/libs/openFrameworksCompiled/project/emscripten/config.emscripten.default.mk index dbd818e7517..eef13705b5d 100644 --- a/libs/openFrameworksCompiled/project/emscripten/config.emscripten.default.mk +++ b/libs/openFrameworksCompiled/project/emscripten/config.emscripten.default.mk @@ -96,6 +96,7 @@ endif PLATFORM_LDFLAGS = -Wl --gc-sections --preload-file bin/data@data --emrun --bind --profiling-funcs -s USE_FREETYPE=1 -s EXPORTED_RUNTIME_METHODS=allocate -s ALLOW_MEMORY_GROWTH=1 -s MAX_WEBGL_VERSION=2 PLATFORM_LDFLAGS += --js-library $(OF_ADDONS_PATH)/ofxEmscripten/libs/html5video/lib/emscripten/library_html5video.js PLATFORM_LDFLAGS += --js-library $(OF_ADDONS_PATH)/ofxEmscripten/libs/html5audio/lib/emscripten/library_html5audio.js +PLATFORM_LDFLAGS += --post-js $(OF_ADDONS_PATH)/ofxEmscripten/libs/html5audio/lib/emscripten/library_audioDeviceSelect.js ifdef PROJECT_EMSCRIPTEN_TEMPLATE PLATFORM_LDFLAGS += --shell-file $(PROJECT_EMSCRIPTEN_TEMPLATE)