public class MooKeyboard extends KeyAdapter {
- private boolean[] isOn = new boolean[120];
- private static int startNote = 48;
- private static final int[] keyToNote = new int[120];
+ private boolean[] isOn;
+ private static int startNote;
+ private static int[] keyToNote;
+
+ /**
+ * Sets up the synthesizer emulation.
+ */
+ public MooKeyboard() {
+ isOn = new boolean[120];
+ keyToNote = new int[120];
+ setOctave(4);
+ }
/**
* Plays the appropriate MIDI NoteOn event.
* @param n the octave to start at
*/
public static void setOctave(int n) {
- startNote = n * 12;
+ if (startNote == 0 || startNote == 108) return;
+ startNote += n*12;
+ makeKeyboardMapping();
}
/** Maps keycodes (array indices) to MIDI note numbers using the following layout:
* s d g h j l => # # # # # #
* z x c v b n m , . => c d e f g a b c d
*/
- static {
+ private static void makeKeyboardMapping() {
keyToNote[KeyEvent.VK_Q] = startNote;
keyToNote[83] = startNote + 1;
keyToNote[88] = startNote + 2;