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;
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<NodeListPacket> 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