Implement AudioSubmix

This commit is contained in:
Jack Andersen
2016-05-06 18:28:32 -10:00
parent 4ecea8ac3f
commit 4b969fd475
12 changed files with 396 additions and 43 deletions

View File

@@ -3,6 +3,8 @@
#include "boo/audiodev/IAudioVoiceEngine.hpp"
#include "AudioVoice.hpp"
#include "AudioSubmix.hpp"
#include "IAudioHost.hpp"
namespace boo
{
@@ -19,17 +21,22 @@ struct AudioVoiceEngineMixInfo
};
/** Base class for managing mixing and sample-rate-conversion amongst active voices */
class BaseAudioVoiceEngine : public IAudioVoiceEngine
class BaseAudioVoiceEngine : public IAudioVoiceEngine, public IAudioHost
{
protected:
friend class AudioVoice;
friend class AudioSubmix;
AudioVoiceEngineMixInfo m_mixInfo;
std::list<AudioVoice*> m_activeVoices;
std::list<AudioSubmix*> m_activeSubmixes;
void _pumpAndMixVoices(size_t frames, int16_t* dataOut);
void _pumpAndMixVoices(size_t frames, int32_t* dataOut);
void _pumpAndMixVoices(size_t frames, float* dataOut);
void _unbindFrom(std::list<AudioVoice*>::iterator it);
void _unbindFrom(std::list<AudioSubmix*>::iterator it);
public:
std::unique_ptr<IAudioVoice> allocateNewMonoVoice(double sampleRate,
IAudioVoiceCallback* cb,
@@ -39,7 +46,9 @@ public:
IAudioVoiceCallback* cb,
bool dynamicPitch=false);
const AudioVoiceEngineMixInfo& mixInfo() const {return m_mixInfo;}
std::unique_ptr<IAudioSubmix> allocateNewSubmix(IAudioSubmixCallback* cb);
const AudioVoiceEngineMixInfo& mixInfo() const;
AudioChannelSet getAvailableSet() {return m_mixInfo.m_channels;}
void pumpAndMixVoices() {}
};