mirror of
https://github.com/overte-org/overte.git
synced 2025-08-09 07:58:59 +02:00
Send and receive Avatar MASTER Gain packets, signaled using null nodeID.
Packet protocol change is not needed (existing audio-mixer will ignore).
This commit is contained in:
parent
de4fd269ef
commit
6ba2a83bbe
3 changed files with 19 additions and 8 deletions
|
@ -189,8 +189,14 @@ void AudioMixerClientData::parsePerAvatarGainSet(ReceivedMessage& message, const
|
||||||
uint8_t packedGain;
|
uint8_t packedGain;
|
||||||
message.readPrimitive(&packedGain);
|
message.readPrimitive(&packedGain);
|
||||||
float gain = unpackFloatGainFromByte(packedGain);
|
float gain = unpackFloatGainFromByte(packedGain);
|
||||||
hrtfForStream(avatarUuid, QUuid()).setGainAdjustment(gain);
|
|
||||||
qDebug() << "Setting gain adjustment for hrtf[" << uuid << "][" << avatarUuid << "] to " << gain;
|
if (avatarUuid.isNull()) {
|
||||||
|
// FIXME: change master gain, and reset hrtf gains for all active streams
|
||||||
|
qDebug() << "Setting MASTER avatar gain for [" << uuid << "] to " << gain;
|
||||||
|
} else {
|
||||||
|
hrtfForStream(avatarUuid, QUuid()).setGainAdjustment(gain);
|
||||||
|
qDebug() << "Setting avatar gain adjustment for hrtf[" << uuid << "][" << avatarUuid << "] to " << gain;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void AudioMixerClientData::parseNodeIgnoreRequest(QSharedPointer<ReceivedMessage> message, const SharedNodePointer& node) {
|
void AudioMixerClientData::parseNodeIgnoreRequest(QSharedPointer<ReceivedMessage> message, const SharedNodePointer& node) {
|
||||||
|
|
|
@ -979,8 +979,8 @@ void NodeList::maybeSendIgnoreSetToNode(SharedNodePointer newNode) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void NodeList::setAvatarGain(const QUuid& nodeID, float gain) {
|
void NodeList::setAvatarGain(const QUuid& nodeID, float gain) {
|
||||||
// cannot set gain of yourself or nobody
|
// cannot set gain of yourself
|
||||||
if (!nodeID.isNull() && _sessionUUID != nodeID) {
|
if (_sessionUUID != nodeID) {
|
||||||
auto audioMixer = soloNodeOfType(NodeType::AudioMixer);
|
auto audioMixer = soloNodeOfType(NodeType::AudioMixer);
|
||||||
if (audioMixer) {
|
if (audioMixer) {
|
||||||
// setup the packet
|
// setup the packet
|
||||||
|
@ -988,10 +988,15 @@ void NodeList::setAvatarGain(const QUuid& nodeID, float gain) {
|
||||||
|
|
||||||
// write the node ID to the packet
|
// write the node ID to the packet
|
||||||
setAvatarGainPacket->write(nodeID.toRfc4122());
|
setAvatarGainPacket->write(nodeID.toRfc4122());
|
||||||
|
|
||||||
// We need to convert the gain in dB (from the script) to an amplitude before packing it.
|
// We need to convert the gain in dB (from the script) to an amplitude before packing it.
|
||||||
setAvatarGainPacket->writePrimitive(packFloatGainToByte(fastExp2f(gain / 6.0206f)));
|
setAvatarGainPacket->writePrimitive(packFloatGainToByte(fastExp2f(gain / 6.0206f)));
|
||||||
|
|
||||||
qCDebug(networking) << "Sending Set Avatar Gain packet UUID: " << uuidStringWithoutCurlyBraces(nodeID) << "Gain:" << gain;
|
if (nodeID.isNull()) {
|
||||||
|
qCDebug(networking) << "Sending Set Avatar MASTER Gain packet with Gain:" << gain;
|
||||||
|
} else {
|
||||||
|
qCDebug(networking) << "Sending Set Avatar Gain packet with UUID: " << uuidStringWithoutCurlyBraces(nodeID) << "Gain:" << gain;
|
||||||
|
}
|
||||||
|
|
||||||
sendPacket(std::move(setAvatarGainPacket), *audioMixer);
|
sendPacket(std::move(setAvatarGainPacket), *audioMixer);
|
||||||
QWriteLocker{ &_avatarGainMapLock };
|
QWriteLocker{ &_avatarGainMapLock };
|
||||||
|
@ -1001,7 +1006,7 @@ void NodeList::setAvatarGain(const QUuid& nodeID, float gain) {
|
||||||
qWarning() << "Couldn't find audio mixer to send set gain request";
|
qWarning() << "Couldn't find audio mixer to send set gain request";
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
qWarning() << "NodeList::setAvatarGain called with an invalid ID or an ID which matches the current session ID:" << nodeID;
|
qWarning() << "NodeList::setAvatarGain called with an ID which matches the current session ID:" << nodeID;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -65,7 +65,7 @@ public slots:
|
||||||
* Sets an avatar's gain for you and you only.
|
* Sets an avatar's gain for you and you only.
|
||||||
* Units are Decibels (dB)
|
* Units are Decibels (dB)
|
||||||
* @function Users.setAvatarGain
|
* @function Users.setAvatarGain
|
||||||
* @param {nodeID} nodeID The node or session ID of the user whose gain you want to modify.
|
* @param {nodeID} nodeID The node or session ID of the user whose gain you want to modify, or null to set the master gain.
|
||||||
* @param {float} gain The gain of the avatar you'd like to set. Units are dB.
|
* @param {float} gain The gain of the avatar you'd like to set. Units are dB.
|
||||||
*/
|
*/
|
||||||
void setAvatarGain(const QUuid& nodeID, float gain);
|
void setAvatarGain(const QUuid& nodeID, float gain);
|
||||||
|
@ -73,7 +73,7 @@ public slots:
|
||||||
/**jsdoc
|
/**jsdoc
|
||||||
* Gets an avatar's gain for you and you only.
|
* Gets an avatar's gain for you and you only.
|
||||||
* @function Users.getAvatarGain
|
* @function Users.getAvatarGain
|
||||||
* @param {nodeID} nodeID The node or session ID of the user whose gain you want to get.
|
* @param {nodeID} nodeID The node or session ID of the user whose gain you want to get, or null to get the master gain.
|
||||||
* @return {float} gain (in dB)
|
* @return {float} gain (in dB)
|
||||||
*/
|
*/
|
||||||
float getAvatarGain(const QUuid& nodeID);
|
float getAvatarGain(const QUuid& nodeID);
|
||||||
|
|
Loading…
Reference in a new issue