NoteFrequencyCalculator.java (814B)
1 package com.github.cythara.tuning; 2 3 import com.github.cythara.Note; 4 5 import java.util.Arrays; 6 import java.util.List; 7 8 public class NoteFrequencyCalculator { 9 10 private static List<String> notes = 11 Arrays.asList("C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B"); 12 private float referenceFrequency; 13 14 public NoteFrequencyCalculator(float referenceFrequency) { 15 this.referenceFrequency = referenceFrequency; 16 } 17 18 public double getFrequency(Note note) { 19 int semitonesPerOctave = 12; 20 int referenceOctave = 4; 21 double distance = semitonesPerOctave * (note.getOctave() - referenceOctave); 22 23 distance += notes.indexOf(note.getName() + note.getSign()) - notes.indexOf("A"); 24 25 return referenceFrequency * Math.pow(2, distance / 12); 26 } 27 }