12 #ifndef hifi_AudioMixerWorker_h
13 #define hifi_AudioMixerWorker_h
16 #include <AudioHRTF.h>
17 #include <AudioRingBuffer.h>
18 #include <ThreadedAssignment.h>
19 #include <UUIDHasher.h>
21 #include <PositionalAudioStream.h>
22 #include <TBBHelpers.h>
24 #include "AudioMixerClientData.h"
25 #include "AudioMixerStats.h"
27 class AvatarAudioStream;
30 class AudioMixerWorker {
32 using ConstIter = NodeList::const_iterator;
35 AudioMixerClientData::ConcurrentAddedStreams addedStreams;
36 std::vector<Node::LocalID> removedNodes;
37 std::vector<NodeIDStreamID> removedStreams;
40 AudioMixerWorker(SharedData& sharedData) : _sharedData(sharedData) {};
43 void processPackets(
const SharedNodePointer& node);
46 void configureMix(ConstIter begin, ConstIter end,
unsigned int frame,
int numToRetain);
50 void mix(
const SharedNodePointer& node);
52 AudioMixerStats stats;
56 bool prepareMix(
const SharedNodePointer& listener);
57 void addStream(AudioMixerClientData::MixableStream& mixableStream,
58 AvatarAudioStream& listeningNodeStream,
59 float primaryAvatarGain,
60 float primaryInjectorGain,
62 void updateHRTFParameters(AudioMixerClientData::MixableStream& mixableStream,
63 AvatarAudioStream& listeningNodeStream,
64 float primaryAvatarGain,
65 float primaryInjectorGain);
66 void resetHRTFState(AudioMixerClientData::MixableStream& mixableStream);
68 void addStreams(Node& listener, AudioMixerClientData& listenerData);
71 float _mixSamples[AudioConstants::NETWORK_FRAME_SAMPLES_STEREO];
72 int16_t _bufferSamples[AudioConstants::NETWORK_FRAME_SAMPLES_STEREO];
77 unsigned int _frame { 0 };
78 int _numToRetain { -1 };
80 SharedData& _sharedData;