12 #ifndef hifi_AudioMixerSlave_h
13 #define hifi_AudioMixerSlave_h
15 #if !defined(Q_MOC_RUN)
17 #include <tbb/concurrent_vector.h>
21 #include <AudioHRTF.h>
22 #include <AudioRingBuffer.h>
23 #include <ThreadedAssignment.h>
24 #include <UUIDHasher.h>
26 #include <PositionalAudioStream.h>
28 #include "AudioMixerClientData.h"
29 #include "AudioMixerStats.h"
31 class AvatarAudioStream;
34 class AudioMixerSlave {
36 using ConstIter = NodeList::const_iterator;
39 AudioMixerClientData::ConcurrentAddedStreams addedStreams;
40 std::vector<Node::LocalID> removedNodes;
41 std::vector<NodeIDStreamID> removedStreams;
44 AudioMixerSlave(SharedData& sharedData) : _sharedData(sharedData) {};
47 void processPackets(
const SharedNodePointer& node);
50 void configureMix(ConstIter begin, ConstIter end,
unsigned int frame,
int numToRetain);
54 void mix(
const SharedNodePointer& node);
56 AudioMixerStats stats;
60 bool prepareMix(
const SharedNodePointer& listener);
61 void addStream(AudioMixerClientData::MixableStream& mixableStream,
62 AvatarAudioStream& listeningNodeStream,
63 float masterAvatarGain,
64 float masterInjectorGain,
66 void updateHRTFParameters(AudioMixerClientData::MixableStream& mixableStream,
67 AvatarAudioStream& listeningNodeStream,
68 float masterAvatarGain,
69 float masterInjectorGain);
70 void resetHRTFState(AudioMixerClientData::MixableStream& mixableStream);
72 void addStreams(Node& listener, AudioMixerClientData& listenerData);
75 float _mixSamples[AudioConstants::NETWORK_FRAME_SAMPLES_STEREO];
76 int16_t _bufferSamples[AudioConstants::NETWORK_FRAME_SAMPLES_STEREO];
81 unsigned int _frame { 0 };
82 int _numToRetain { -1 };
84 SharedData& _sharedData;