#pragma once #include #include "RtAudio.h" #include #include #include "audioloop.h" class Listener { public: Listener(); ~Listener(); int main_loop(); /* audio instance vars */ /* these are public so that the audio callback can access them */ double* _audio_buffer; AudioLoop* _cur_audio_loop; vector _audio_loops; 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 mouse_down_event(const SDL_MouseButtonEvent & button_e); void mouse_up_event(const SDL_MouseButtonEvent & button_e); void mouse_motion_event(const SDL_MouseMotionEvent & motion_e); void do_gl_projection(); void clean_up(); void draw_phase_loop(); /* audio instance vars */ RtAudio* _dac; unsigned int _buffer_size; /* graphics instance vars */ int _window_width; int _window_height; AudioLoop* _selected_loop; bool _is_mouse_pressed; pthread_t _osc_thread; };