This is the definitive code:
/**
* Genera un tono puro.
* @param bufferSize Tamaño del buffer.
* @param fs Frecuencia de muestreo.
* @param f0 Frecuencia central.
* @return El tono puro.
*/
public static double[] generateTone(int bufferSize, int fs, double f0) {
double[] tone = new double[bufferSize]; // Tono
double angle; // Ángulo del tono
for (int i = 0; i < tone.length; i++) {
angle = 2 * Math.PI * f0 * i / fs; // Calculamos la variación del ángulo
tone[i] = Math.sin(angle); // Cada muestra se obtiene a partir del seno del ángulo
}
return tone;
} // generateTone()
A main() to test it:
public static void main(String[] args) {
double[] x; // Señal de entrada (en nuestro caso es un tono puro a 250 Hz)
int bufferSize = 1024;
int fs = 44100;
double f0 = ((float) fs / (float) bufferSize);
System.out.println("f0 = " + f0);
x = GSignals.generateTone(bufferSize, fs, f0); // Generamos la señal de entrada
} // main()