mirror of
https://github.com/overte-org/overte.git
synced 2025-04-15 17:20:12 +02:00
Persist the audio-mixer settings across domain changes and server resets
This commit is contained in:
parent
c15813b442
commit
3d7c3e7b6f
2 changed files with 28 additions and 13 deletions
|
@ -265,8 +265,6 @@ void NodeList::reset(bool skipDomainHandlerReset) {
|
|||
_avatarGainMap.clear();
|
||||
_avatarGainMapLock.unlock();
|
||||
|
||||
_injectorGain = 0.0f;
|
||||
|
||||
if (!skipDomainHandlerReset) {
|
||||
// clear the domain connection information, unless they're the ones that asked us to reset
|
||||
_domainHandler.softReset();
|
||||
|
@ -1018,6 +1016,14 @@ void NodeList::maybeSendIgnoreSetToNode(SharedNodePointer newNode) {
|
|||
|
||||
// also send them the current ignore radius state.
|
||||
sendIgnoreRadiusStateToNode(newNode);
|
||||
|
||||
// also send the current avatar and injector gains
|
||||
if (_avatarGain != 0.0f) {
|
||||
setAvatarGain(QUuid(), _avatarGain);
|
||||
}
|
||||
if (_injectorGain != 0.0f) {
|
||||
setInjectorGain(_injectorGain);
|
||||
}
|
||||
}
|
||||
if (newNode->getType() == NodeType::AvatarMixer) {
|
||||
// this is a mixer that we just added - it's unlikely it knows who we were previously ignoring in this session,
|
||||
|
@ -1064,13 +1070,17 @@ void NodeList::setAvatarGain(const QUuid& nodeID, float gain) {
|
|||
|
||||
if (nodeID.isNull()) {
|
||||
qCDebug(networking) << "Sending Set MASTER Avatar Gain packet with Gain:" << gain;
|
||||
} else {
|
||||
qCDebug(networking) << "Sending Set Avatar Gain packet with UUID: " << uuidStringWithoutCurlyBraces(nodeID) << "Gain:" << gain;
|
||||
}
|
||||
|
||||
sendPacket(std::move(setAvatarGainPacket), *audioMixer);
|
||||
QWriteLocker lock{ &_avatarGainMapLock };
|
||||
_avatarGainMap[nodeID] = gain;
|
||||
sendPacket(std::move(setAvatarGainPacket), *audioMixer);
|
||||
_avatarGain = gain;
|
||||
|
||||
} else {
|
||||
qCDebug(networking) << "Sending Set Avatar Gain packet with UUID:" << uuidStringWithoutCurlyBraces(nodeID) << "Gain:" << gain;
|
||||
|
||||
sendPacket(std::move(setAvatarGainPacket), *audioMixer);
|
||||
QWriteLocker lock{ &_avatarGainMapLock };
|
||||
_avatarGainMap[nodeID] = gain;
|
||||
}
|
||||
|
||||
} else {
|
||||
qWarning() << "Couldn't find audio mixer to send set gain request";
|
||||
|
@ -1081,10 +1091,14 @@ void NodeList::setAvatarGain(const QUuid& nodeID, float gain) {
|
|||
}
|
||||
|
||||
float NodeList::getAvatarGain(const QUuid& nodeID) {
|
||||
QReadLocker lock{ &_avatarGainMapLock };
|
||||
auto it = _avatarGainMap.find(nodeID);
|
||||
if (it != _avatarGainMap.cend()) {
|
||||
return it->second;
|
||||
if (nodeID.isNull()) {
|
||||
return _avatarGain;
|
||||
} else {
|
||||
QReadLocker lock{ &_avatarGainMapLock };
|
||||
auto it = _avatarGainMap.find(nodeID);
|
||||
if (it != _avatarGainMap.cend()) {
|
||||
return it->second;
|
||||
}
|
||||
}
|
||||
return 0.0f;
|
||||
}
|
||||
|
|
|
@ -183,7 +183,8 @@ private:
|
|||
mutable QReadWriteLock _avatarGainMapLock;
|
||||
tbb::concurrent_unordered_map<QUuid, float, UUIDHasher> _avatarGainMap;
|
||||
|
||||
std::atomic<float> _injectorGain { 0.0f };
|
||||
std::atomic<float> _avatarGain { 0.0f }; // in dB
|
||||
std::atomic<float> _injectorGain { 0.0f }; // in dB
|
||||
|
||||
void sendIgnoreRadiusStateToNode(const SharedNodePointer& destinationNode);
|
||||
#if defined(Q_OS_ANDROID)
|
||||
|
|
Loading…
Reference in a new issue