Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**Prints the frequencies in Hz of all the notes in the western scale,
- * in the range of human hearing. */
- public class NoteFreqPrinter
- {
- public static void main(String[] args)
- {
- String[] noteNames = {"A", "A#", "B", "C", "C#", "D", "D#", "E", "F", "F#", "G", "G#"};
- //the ratio between adjacent notes in equal temperament:
- //these values are interchangeable
- double ratio = Math.pow(2, 1.0/12.0);//calculated by java, or
- double wikiRatio = 1.059463094359295264561825;//borrowed from wikipedia's page on equal temperament
- int numFreqs = 24;//how many notes to print. Recalculated later
- int octave = 55;//the frequency (note) to start at. 55Hz is A1.
- //human hearing is between 20Hz and 20KHz;
- //calculate how many notes we'll need, to determine size of array
- while(octave < 20000)
- {
- octave *= 2;
- numFreqs += 12;
- }
- numFreqs -= 5;//cheap fix to discard inaudible notes in last octave
- double[] freqs = new double[numFreqs];
- //these values are very close, but might differ slightly due to precision
- System.out.println("derived ratio value : "+ratio);
- System.out.println("wikipedia ratio value: "+wikiRatio);
- freqs[0] = 13.75; // the first and lowest note: A-1
- System.out.print(noteNames[0]+": ");
- System.out.print(freqs[0]+"\n");
- for(int i = 1; i < freqs.length; i++)
- {
- freqs[i] = freqs[i-1] * ratio;
- if(((i % 12) == 0)//if note should have an integral frequency
- && (i > 12))// (octaves of A),
- {// cast it to an int to discard precision loss
- freqs[i] = Math.round(freqs[i]);
- }
- System.out.print(noteNames[i%12]+": ");
- System.out.print(freqs[i]+"\n");
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement