mirror of
https://github.com/JulianGro/overte.git
synced 2025-04-25 16:55:07 +02:00
store audio level in overlay data object (so that they gc properly and we
have the data to color with).
This commit is contained in:
parent
7ce4277b4c
commit
42b2b2154e
1 changed files with 9 additions and 4 deletions
|
@ -422,7 +422,7 @@ var LOUDNESS_FLOOR = 11.0;
|
|||
var LOUDNESS_SCALE = 2.8 / 5.0;
|
||||
var LOG2 = Math.log(2.0);
|
||||
var AUDIO_LEVEL_UPDATE_INTERVAL_MS = 100; // 10hz for now (change this and change the AVERAGING_RATIO too)
|
||||
var accumulatedLevels = {};
|
||||
var myData = {}; // we're not includied in ExtendedOverlay.get.
|
||||
|
||||
function getAudioLevel(id) {
|
||||
// the VU meter should work similarly to the one in AvatarInputs: log scale, exponentially averaged
|
||||
|
@ -430,13 +430,18 @@ function getAudioLevel(id) {
|
|||
// of updating (the latter for efficiency too).
|
||||
var avatar = AvatarList.getAvatar(id);
|
||||
var audioLevel = 0.0;
|
||||
var data = id ? ExtendedOverlay.get(id) : myData;
|
||||
if (!data) {
|
||||
print('no data for', id);
|
||||
return audioLevel;
|
||||
}
|
||||
|
||||
// we will do exponential moving average by taking some the last loudness and averaging
|
||||
accumulatedLevels[id] = AVERAGING_RATIO * (accumulatedLevels[id] || 0) + (1 - AVERAGING_RATIO) * (avatar.audioLoudness);
|
||||
data.accumulatedLevel = AVERAGING_RATIO * (data.accumulatedLevel || 0) + (1 - AVERAGING_RATIO) * (avatar.audioLoudness);
|
||||
|
||||
// add 1 to insure we don't go log() and hit -infinity. Math.log is
|
||||
// natural log, so to get log base 2, just divide by ln(2).
|
||||
var logLevel = Math.log(accumulatedLevels[id] + 1) / LOG2;
|
||||
var logLevel = Math.log(data.accumulatedLevel + 1) / LOG2;
|
||||
|
||||
if (logLevel <= LOUDNESS_FLOOR) {
|
||||
audioLevel = logLevel / LOUDNESS_FLOOR * LOUDNESS_SCALE;
|
||||
|
@ -455,7 +460,7 @@ function getAudioLevel(id) {
|
|||
Script.setInterval(function () {
|
||||
if (pal.visible) {
|
||||
var param = {};
|
||||
AvatarList.getAvatarIdentifiers().sort().forEach(function (id) {
|
||||
AvatarList.getAvatarIdentifiers().forEach(function (id) {
|
||||
var level = getAudioLevel(id);
|
||||
// qml didn't like an object with null/empty string for a key, so...
|
||||
var userId = id || 0;
|
||||
|
|
Loading…
Reference in a new issue