Give noisy mutes their own packet type

This commit is contained in:
Atlante45 2014-11-17 10:26:47 -08:00
parent 0507edf90f
commit 46eebe9d40
4 changed files with 23 additions and 23 deletions

View file

@ -779,21 +779,9 @@ void AudioMixer::run() {
static const int TIME_BETWEEN_MUTES = 5; // in secs static const int TIME_BETWEEN_MUTES = 5; // in secs
if (usecTimestampNow() - nodeData->getAvatarAudioStream()->getLastMuted() > if (usecTimestampNow() - nodeData->getAvatarAudioStream()->getLastMuted() >
TIME_BETWEEN_MUTES * USECS_PER_SECOND) { TIME_BETWEEN_MUTES * USECS_PER_SECOND) {
int headerSize = numBytesForPacketHeaderGivenPacketType(PacketTypeMuteEnvironment); QByteArray packet = byteArrayWithPopulatedHeader(PacketTypeNoisyMute);
int packetSize = headerSize + sizeof(glm::vec3) + sizeof(float); nodeList->writeDatagram(packet, node);
// 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);
nodeData->getAvatarAudioStream()->setLastMutedNow(); nodeData->getAvatarAudioStream()->setLastMutedNow();
free(packet);
} }
} }

View file

@ -141,18 +141,29 @@ void DatagramProcessor::processDatagrams() {
AccountManager::getInstance().checkAndSignalForAccessToken(); AccountManager::getInstance().checkAndSignalForAccessToken();
break; break;
} }
case PacketTypeNoisyMute:
case PacketTypeMuteEnvironment: { case PacketTypeMuteEnvironment: {
glm::vec3 position; bool mute = !Application::getInstance()->getAudio()->getMuted();
float radius;
int headerSize = numBytesForPacketHeaderGivenPacketType(PacketTypeMuteEnvironment); if (incomingType == PacketTypeMuteEnvironment) {
memcpy(&position, incomingPacket.constData() + headerSize, sizeof(glm::vec3)); glm::vec3 position;
memcpy(&radius, incomingPacket.constData() + headerSize + sizeof(glm::vec3), sizeof(float)); 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 if (mute) {
&& !Application::getInstance()->getAudio()->getMuted()) {
Application::getInstance()->getAudio()->toggleMute(); Application::getInstance()->getAudio()->toggleMute();
AudioScriptingInterface::getInstance().mutedByMixer(); if (incomingType == PacketTypeMuteEnvironment) {
AudioScriptingInterface::getInstance().environmentMuted();
} else {
AudioScriptingInterface::getInstance().mutedByMixer();
}
} }
break; break;
} }

View file

@ -39,6 +39,7 @@ public slots:
signals: signals:
void mutedByMixer(); void mutedByMixer();
void environmentMuted();
private: private:
AudioScriptingInterface(); AudioScriptingInterface();

View file

@ -54,7 +54,7 @@ enum PacketType {
UNUSED_2, UNUSED_2,
UNUSED_3, UNUSED_3,
UNUSED_4, UNUSED_4,
UNUSED_5, PacketTypeNoisyMute,
PacketTypeMetavoxelData, PacketTypeMetavoxelData,
PacketTypeAvatarIdentity, PacketTypeAvatarIdentity,
PacketTypeAvatarBillboard, PacketTypeAvatarBillboard,