我正在尝试开发一个Java静态方法来生成纯音。一开始看起来很简单,但是当我尝试将双精度数组写入扬声器时,我发现谐波太多了。我用频谱分析仪(声强计)进行测试,然后也在图形上绘制了结果数组。当我这样做时,我发现了问题:它与波形有关,它是突兀的。我想平滑这个数组,但是我不知道该如何做。以下是代码:
/**
* 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, int f0) {
double[] tone = new double[bufferSize]; // Tono
double angle; // Ángulo del tono
// Sólo hace falta recorrer la mitad del array, ya que hay simetría:
for (int i = 0; i < tone.length / 2; i++) {
angle = 2 * Math.PI * f0 * i / fs; // Calculamos la variación del ángulo
// Tenemos que conseguir que la señal sea menos abrupta para reducir al máximo los armónicos):
tone[2 * i + 1] = tone[2 * i] = Math.sin(angle); // Aprovechamos la simetría
}
return tone;
} // getSinus()