diff --git a/assignment-client/src/audio/AudioMixer.cpp b/assignment-client/src/audio/AudioMixer.cpp index 6c8a4fd1c2..81bfe7a734 100644 --- a/assignment-client/src/audio/AudioMixer.cpp +++ b/assignment-client/src/audio/AudioMixer.cpp @@ -779,21 +779,9 @@ void AudioMixer::run() { static const int TIME_BETWEEN_MUTES = 5; // in secs if (usecTimestampNow() - nodeData->getAvatarAudioStream()->getLastMuted() > TIME_BETWEEN_MUTES * USECS_PER_SECOND) { - int headerSize = numBytesForPacketHeaderGivenPacketType(PacketTypeMuteEnvironment); - int packetSize = headerSize + sizeof(glm::vec3) + sizeof(float); - - // Fake data to force mute - glm::vec3 position = nodeData->getAvatarAudioStream()->getPosition(); - float radius = 1.0f; - - char* packet = (char*)malloc(packetSize); - populatePacketHeader(packet, PacketTypeMuteEnvironment); - memcpy(packet + headerSize, &position, sizeof(glm::vec3)); - memcpy(packet + headerSize + sizeof(glm::vec3), &radius, sizeof(float)); - - nodeList->writeDatagram(packet, packetSize, node); + QByteArray packet = byteArrayWithPopulatedHeader(PacketTypeNoisyMute); + nodeList->writeDatagram(packet, node); nodeData->getAvatarAudioStream()->setLastMutedNow(); - free(packet); } } diff --git a/interface/src/DatagramProcessor.cpp b/interface/src/DatagramProcessor.cpp index 5d034c1c17..96680423ed 100644 --- a/interface/src/DatagramProcessor.cpp +++ b/interface/src/DatagramProcessor.cpp @@ -141,18 +141,29 @@ void DatagramProcessor::processDatagrams() { AccountManager::getInstance().checkAndSignalForAccessToken(); break; } + case PacketTypeNoisyMute: case PacketTypeMuteEnvironment: { - glm::vec3 position; - float radius; + bool mute = !Application::getInstance()->getAudio()->getMuted(); - int headerSize = numBytesForPacketHeaderGivenPacketType(PacketTypeMuteEnvironment); - memcpy(&position, incomingPacket.constData() + headerSize, sizeof(glm::vec3)); - memcpy(&radius, incomingPacket.constData() + headerSize + sizeof(glm::vec3), sizeof(float)); + if (incomingType == PacketTypeMuteEnvironment) { + glm::vec3 position; + float radius, distance; + + int headerSize = numBytesForPacketHeaderGivenPacketType(PacketTypeMuteEnvironment); + memcpy(&position, incomingPacket.constData() + headerSize, sizeof(glm::vec3)); + memcpy(&radius, incomingPacket.constData() + headerSize + sizeof(glm::vec3), sizeof(float)); + distance = glm::distance(Application::getInstance()->getAvatar()->getPosition(), position); + + mute = mute && (distance < radius); + } - if (glm::distance(Application::getInstance()->getAvatar()->getPosition(), position) < radius - && !Application::getInstance()->getAudio()->getMuted()) { + if (mute) { Application::getInstance()->getAudio()->toggleMute(); - AudioScriptingInterface::getInstance().mutedByMixer(); + if (incomingType == PacketTypeMuteEnvironment) { + AudioScriptingInterface::getInstance().environmentMuted(); + } else { + AudioScriptingInterface::getInstance().mutedByMixer(); + } } break; } diff --git a/libraries/audio/src/AudioScriptingInterface.h b/libraries/audio/src/AudioScriptingInterface.h index 7a60577042..5b67666a97 100644 --- a/libraries/audio/src/AudioScriptingInterface.h +++ b/libraries/audio/src/AudioScriptingInterface.h @@ -39,6 +39,7 @@ public slots: signals: void mutedByMixer(); + void environmentMuted(); private: AudioScriptingInterface(); diff --git a/libraries/networking/src/PacketHeaders.h b/libraries/networking/src/PacketHeaders.h index d617f2243a..6cca5b505d 100644 --- a/libraries/networking/src/PacketHeaders.h +++ b/libraries/networking/src/PacketHeaders.h @@ -54,7 +54,7 @@ enum PacketType { UNUSED_2, UNUSED_3, UNUSED_4, - UNUSED_5, + PacketTypeNoisyMute, PacketTypeMetavoxelData, PacketTypeAvatarIdentity, PacketTypeAvatarBillboard,