mirror of
https://github.com/overte-org/overte.git
synced 2025-04-26 03:56:11 +02:00
79 lines
2.2 KiB
JavaScript
79 lines
2.2 KiB
JavaScript
//
|
|
// Created by Alan-Michael Moody on 4/17/2017
|
|
//
|
|
|
|
(function () {
|
|
var barID;
|
|
|
|
this.preload = function (entityID) {
|
|
var children = Entities.getChildrenIDs(entityID);
|
|
var childZero = Entities.getEntityProperties(children[0]);
|
|
barID = childZero.id;
|
|
};
|
|
|
|
var SCAN_RATE = 100; //ms
|
|
var REFERENCE_FRAME_COUNT = 30;
|
|
var MAX_AUDIO_THRESHOLD = 16000;
|
|
|
|
var framePool = [];
|
|
|
|
function scanEngine() {
|
|
var avatarLoudnessPool = [];
|
|
|
|
function average(a) {
|
|
var sum = 0;
|
|
var total = a.length;
|
|
for (var i = 0; i < total; i++) {
|
|
sum += a[i];
|
|
}
|
|
return Math.round(sum / total);
|
|
}
|
|
|
|
function audioClamp(input) {
|
|
if (input > MAX_AUDIO_THRESHOLD) return MAX_AUDIO_THRESHOLD;
|
|
return input;
|
|
}
|
|
|
|
|
|
var avatars = AvatarList.getAvatarIdentifiers();
|
|
avatars.forEach(function (id) {
|
|
var avatar = AvatarList.getAvatar(id);
|
|
avatarLoudnessPool.push(audioClamp(Math.round(avatar.audioLoudness)));
|
|
});
|
|
|
|
|
|
framePool.push(average(avatarLoudnessPool));
|
|
if (framePool.length >= REFERENCE_FRAME_COUNT) {
|
|
framePool.shift();
|
|
}
|
|
|
|
function normalizedAverage(a) {
|
|
a = a.map(function (v) {
|
|
return Math.round(( 100 / MAX_AUDIO_THRESHOLD ) * v);
|
|
});
|
|
return average(a);
|
|
}
|
|
|
|
var norm = normalizedAverage(framePool);
|
|
|
|
|
|
var barProperties = Entities.getEntityProperties(barID);
|
|
|
|
var colorShift = 2.55 * norm; //shifting the scale to 0 - 255
|
|
var xShift = norm / 52; // changing scale from 0-100 to 0-1.9 ish
|
|
var normShift = xShift - 0.88; //shifting local displacement (-0.88)
|
|
var halfShift = xShift / 2;
|
|
Entities.editEntity(barID, {
|
|
dimensions: {x: xShift, y: barProperties.dimensions.y, z: barProperties.dimensions.z},
|
|
localPosition: {x: normShift - (halfShift), y: -0.0625, z: -0.015},
|
|
color: {red: colorShift, green: barProperties.color.green, blue: barProperties.color.blue}
|
|
});
|
|
|
|
|
|
}
|
|
|
|
Script.setInterval(function () {
|
|
scanEngine();
|
|
}, SCAN_RATE);
|
|
|
|
});
|