mirror of
https://github.com/overte-org/overte.git
synced 2025-08-04 01:43:27 +02:00
Persist the audio-mixer settings across domain changes and server resets
This commit is contained in:
parent
e671a124c3
commit
cbeb4b0b20
2 changed files with 28 additions and 13 deletions
|
@ -265,8 +265,6 @@ void NodeList::reset(bool skipDomainHandlerReset) {
|
||||||
_avatarGainMap.clear();
|
_avatarGainMap.clear();
|
||||||
_avatarGainMapLock.unlock();
|
_avatarGainMapLock.unlock();
|
||||||
|
|
||||||
_injectorGain = 0.0f;
|
|
||||||
|
|
||||||
if (!skipDomainHandlerReset) {
|
if (!skipDomainHandlerReset) {
|
||||||
// clear the domain connection information, unless they're the ones that asked us to reset
|
// clear the domain connection information, unless they're the ones that asked us to reset
|
||||||
_domainHandler.softReset();
|
_domainHandler.softReset();
|
||||||
|
@ -1018,6 +1016,14 @@ void NodeList::maybeSendIgnoreSetToNode(SharedNodePointer newNode) {
|
||||||
|
|
||||||
// also send them the current ignore radius state.
|
// also send them the current ignore radius state.
|
||||||
sendIgnoreRadiusStateToNode(newNode);
|
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) {
|
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,
|
// 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()) {
|
if (nodeID.isNull()) {
|
||||||
qCDebug(networking) << "Sending Set MASTER Avatar Gain packet with Gain:" << gain;
|
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);
|
sendPacket(std::move(setAvatarGainPacket), *audioMixer);
|
||||||
QWriteLocker lock{ &_avatarGainMapLock };
|
_avatarGain = gain;
|
||||||
_avatarGainMap[nodeID] = 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 {
|
} else {
|
||||||
qWarning() << "Couldn't find audio mixer to send set gain request";
|
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) {
|
float NodeList::getAvatarGain(const QUuid& nodeID) {
|
||||||
QReadLocker lock{ &_avatarGainMapLock };
|
if (nodeID.isNull()) {
|
||||||
auto it = _avatarGainMap.find(nodeID);
|
return _avatarGain;
|
||||||
if (it != _avatarGainMap.cend()) {
|
} else {
|
||||||
return it->second;
|
QReadLocker lock{ &_avatarGainMapLock };
|
||||||
|
auto it = _avatarGainMap.find(nodeID);
|
||||||
|
if (it != _avatarGainMap.cend()) {
|
||||||
|
return it->second;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return 0.0f;
|
return 0.0f;
|
||||||
}
|
}
|
||||||
|
|
|
@ -183,7 +183,8 @@ private:
|
||||||
mutable QReadWriteLock _avatarGainMapLock;
|
mutable QReadWriteLock _avatarGainMapLock;
|
||||||
tbb::concurrent_unordered_map<QUuid, float, UUIDHasher> _avatarGainMap;
|
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);
|
void sendIgnoreRadiusStateToNode(const SharedNodePointer& destinationNode);
|
||||||
#if defined(Q_OS_ANDROID)
|
#if defined(Q_OS_ANDROID)
|
||||||
|
|
Loading…
Reference in a new issue