#pragma once #include #include #include "RtAudio.h" #include "fountain.h" class Visualizer { public: Visualizer(); ~Visualizer(); int main_loop(); void poke(); /* audio instance vars */ /* these are public so that the audio callback can access them */ fftw_plan _fft_plan; double* _audio_buffer_1; double* _audio_buffer_2; double* _raw_fft; double* _spectrum_buffer_1; double* _spectrum_buffer_2; private: static int audio_callback(void *outputBuffer, void *inputBuffer, unsigned int nBufferFrames, double streamTime, RtAudioStreamStatus status, void* user_data); void init_gl(); int init_sdl(); void render(double tick_time); void update(double tick_time); void reshapeFunc(const SDL_ResizeEvent & resize_e); int keyboard_event(const SDL_KeyboardEvent & keyboard_e); void do_gl_projection(); void clean_up(); void draw_circle_spectrum(); void draw_phase_loop(); void draw_spectrum(); Fountain* _fountain; /* audio instance vars */ RtAudio* _dac; unsigned int _buffer_size; /* graphics instance vars */ int _window_width; int _window_height; };