#include "audioloop.h" #ifdef __APPLE__ #include #else #include #endif #include "cstdlib" using namespace std; AudioLoop::AudioLoop() : _cur_sample(0) , volume(1) { x = 1.5 * (double(rand())/RAND_MAX - .5); y = 1.5 * (double(rand())/RAND_MAX - .5); } void AudioLoop::add_samples(const double* samples, unsigned long n_samples) { for (unsigned int i = 0; i < n_samples; i++) { _audio_vector.push_back(samples[i]); } } double AudioLoop::get_sample() { if (_audio_vector.size() < 10) { return 0; } if (_cur_sample >= _audio_vector.size()) { _cur_sample = 0; } return _audio_vector[_cur_sample++] * volume; } void AudioLoop::clear() { _audio_vector.clear(); } void AudioLoop::render() { glEnable(GL_POINT_SMOOTH); glHint(GL_POINT_SMOOTH_HINT, GL_NICEST); glPointSize(3); glLineWidth(2); double size_mult = volume; glBegin( GL_LINE_STRIP ); { unsigned long x_sample_pos = _cur_sample; unsigned long y_sample_pos = _cur_sample + 256; for( unsigned int i = 0; i < 512; i++ ) { if (x_sample_pos >= _audio_vector.size()) { x_sample_pos = 0; } if (y_sample_pos >= _audio_vector.size()) { y_sample_pos = 0; } glVertex2f( size_mult * _audio_vector[x_sample_pos] + x, size_mult * _audio_vector[y_sample_pos] + y); x_sample_pos++; y_sample_pos++; } } glEnd(); }