00001 #include "proAudio.h"
00002 #include <RtAudio.h>
00003 #include <map>
00004
00011 struct _AudioTrack;
00012
00014
00016 class DeviceAudioRt : public DeviceAudio {
00017 public:
00019
00026 static DeviceAudio* create(unsigned int nTracks=8, unsigned int frequency=22050, unsigned int chunkSize=1024);
00027
00029 virtual unsigned int sampleFromMemory(const AudioSample & sample, float volume=1.0f);
00031 virtual bool sampleDestroy(unsigned int sample);
00032
00034
00040 virtual unsigned int soundPlay(unsigned int sample, float volumeL=1.0f, float volumeR=1.0f, float disparity=0.0f, float pitch=1.0f );
00048 virtual unsigned int soundLoop(unsigned int sample, float volumeL=1.0f, float volumeR=1.0f, float disparity=0.0f, float pitch=1.0f );
00050
00056 virtual bool soundUpdate(unsigned int sound, float volumeL, float volumeR, float disparity=0.0f, float pitch=1.0f );
00058 virtual bool soundStop(unsigned int sound);
00060 virtual void soundStop();
00062 virtual unsigned soundActive() const;
00063 protected:
00065 DeviceAudioRt(unsigned int nTracks, unsigned int frequency, unsigned int chunkSize);
00067 virtual ~DeviceAudioRt();
00069 int mixOutputFloat(signed short *outputBuffer, unsigned int nFrames);
00070
00072 std::map<unsigned int, AudioSample*> mm_sample;
00074 unsigned int m_sampleCounter;
00075
00077 _AudioTrack * ma_sound;
00079 unsigned int m_nSound;
00081 RtAudio m_dac;
00082
00084 static int cbMix(void *outputBuffer, void *inputBuffer, unsigned int nFrames, double streamTime, RtAudioStreamStatus status, void *data) {
00085 return static_cast<DeviceAudioRt*>(data)->mixOutputFloat((signed short*)outputBuffer, nFrames); }
00086 };