/****************************************************************************** * Program to print the frequences in the Chromatic Scale. * * Copyright © 2017 Richard Lesh. All rights reserved. *****************************************************************************/ import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.pureprogrammer.Utils; public class ChromaticScale { static final double A0_FREQUENCY = 27.5; static List CHROMATIC_SCALE = Utils.listFromStrings(new String[]{"A", "A#", "B", "C", "C#", "D", "D#", "E", "F", "F#", "G", "G#"}); static final String OUTPUT_FMT = "{0:s}{1:d} = {2:.4f} Hz"; public static void main(String[] args) { int octave = 4; if (args.length == 1) { octave = Utils.stoiWithDefault(args[0], 0); } final double HALF_STEP = Math.pow(2.0, 1.0 / 12.0); double frequency = A0_FREQUENCY; if (octave > 0) { frequency *= Math.pow(2.0, octave); } for (int i = 0; i < 12; ++i) { if (CHROMATIC_SCALE.get(i).equals("C") ) { ++octave; } System.out.println(Utils.format(OUTPUT_FMT, CHROMATIC_SCALE.get(i), octave, frequency)); frequency *= HALF_STEP; } System.out.println(Utils.format(OUTPUT_FMT, CHROMATIC_SCALE.get(0), octave, frequency)); } }