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);
00033 virtual const AudioSample* sample(unsigned int handle) const;
00034
00036
00042 virtual unsigned int soundPlay(unsigned int sample, float volumeL=1.0f, float volumeR=1.0f, float disparity=0.0f, float pitch=1.0f );
00050 virtual unsigned int soundLoop(unsigned int sample, float volumeL=1.0f, float volumeR=1.0f, float disparity=0.0f, float pitch=1.0f );
00052
00058 virtual bool soundUpdate(unsigned int sound, float volumeL, float volumeR, float disparity=0.0f, float pitch=1.0f );
00060 virtual bool soundStop(unsigned int sound);
00062 virtual void soundStop();
00064 virtual unsigned soundActive() const;
00065 protected:
00067 DeviceAudioRt(unsigned int nTracks, unsigned int frequency, unsigned int chunkSize);
00069 virtual ~DeviceAudioRt();
00071 int mixOutputFloat(signed short *outputBuffer, unsigned int nFrames);
00072
00074 std::map<unsigned int, AudioSample*> mm_sample;
00076 unsigned int m_sampleCounter;
00077
00079 _AudioTrack * ma_sound;
00081 unsigned int m_nSound;
00083 RtAudio m_dac;
00084
00086 static int cbMix(void *outputBuffer, void *inputBuffer, unsigned int nFrames, double streamTime, RtAudioStreamStatus status, void *data) {
00087 return static_cast<DeviceAudioRt*>(data)->mixOutputFloat((signed short*)outputBuffer, nFrames); }
00088 };