mirror of
https://github.com/overte-org/overte.git
synced 2025-08-06 18:50:00 +02:00
Merge remote-tracking branch 'upstream/tablet-ui' into tablet-ui
This commit is contained in:
commit
e4a08709c6
4 changed files with 59 additions and 3 deletions
|
@ -5,11 +5,16 @@ Item {
|
||||||
id: tablet
|
id: tablet
|
||||||
objectName: "tablet"
|
objectName: "tablet"
|
||||||
|
|
||||||
property double miclevel: 0.8
|
property double micLevel: 0.8
|
||||||
|
|
||||||
width: parent.width
|
width: parent.width
|
||||||
height: parent.height
|
height: parent.height
|
||||||
|
|
||||||
|
// called by C++ code to keep audio bar updated
|
||||||
|
function setMicLevel(newMicLevel) {
|
||||||
|
tablet.micLevel = newMicLevel;
|
||||||
|
}
|
||||||
|
|
||||||
// used to look up a button by its uuid
|
// used to look up a button by its uuid
|
||||||
function findButtonIndex(uuid) {
|
function findButtonIndex(uuid) {
|
||||||
if (!uuid) {
|
if (!uuid) {
|
||||||
|
@ -101,7 +106,7 @@ Item {
|
||||||
}
|
}
|
||||||
Rectangle {
|
Rectangle {
|
||||||
id: audioBarMask
|
id: audioBarMask
|
||||||
width: parent.width * tablet.miclevel
|
width: parent.width * tablet.micLevel
|
||||||
color: "#333333"
|
color: "#333333"
|
||||||
radius: 5
|
radius: 5
|
||||||
anchors.bottom: parent.bottom
|
anchors.bottom: parent.bottom
|
||||||
|
@ -183,7 +188,7 @@ Item {
|
||||||
|
|
||||||
PropertyChanges {
|
PropertyChanges {
|
||||||
target: tablet
|
target: tablet
|
||||||
miclevel: 0
|
micLevel: 0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
|
@ -143,6 +143,15 @@ void TabletProxy::removeButton(QObject* tabletButtonProxy) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TabletProxy::updateAudioBar(const double micLevel) {
|
||||||
|
auto tablet = getQmlTablet();
|
||||||
|
if (!tablet) {
|
||||||
|
qCCritical(scriptengine) << "Could not find tablet in TabletRoot.qml";
|
||||||
|
} else {
|
||||||
|
QMetaObject::invokeMethod(tablet, "setMicLevel", Qt::AutoConnection, Q_ARG(QVariant, QVariant(micLevel)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void TabletProxy::emitScriptEvent(QVariant msg) {
|
void TabletProxy::emitScriptEvent(QVariant msg) {
|
||||||
if (_qmlOffscreenSurface) {
|
if (_qmlOffscreenSurface) {
|
||||||
QMetaObject::invokeMethod(_qmlOffscreenSurface, "emitScriptEvent", Qt::AutoConnection, Q_ARG(QVariant, msg));
|
QMetaObject::invokeMethod(_qmlOffscreenSurface, "emitScriptEvent", Qt::AutoConnection, Q_ARG(QVariant, msg));
|
||||||
|
|
|
@ -84,6 +84,13 @@ public:
|
||||||
*/
|
*/
|
||||||
Q_INVOKABLE void removeButton(QObject* tabletButtonProxy);
|
Q_INVOKABLE void removeButton(QObject* tabletButtonProxy);
|
||||||
|
|
||||||
|
/**jsdoc
|
||||||
|
* @function TabletProxy#updateAudioBar
|
||||||
|
* Updates the audio bar in tablet to reflect latest mic level
|
||||||
|
* @param micLevel {double} mic level value between 0 and 1
|
||||||
|
*/
|
||||||
|
Q_INVOKABLE void updateAudioBar(const double micLevel);
|
||||||
|
|
||||||
QString getName() const { return _name; }
|
QString getName() const { return _name; }
|
||||||
|
|
||||||
/**jsdoc
|
/**jsdoc
|
||||||
|
|
|
@ -55,4 +55,39 @@
|
||||||
Script.update.connect(updateShowTablet);
|
Script.update.connect(updateShowTablet);
|
||||||
// Script.setInterval(updateShowTablet, 1000);
|
// Script.setInterval(updateShowTablet, 1000);
|
||||||
|
|
||||||
|
// Initialise variables used to calculate audio level
|
||||||
|
var accumulatedLevel = 0.0;
|
||||||
|
// Note: Might have to tweak the following two based on the rate we're getting the data
|
||||||
|
var AVERAGING_RATIO = 0.05;
|
||||||
|
var MIC_LEVEL_UPDATE_INTERVAL_MS = 100;
|
||||||
|
|
||||||
|
// Calculate microphone level with the same scaling equation (log scale, exponentially averaged) in AvatarInputs and pal.js
|
||||||
|
function getMicLevel() {
|
||||||
|
var LOUDNESS_FLOOR = 11.0;
|
||||||
|
var LOUDNESS_SCALE = 2.8 / 5.0;
|
||||||
|
var LOG2 = Math.log(2.0);
|
||||||
|
var micLevel = 0.0;
|
||||||
|
accumulatedLevel = AVERAGING_RATIO * accumulatedLevel + (1 - AVERAGING_RATIO) * (MyAvatar.audioLoudness);
|
||||||
|
// Convert to log base 2
|
||||||
|
var logLevel = Math.log(accumulatedLevel + 1) / LOG2;
|
||||||
|
|
||||||
|
if (logLevel <= LOUDNESS_FLOOR) {
|
||||||
|
micLevel = logLevel / LOUDNESS_FLOOR * LOUDNESS_SCALE;
|
||||||
|
} else {
|
||||||
|
micLevel = (logLevel - (LOUDNESS_FLOOR - 1.0)) * LOUDNESS_SCALE;
|
||||||
|
}
|
||||||
|
if (micLevel > 1.0) {
|
||||||
|
micLevel = 1.0;
|
||||||
|
}
|
||||||
|
return micLevel;
|
||||||
|
}
|
||||||
|
|
||||||
|
Script.setInterval(function() {
|
||||||
|
if (tabletShown) {
|
||||||
|
var currentMicLevel = getMicLevel();
|
||||||
|
var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system");
|
||||||
|
tablet.updateAudioBar(currentMicLevel);
|
||||||
|
}
|
||||||
|
}, MIC_LEVEL_UPDATE_INTERVAL_MS);
|
||||||
|
|
||||||
}()); // END LOCAL_SCOPE
|
}()); // END LOCAL_SCOPE
|
||||||
|
|
Loading…
Reference in a new issue