00001
00024 #ifndef GROUPSOURCE_H_INCLUDED_C427B440
00025 #define GROUPSOURCE_H_INCLUDED_C427B440
00026
00027 #include "openalpp/source.h"
00028 #include "openalpp/audioconvert.h"
00029 #include <vector>
00030 #include <math.h>
00031 #include <stdlib.h>
00032 #include "openalpp/export.h"
00033 #include "openalpp/ref_ptr.h"
00034 namespace openalpp {
00035
00042 class OPENALPP_API GroupSource : public SourceBase {
00046 bool mixed_;
00047
00051 std::vector<openalpp::ref_ptr<Source> > sources_;
00052
00056 ALuint buffer_;
00057
00058 typedef enum Speaker {Left,Right};
00059
00065 ALfloat filterDistance(ALuint source,Speaker speaker);
00066
00075 ALshort *filterReverb(Source *source,ALshort *buffer,
00076 ALsizei &size,unsigned int frequency);
00077
00086 ALshort *applyFilters(Source *source,ALshort *buffer,ALsizei &size,
00087 unsigned int frequency);
00088 public:
00096 GroupSource(float x = 0.0, float y = 0.0, float z = 0.0) throw (NameError);
00097
00102 void play() throw (InitError,FileError);
00103
00112 void mixSources(unsigned int frequency=22050)
00113 throw (InitError,FileError,FatalError,MemoryError,ValueError);
00114
00122 ALuint includeSource(Source *source) throw (ValueError);
00123
00129 void excludeSource(const Source &source) throw (NameError);
00130
00136 void excludeSource(ALuint source) throw (NameError);
00137
00141 GroupSource(const GroupSource &groupsource);
00142
00143
00147 GroupSource &operator=(const GroupSource &groupsource);
00148
00149 protected:
00153 virtual ~GroupSource();
00154
00155 };
00156
00157 }
00158
00159 #endif