class Sine { private float freq, newFreq; private float amp; private float stepSize; private float step; Sine(float f, float a, float s) { freq = f; newFreq = freq; amp = a; stepSize = 1/s; step = 0; } void setFreq(float f) { newFreq = f; } boolean generate(AudioOutput ao) { float[] buff = new float[ao.buffer.length]; boolean alert = generate(buff); arraycopy(buff, 0, ao.buffer2, ao.buffer.length, buff.length); arraycopy(buff, 0, ao.buffer, 0, buff.length); return alert; } boolean generate(float[] buff) { boolean alert = freq != newFreq; for ( int i = 0; i < buff.length; i++ ) { buff[i] = amp*sin(freq*TWO_PI*step); if ( abs(freq-newFreq) < 0.1f ) freq = newFreq; else if ( freq < newFreq ) freq += 0.1f; else if ( freq > newFreq ) freq -= 0.1f; step += stepSize; if ( step > 1/freq ) step %= 1/freq; } return alert; } }