/**
* Clase que genera una base de datos con las frecuencias de todas las notas
* musicales dentro de un rango de octavas.
* Alguna frecuencias son:
*
*
* Nota | octava1 | octava2 | octava3 |
* C / Do | 130.813 | 261.626 | 523.251 |
* C# / Do# | 138.591 | 277.183 | 554.365 |
* D / Re | 146.832 | 293.665 | 587.330 |
* D# / Re# | 155.563 | 311.127 | 622.254 |
* E / Mi | 164.814 | 329.628 | 659.255 |
* F / Fa | 174.614 | 349.228 | 698.456 |
* F# / Fa# | 184.997 | 369.994 | 739.989 |
* G / Sol | 195.998 | 391.995 | 783.991 |
* G# / Sol# | 207.652 | 415.305 | 830.609 |
* A / La | 220.000 | 440.000 | 880.000 |
* A# / La# | 233.082 | 466.164 | 932.328 |
* B / Si | 246.942 | 493.883 | 997.767 |
*
* @author Daniel Acevedo, Francisco Barros.
* @version v1.0
*/
public class Notas
{
float[][] Frec;
String[] nombres = {"C","C#","D","D#","E","F","F#","G","G#","A","A#","B"};
int nNumOctavas = 5;
float factor = 1.0594630943592952645618252949461F;
private boolean DEBUG = false;
/**
* Constructor de la clase Notas. Crea una matriz con 12 columnas
* correspondiente a cada una de las 12 notas musicales. y el numero de
* filas es según la variable nNumOctavas.
*/
public Notas() // constructor
{
if(DEBUG) System.out.println("Nota.creando: comenzando");
Frec = new float[nNumOctavas][12];
afinar(0);
if(DEBUG) System.out.println("Nota.creando: finalizado");
}
/**
* Metodo que llena la matriz con la frecuencia de cada nota. El llenado de
* las notas es primero en la primera octava. Partiendo por el La = 110 Hz +
* delta. se van obteniendo las otras nota multiplicando o dividiendo por
* factor segun corresponda. multiplicando se obtiene una nota mas aguda y
* dividiendo por factor se obtiene una mas grave.
* @param delta Parámetro que ajusta cuantos Hz se desviara (hacia arriba
* o abajo) respecto del LA de 110 Hz.
*/
public void afinar(int delta)
{
if(DEBUG)System.out.println("Nota.afinar: comenzando");
Frec[0][9] = 110.000F + (float)(delta / 4);
if(DEBUG) System.out.println("Nota.Frec[0][9]: " + Frec[0][9]);
// llenado primera octava
for(int j=8;j>=0;j--)
{
Frec[0][j] = Frec[0][j+1] / factor;
if(DEBUG)
{
System.out.println("Nota.Frec[0]["+(j+1)+"]: " + Frec[0][j+1]);
System.out.println("divisor: " + factor );
System.out.println("Resultado: " + (Frec[0][j+1] / (float)Math.pow(2,(float)(1/12))) );
}
}
for(int j=10;j<12;j++)
Frec[0][j] = Frec[0][j-1] * factor; // hacia arriba: A# y B
// para el resto de las octavas
for(int i=1;inNumOctavas-1)
octSup=nNumOctavas-1;
for(i=octInf; i<=octSup; i++)
{
for(j=0;j<12;j++)
System.out.printf(nombres[j]+ i + " = " + Frec[i][j] + ", ");
System.out.printf("\n");
}
if(DEBUG) System.out.println("Nota.imprime: finalizado");
}
}