package vafusion.recog;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
public class Character implements Unit {
public static final int NUM_CHARACTERS = 20;
private static HashMap<java.lang.Character, Character> charmap = null;
private Rhythm rhythm;
private Character(Rhythm r) {
rhythm = r;
}
public static enum Rhythm implements Type {
NONE,
SIXTEENTH,
DOTTED_SIXTEENTH,
EIGTH,
DOTTED_EIGTH,
QUARTER,
DOTTED_QUARTER,
HALF,
DOTTED_HALF,
WHOLE,
DOTTED_WHOLE,
WHOLE_REST,
DOTTED_WHOLE_REST,
HALF_REST,
DOTTED_HALF_REST,
QUARTER_REST,
DOTTED_QUARTER_REST,
EIGTH_REST,
DOTTED_EIGTH_REST,
SIXTEENTH_REST,
DOTTED_SIXTEENTH_REST
}
public static List<String> getCharacters() {
String[] chars = {"N", "0", "7", "1", "2", "3", "4", "5", "6", "8", "9", "Q", "W", "E", "R", "S", "D", "Z", "X", "C", "H"};
return Arrays.asList(chars);
}
public static Character mapCharacter(java.lang.Character c) {
if(charmap == null) {
charmap = new HashMap<java.lang.Character, Character>();
String[] chars = {"N", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "Q", "W", "E", "R", "S", "D", "Z", "X", "C", "H"};
Character[] notes = {
new Character(Rhythm.NONE),
new Character(Rhythm.DOTTED_SIXTEENTH),
new Character(Rhythm.DOTTED_HALF),
new Character(Rhythm.HALF_REST),
new Character(Rhythm.DOTTED_HALF_REST),
new Character(Rhythm.QUARTER_REST),
new Character(Rhythm.DOTTED_QUARTER_REST),
new Character(Rhythm.SIXTEENTH_REST),
new Character(Rhythm.DOTTED_EIGTH),
new Character(Rhythm.EIGTH_REST),
new Character(Rhythm.DOTTED_EIGTH_REST),
new Character(Rhythm.QUARTER),
new Character(Rhythm.WHOLE),
new Character(Rhythm.EIGTH),
new Character(Rhythm.DOTTED_SIXTEENTH_REST),
new Character(Rhythm.SIXTEENTH),
new Character(Rhythm.DOTTED_QUARTER),
new Character(Rhythm.DOTTED_WHOLE),
new Character(Rhythm.WHOLE_REST),
new Character(Rhythm.DOTTED_WHOLE_REST),
new Character(Rhythm.HALF)
};
for(int i = 0; i < chars.length; i++)
charmap.put(chars[i].charAt(0), notes[i]);
}
return charmap.get(c);
}
public Rhythm getRhythm() {
return rhythm;
}
public double getRhythmValue() {
switch(rhythm) {
case DOTTED_WHOLE:
case DOTTED_WHOLE_REST:
return 6.0;
case WHOLE:
case WHOLE_REST:
return 4.0;
case DOTTED_HALF:
case DOTTED_HALF_REST:
return 3.0;
case HALF:
case HALF_REST:
return 2.0;
case DOTTED_QUARTER:
case DOTTED_QUARTER_REST:
return 1.5;
case QUARTER:
case QUARTER_REST:
return 1.0;
case DOTTED_EIGTH:
case DOTTED_EIGTH_REST:
return 0.75;
case EIGTH:
case EIGTH_REST:
return 0.5;
case DOTTED_SIXTEENTH:
case DOTTED_SIXTEENTH_REST:
return 6.0;
case SIXTEENTH:
case SIXTEENTH_REST:
return 0.25;
default:
return 0;
}
}
public String toString() {
switch(rhythm) {
case DOTTED_WHOLE:
return "Dotted Whole Note";
case DOTTED_WHOLE_REST:
return "Dotted Whole Rest";
case WHOLE:
return "Whole Note";
case WHOLE_REST:
return "Whole Rest";
case DOTTED_HALF:
return "Dotted Half Note";
case DOTTED_HALF_REST:
return "Dotted Half Rest";
case HALF:
return "Half Note";
case HALF_REST:
return "Half Rest";
case DOTTED_QUARTER:
return "Dotted Quarter Note";
case DOTTED_QUARTER_REST:
return "Dotted Quarter Rest";
case QUARTER:
return "Quarter Note";
case QUARTER_REST:
return "Quarter Rest";
case DOTTED_EIGTH:
return "Dotted Eigth Note";
case DOTTED_EIGTH_REST:
return "Dotted Eigth Rest";
case EIGTH:
return "Eigth Note";
case EIGTH_REST:
return "Eigth Rest";
case DOTTED_SIXTEENTH:
return "Dotted Sixteenth Note";
case DOTTED_SIXTEENTH_REST:
return "Dotted Sixteenth Rest";
case SIXTEENTH:
return "Sixteenth Note";
case SIXTEENTH_REST:
return "Sixteenth Rest";
default:
return "Not a recognized character.";
}
}
public boolean isRest() {
switch(rhythm) {
case DOTTED_WHOLE_REST:
case WHOLE_REST:
case DOTTED_HALF_REST:
case HALF_REST:
case DOTTED_QUARTER_REST:
case QUARTER_REST:
case DOTTED_EIGTH_REST:
case EIGTH_REST:
case DOTTED_SIXTEENTH_REST:
case SIXTEENTH_REST:
return true;
default:
return false;
}
}
}