package at.tugraz.ist.musicdroid; import java.util.Map; import java.util.NavigableMap; import java.util.TreeMap; import android.util.Log; public class NoteMapper { private NavigableMap<Integer,Integer> positionToWhiteKey = new TreeMap<Integer, Integer>(); private NavigableMap<Integer,Integer> positionToBlackKey = new TreeMap<Integer, Integer>(); private float interval_; public void initializeWhiteKeyMap(float interval) { interval_ = interval; float position = 0; int oct = 0; for(int octave = 0; octave < 5; octave++) { positionToWhiteKey.put(round(position),oct+36); //C position += interval; positionToWhiteKey.put(round(position),oct+38); //D position += interval; positionToWhiteKey.put(round(position),oct+40); //E position += interval; positionToWhiteKey.put(round(position),oct+41); //F position += interval; positionToWhiteKey.put(round(position),oct+43); //G position += interval; positionToWhiteKey.put(round(position),oct+45); //A position += interval; positionToWhiteKey.put(round(position),oct+47); //H position += interval; oct += 12; } } public void initializeBlackKeyMap(float interval) { float position = interval; int oct = 0; for(int octave = 0; octave < 5; octave++) { positionToBlackKey.put(round(position),oct+37); //Cis position += interval*2; positionToBlackKey.put(round(position),oct+39); //Dis position += interval*3; positionToBlackKey.put(round(position),oct+42); //Fis position += interval*2; positionToBlackKey.put(round(position),oct+44); //Gis position += interval*2; positionToBlackKey.put(round(position),oct+46); //Ais position += interval*3; oct += 12; } } public Integer getWhiteKeyFromPosition(int position) { return positionToWhiteKey.floorEntry(position).getValue(); } //returns true if position is not inbetween 2 black keys public int getBlackKeyFromPosition(int position) { int pos = positionToBlackKey.floorEntry(position).getKey(); int key = positionToBlackKey.floorEntry(position).getValue(); if(position < pos+interval_/2) return key; else return -1; } private int round(float val) { val += 0.5; return (int)val; } }