use new packet creation for client audio

This commit is contained in:
Stephen Birarda 2015-07-06 16:49:48 -07:00
parent 5a57e9861c
commit 672c5a8414

View file

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