diff --git a/assignment-client/src/audio/AudioMixer.cpp b/assignment-client/src/audio/AudioMixer.cpp index abbf8071f7..60f110fed8 100644 --- a/assignment-client/src/audio/AudioMixer.cpp +++ b/assignment-client/src/audio/AudioMixer.cpp @@ -712,8 +712,6 @@ void AudioMixer::run() { QElapsedTimer timer; timer.start(); - char clientMixBuffer[MAX_PACKET_SIZE]; - int usecToSleep = AudioConstants::NETWORK_FRAME_USECS; const int TRAILING_AVERAGE_FRAMES = 100; @@ -791,8 +789,8 @@ void AudioMixer::run() { // if the stream should be muted, send mute packet if (nodeData->getAvatarAudioStream() && shouldMute(nodeData->getAvatarAudioStream()->getQuietestFrameLoudness())) { - QByteArray packet = nodeList->byteArrayWithPopulatedHeader(PacketTypeNoisyMute); - nodeList->writeDatagram(packet, node); + auto mutePacket = NodeListPacket::create(PacketType::NoisyMute); + nodeList->sendPacket(mutePacket, node); } if (node->getType() == NodeType::Agent && node->getActiveSocket() @@ -800,41 +798,38 @@ void AudioMixer::run() { int streamsMixed = prepareMixForListeningNode(node.data()); - char* mixDataAt; + std::unique_ptr mixPacket; + if (streamsMixed > 0) { - // pack header - int numBytesMixPacketHeader = nodeList->populatePacketHeader(clientMixBuffer, PacketTypeMixedAudio); - mixDataAt = clientMixBuffer + numBytesMixPacketHeader; + int mixPacketBytes = sizeof(quint16) + AudioConstants::NETWORK_FRAME_BYTES_STEREO; + mixPacket = NodeListPacket::create(PacketType::MixedAudio); + + PacketPayload mixPacketPayload = mixPacket->getPayload(); // pack sequence number quint16 sequence = nodeData->getOutgoingSequenceNumber(); - memcpy(mixDataAt, &sequence, sizeof(quint16)); - mixDataAt += sizeof(quint16); + mixPacketPayload.write(&sequence, sizeof(quint16)); // pack mixed audio samples - memcpy(mixDataAt, _mixSamples, AudioConstants::NETWORK_FRAME_BYTES_STEREO); - mixDataAt += AudioConstants::NETWORK_FRAME_BYTES_STEREO; + mixPacketPayload.write(mixSamples, AudioConstants::NETWORK_FRAME_BYTES_STEREO); } else { - // pack header - int numBytesPacketHeader = nodeList->populatePacketHeader(clientMixBuffer, PacketTypeSilentAudioFrame); - mixDataAt = clientMixBuffer + numBytesPacketHeader; + int silentPacketBytes = sizeof(quint16) + sizeof(quint16); + mixPacket = NodeListPacket::create(PacketType::SilentAudioFrame); // pack sequence number quint16 sequence = nodeData->getOutgoingSequenceNumber(); - memcpy(mixDataAt, &sequence, sizeof(quint16)); - mixDataAt += sizeof(quint16); + mixPacketPayload.write(&sequence, sizeof(quint16)); // pack number of silent audio samples quint16 numSilentSamples = AudioConstants::NETWORK_FRAME_SAMPLES_STEREO; - memcpy(mixDataAt, &numSilentSamples, sizeof(quint16)); - mixDataAt += sizeof(quint16); + mixPacketPayload.write(&numSilentSamples, sizeof(quint16)); } // Send audio environment sendAudioEnvironmentPacket(node); // send mixed audio packet - nodeList->writeDatagram(clientMixBuffer, mixDataAt - clientMixBuffer, node); + nodeList->sendPacket(mixPacket, node); nodeData->incrementOutgoingMixedAudioSequenceNumber(); // send an audio stream stats packet if it's time