00001 00027 #ifndef ASYNC_AUDIO_CLIPPER_INCLUDED 00028 #define ASYNC_AUDIO_CLIPPER_INCLUDED 00029 00030 00031 /**************************************************************************** 00032 * 00033 * System Includes 00034 * 00035 ****************************************************************************/ 00036 00037 00038 00039 /**************************************************************************** 00040 * 00041 * Project Includes 00042 * 00043 ****************************************************************************/ 00044 00045 #include <AsyncAudioProcessor.h> 00046 00047 00048 00049 /**************************************************************************** 00050 * 00051 * Local Includes 00052 * 00053 ****************************************************************************/ 00054 00055 00056 00057 /**************************************************************************** 00058 * 00059 * Forward declarations 00060 * 00061 ****************************************************************************/ 00062 00063 00064 00065 /**************************************************************************** 00066 * 00067 * Namespace 00068 * 00069 ****************************************************************************/ 00070 00071 namespace Async 00072 { 00073 00074 00075 /**************************************************************************** 00076 * 00077 * Forward declarations of classes inside of the declared namespace 00078 * 00079 ****************************************************************************/ 00080 00081 00082 00083 /**************************************************************************** 00084 * 00085 * Defines & typedefs 00086 * 00087 ****************************************************************************/ 00088 00089 00090 00091 /**************************************************************************** 00092 * 00093 * Exported Global Variables 00094 * 00095 ****************************************************************************/ 00096 00097 00098 00099 /**************************************************************************** 00100 * 00101 * Class definitions 00102 * 00103 ****************************************************************************/ 00104 00113 class AudioClipper : public AudioProcessor 00114 { 00115 public: 00120 explicit AudioClipper(float clip_level=1.0) : clip_level(clip_level) {} 00121 00125 ~AudioClipper(void) {} 00126 00131 void setClipLevel(float level) { clip_level = level; } 00132 00133 00134 protected: 00135 virtual void processSamples(float *dest, const float *src, int count) 00136 { 00137 for (int i=0; i<count; ++i) 00138 { 00139 if (src[i] > clip_level) 00140 { 00141 dest[i] = clip_level; 00142 } 00143 else if (src[i] < -clip_level) 00144 { 00145 dest[i] = -clip_level; 00146 } 00147 else 00148 { 00149 dest[i] = src[i]; 00150 } 00151 } 00152 } 00153 00154 00155 private: 00156 float clip_level; 00157 00158 AudioClipper(const AudioClipper&); 00159 AudioClipper& operator=(const AudioClipper&); 00160 00161 }; /* class AudioClipper */ 00162 00163 00164 } /* namespace */ 00165 00166 #endif /* ASYNC_AUDIO_CLIPPER_INCLUDED */ 00167 00168 00169 00170 /* 00171 * This file has not been truncated 00172 */ 00173