00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include <fftw3.h>
00019 #include <pthread.h>
00020 #include <string>
00021
00022 class JackClient;
00023
00024 #ifndef AUDIO_COLLECTOR
00025 #define AUDIO_COLLECTOR
00026
00027 static const int NUM_BARS = 16;
00028
00029 class FFT {
00030 public:
00031 FFT(int length);
00032 ~FFT();
00033 void Impulse2Freq(float *imp, float *out);
00034 private:
00035 #ifndef __FFTWFLOAT__
00036 fftw_plan m_Plan;
00037 unsigned int m_FFTLength;
00038 double *m_In;
00039 fftw_complex *m_Spectrum;
00040 #else
00041 fftwf_plan m_Plan;
00042 unsigned int m_FFTLength;
00043 float *m_In;
00044 fftwf_complex *m_Spectrum;
00045 #endif
00046 };
00047
00048 class AudioCollector {
00049 public:
00050 AudioCollector(char *port, int BufferLength, unsigned int Samplerate, int FFTBuffers = 1);
00051 ~AudioCollector();
00052
00053 float *GetFFT();
00054 float *GetAudioBuffer() { return m_AudioBuffer; }
00055 float GetHarmonic(int h);
00056 bool IsConnected();
00057 void SetGain(float s) { m_Gain=s; }
00058 void SetSmoothingBias(float s) { if (s<2 && s>0) m_SmoothingBias=s; }
00059
00060 bool IsProcessing() { return m_Processing; }
00061 float BufferTime() { return m_BufferTime; }
00062
00063 void get_audio(void *buffer);
00064
00065 int samplerate;
00066 int buffersize;
00067 bool attached;
00068
00069 JackClient *Jack;
00070
00071 private:
00072
00073 void AudioCallback_i(unsigned int);
00074 static void AudioCallback(void *, unsigned int);
00075
00076 float m_Gain;
00077 float m_SmoothingBias;
00078 float m_BufferTime;
00079 FFT m_FFT;
00080 pthread_mutex_t* m_Mutex;
00081 float *m_Buffer;
00082 float *m_AudioBuffer;
00083 float *m_FFTBuffer;
00084 float *m_FFTOutput;
00085 int m_FFTBuffers;
00086 int m_InputPort;
00087
00088 float *m_JackBuffer;
00089
00090 int m_Dspfd;
00091 short *m_OSSBuffer;
00092 float m_OneOverSHRT_MAX;
00093 bool m_Processing;
00094 float *m_ProcessBuffer;
00095 unsigned int m_ProcessPos;
00096 unsigned int m_ProcessLength;
00097
00098 };
00099
00100 #endif