00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __JackResampler__
00021 #define __JackResampler__
00022
00023 #include "ringbuffer.h"
00024 #include "JackError.h"
00025
00026 namespace Jack
00027 {
00028
00029 #define DEFAULT_RB_SIZE 32768
00030 #define DEFAULT_ADAPTATIVE_SIZE 2048
00031
00032 inline float Range(float min, float max, float val)
00033 {
00034 return (val < min) ? min : ((val > max) ? max : val);
00035 }
00036
00041 class JackResampler
00042 {
00043
00044 protected:
00045
00046 jack_ringbuffer_t* fRingBuffer;
00047 double fRatio;
00048 unsigned int fRingBufferSize;
00049
00050 public:
00051
00052 JackResampler();
00053 virtual ~JackResampler();
00054
00055 virtual void Reset(unsigned int new_size);
00056
00057 virtual unsigned int ReadResample(float* buffer, unsigned int frames);
00058 virtual unsigned int WriteResample(float* buffer, unsigned int frames);
00059
00060 virtual unsigned int Read(float* buffer, unsigned int frames);
00061 virtual unsigned int Write(float* buffer, unsigned int frames);
00062
00063 virtual unsigned int ReadSpace();
00064 virtual unsigned int WriteSpace();
00065
00066 unsigned int GetError()
00067 {
00068 return (jack_ringbuffer_read_space(fRingBuffer) / sizeof(float)) - (fRingBufferSize / 2);
00069 }
00070
00071 void SetRatio(double ratio)
00072 {
00073 fRatio = Range(0.25, 4.0, ratio);
00074 }
00075
00076 double GetRatio()
00077 {
00078 return fRatio;
00079 }
00080
00081 };
00082 }
00083
00084 #endif