From d5ecb99b16125ae9a9bb379f8c7573e54ac3ea8c Mon Sep 17 00:00:00 2001 From: Brad Hefta-Gaub Date: Fri, 1 Apr 2016 08:57:37 -0700 Subject: [PATCH] switch to HMD preferred audio when mounting the HMD --- examples/selectAudioDevice.js | 70 +++++++++++++++++++++++++++++++++-- 1 file changed, 66 insertions(+), 4 deletions(-) diff --git a/examples/selectAudioDevice.js b/examples/selectAudioDevice.js index c86d034adb..8aeacfaef1 100644 --- a/examples/selectAudioDevice.js +++ b/examples/selectAudioDevice.js @@ -120,27 +120,89 @@ function menuItemEvent(menuItem) { if (menuItem.endsWith(" for Output")) { var selectedDevice = menuItem.trimStartsWith("Use ").trimEndsWith(" for Output"); print("output audio selection..." + selectedDevice); - Menu.menuItemEvent.disconnect(menuItemEvent); + Menu.menuItemEvent.disconnect(menuItemEvent); Menu.setIsOptionChecked(selectedOutputMenu, false); selectedOutputMenu = menuItem; Menu.setIsOptionChecked(selectedOutputMenu, true); if (AudioDevice.setOutputDevice(selectedDevice)) { Settings.setValue(OUTPUT_DEVICE_SETTING, selectedDevice); } - Menu.menuItemEvent.connect(menuItemEvent); + Menu.menuItemEvent.connect(menuItemEvent); } else if (menuItem.endsWith(" for Input")) { var selectedDevice = menuItem.trimStartsWith("Use ").trimEndsWith(" for Input"); print("input audio selection..." + selectedDevice); - Menu.menuItemEvent.disconnect(menuItemEvent); + Menu.menuItemEvent.disconnect(menuItemEvent); Menu.setIsOptionChecked(selectedInputMenu, false); selectedInputMenu = menuItem; Menu.setIsOptionChecked(selectedInputMenu, true); if (AudioDevice.setInputDevice(selectedDevice)) { Settings.setValue(INPUT_DEVICE_SETTING, selectedDevice); } - Menu.menuItemEvent.connect(menuItemEvent); + Menu.menuItemEvent.connect(menuItemEvent); } } } Menu.menuItemEvent.connect(menuItemEvent); + +// Some HMDs (like Oculus CV1) have a built in audio device. If they +// do, then this function will handle switching to that device automatically +// when you goActive with the HMD active. +var wasHmdMounted = HMD.mounted; +var switchedAudioInputToHMD = false; +var switchedAudioOutputToHMD = false; +var previousSelectedInputAudioDevice = ""; +var previousSelectedOutputAudioDevice = ""; +function checkHMDAudio() { + // Mounted state is changing... handle switching + if (HMD.mounted != wasHmdMounted) { + print("HMD mounted changed..."); + + // We're putting the HMD on... switch to those devices + if (HMD.mounted) { + print("NOW mounted..."); + var hmdPreferredAudioInput = HMD.preferredAudioInput(); + var hmdPreferredAudioOutput = HMD.preferredAudioOutput(); + print("hmdPreferredAudioInput:" + hmdPreferredAudioInput); + print("hmdPreferredAudioOutput:" + hmdPreferredAudioOutput); + + + var hmdHasPreferredAudio = (hmdPreferredAudioInput !== "") || (hmdPreferredAudioOutput !== ""); + if (hmdHasPreferredAudio) { + print("HMD has preferred audio!"); + previousSelectedInputAudioDevice = Settings.getValue(INPUT_DEVICE_SETTING); + previousSelectedOutputAudioDevice = Settings.getValue(OUTPUT_DEVICE_SETTING); + print("previousSelectedInputAudioDevice:" + previousSelectedInputAudioDevice); + print("previousSelectedOutputAudioDevice:" + previousSelectedOutputAudioDevice); + if (hmdPreferredAudioInput != previousSelectedInputAudioDevice && hmdPreferredAudioInput !== "") { + print("switching to HMD preferred audio input to:" + hmdPreferredAudioInput); + switchedAudioInputToHMD = true; + menuItemEvent("Use " + hmdPreferredAudioInput + " for Input"); + } + if (hmdPreferredAudioOutput != previousSelectedOutputAudioDevice && hmdPreferredAudioOutput !== "") { + print("switching to HMD preferred audio output to:" + hmdPreferredAudioOutput); + switchedAudioOutputToHMD = true; + menuItemEvent("Use " + hmdPreferredAudioOutput + " for Output"); + } + } + } else { + print("HMD NOW un-mounted..."); + if (switchedAudioInputToHMD) { + print("switching back from HMD preferred audio input to:" + previousSelectedInputAudioDevice); + menuItemEvent("Use " + previousSelectedInputAudioDevice + " for Input"); + } + if (switchedAudioOutputToHMD) { + print("switching back from HMD preferred audio output to:" + previousSelectedOutputAudioDevice); + menuItemEvent("Use " + previousSelectedOutputAudioDevice + " for Output"); + } + } + } + wasHmdMounted = HMD.mounted; +} + +Script.update.connect(checkHMDAudio); + +Script.scriptEnding.connect(function () { + Menu.menuItemEvent.disconnect(menuItemEvent); + Script.update.disconnect(checkHMDAudio); +});