send the mic level from js

This commit is contained in:
Faye Li 2017-01-03 12:57:08 -08:00
parent d8227a686c
commit 4391e9eaee

View file

@ -71,33 +71,33 @@
var accumulatedLevel = 0.0; var accumulatedLevel = 0.0;
// Note: Might have to tweak the following two based on the rate we're getting the data // Note: Might have to tweak the following two based on the rate we're getting the data
var AVERAGING_RATIO = 0.05; var AVERAGING_RATIO = 0.05;
var AUDIO_LEVEL_UPDATE_INTERVAL_MS = 100; var MIC_LEVEL_UPDATE_INTERVAL_MS = 100;
// Calculate audio level with the same scaling equation (log scale, exponentially averaged) in AvatarInputs and pal.js // Calculate microphone level with the same scaling equation (log scale, exponentially averaged) in AvatarInputs and pal.js
function getAudioLevel() { function getMicLevel() {
var LOUDNESS_FLOOR = 11.0; var LOUDNESS_FLOOR = 11.0;
var LOUDNESS_SCALE = 2.8 / 5.0; var LOUDNESS_SCALE = 2.8 / 5.0;
var LOG2 = Math.log(2.0); var LOG2 = Math.log(2.0);
var audioLevel = 0.0; var micLevel = 0.0;
accumulatedLevel = AVERAGING_RATIO * accumulatedLevel + (1 - AVERAGING_RATIO) * (MyAvatar.audioLoudness); accumulatedLevel = AVERAGING_RATIO * accumulatedLevel + (1 - AVERAGING_RATIO) * (MyAvatar.audioLoudness);
// Convert to log base 2 // Convert to log base 2
var logLevel = Math.log(accumulatedLevel + 1) / LOG2; var logLevel = Math.log(accumulatedLevel + 1) / LOG2;
if (logLevel <= LOUDNESS_FLOOR) { if (logLevel <= LOUDNESS_FLOOR) {
audioLevel = logLevel / LOUDNESS_FLOOR * LOUDNESS_SCALE; micLevel = logLevel / LOUDNESS_FLOOR * LOUDNESS_SCALE;
} else { } else {
audioLevel = (logLevel - (LOUDNESS_FLOOR - 1.0)) * LOUDNESS_SCALE; micLevel = (logLevel - (LOUDNESS_FLOOR - 1.0)) * LOUDNESS_SCALE;
} }
if (audioLevel > 1.0) { if (micLevel > 1.0) {
audioLevel = 1.0; micLevel = 1.0;
} }
return audioLevel; return micLevel;
} }
Script.setInterval(function() { Script.setInterval(function() {
var currentAudioLevel = getAudioLevel(); var currentMicLevel = getMicLevel();
// TODO: send the audio level to QML var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system");
tablet.updateAudioBar(currentMicLevel);
}, AUDIO_LEVEL_UPDATE_INTERVAL_MS); }, MIC_LEVEL_UPDATE_INTERVAL_MS);
}()); // END LOCAL_SCOPE }()); // END LOCAL_SCOPE