/** * 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 octava1octava2octava3
C / Do 130.813261.626523.251
C# / Do# 138.591277.183554.365
D / Re 146.832293.665587.330
D# / Re# 155.563311.127622.254
E / Mi 164.814329.628659.255
F / Fa 174.614349.228698.456
F# / Fa# 184.997369.994739.989
G / Sol 195.998391.995783.991
G# / Sol#207.652415.305830.609
A / La 220.000440.000880.000
A# / La# 233.082466.164932.328
B / Si 246.942493.883997.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"); } }