00001 /* 00002 * DistanceSimulator.h 00003 * CSL 00004 * 00005 * Created by Bebelutz on 6/21/06. 00006 * Copyright 2006 JorgeCastellanos. All rights reserved. 00007 * 00008 */ 00009 00010 #ifndef DISTANCE_SIMULATOR_H 00011 #define DISTANCE_SIMULATOR_H 00012 #include "SpatialSource.h" 00013 00014 #include "CSL_Core.h" 00015 #include "CPoint.h" 00016 00017 namespace csl { 00018 00019 class IntensityAttenuationCue; 00020 class AirAbsorptionCue; 00021 00026 class DistanceSimulator : public SpatSource { 00027 public: 00028 DistanceSimulator(UnitGenerator &source); // A UGen without position information. In this case, the distance simulator is the spatial source. 00029 DistanceSimulator(SpatSource &source); 00030 ~DistanceSimulator(); 00031 00032 virtual void nextBuffer(Buffer & outputBuffer, unsigned outBufNum) throw (CException); 00033 00034 protected: 00035 // SoundSource ... it refers to its input UGen, but with the knowledge of its position within a space. 00036 // SpatSource *mSource; // list of spatial inputs 00037 IntensityAttenuationCue *mIntensityCue; 00038 AirAbsorptionCue *mAirAbsorptionCue; 00039 00040 }; 00041 00046 class DistanceCue { 00047 public: 00048 DistanceCue() {}; 00049 virtual ~DistanceCue() {}; 00050 00051 virtual void compute(float distance) = 0; 00052 virtual void process(Buffer &inputBuffer) = 0; 00053 00054 }; 00055 00058 class IntensityAttenuationCue : public DistanceCue { 00059 public: 00060 IntensityAttenuationCue() {}; 00061 virtual ~IntensityAttenuationCue() {}; 00062 00063 virtual void compute(float distance); 00064 virtual void process(Buffer &aBuffer); 00065 00066 protected: 00067 float mGain; 00068 00069 }; 00070 00072 class AirAbsorptionCue : public DistanceCue { 00073 public: 00074 AirAbsorptionCue(); 00075 virtual ~AirAbsorptionCue(); 00076 00077 virtual void compute(float distance); 00078 virtual void process(Buffer &aBuffer); 00079 00080 protected: 00081 float mBCoeff; 00082 float mACoeff[2]; 00083 float mPrevOutput; 00084 float mPrevInput; 00085 00086 }; 00087 00088 //class AirAbsorptionCue : public DistanceCue { 00089 //public: 00090 // AirAbsorptionCue(); 00091 // virtual ~AirAbsorptionCue(); 00092 // 00093 // virtual void compute(float distance); 00094 // virtual void process(Buffer &aBuffer); 00095 // 00096 //protected: 00097 // float mBCoeff[3]; 00098 // float mACoeff[3]; 00099 // float mPrevOutputs[3]; 00100 // float mPrevInputs[3]; 00101 // 00102 //}; 00103 00104 00105 } 00106 00107 #endif
1.4.5-20051010