import java.awt.event.*;
/**
- * Functional representation of a MIDI note, which contains two MIDI events, note on and note off.
+ * A keyboard listener emulating a synthesizer.
*
* @author Einar Pehrson
*/
public class MooKeyboard extends KeyAdapter {
private boolean[] isOn = new boolean[120];
- private static final int startNote = 48;
+ private static int startNote = 48;
private static final int[] keyToNote = new int[120];
/**
// If note is not already on and the key is mapped to a note, sends the NoteOn event.
if (!isOn[noteNumber] && noteNumber > 0) Moosique.getActiveChannel().noteOn(noteNumber, 127);
isOn[noteNumber] = true;
+ System.out.println("NoteON");
} catch (ArrayIndexOutOfBoundsException x) {
return;
}
// Sends the NoteOff event.
Moosique.getActiveChannel().noteOff(noteNumber);
isOn[noteNumber] = false;
+ System.out.println("NoteOFF");
} catch (ArrayIndexOutOfBoundsException x) {
return;
}
}
+ /**
+ * Sets the octave of the lower part of the keyboard (default = 4)
+ * @param n the octave to start at
+ */
+ public static void setOctave(int n) {
+ startNote = n * 12;
+ }
+
/** Maps keycodes (array indices) to MIDI note numbers using the following layout:
*
* 2 3 5 6 7 9 0 => # # # # # # #
* z x c v b n m , . => c d e f g a b c d
*/
static {
- keyToNote[90] = startNote;
+ keyToNote[KeyEvent.VK_Q] = startNote;
keyToNote[83] = startNote + 1;
keyToNote[88] = startNote + 2;
keyToNote[68] = startNote + 3;
keyToNote[48] = startNote + 27;
keyToNote[80] = startNote + 28;
}
-}
\ No newline at end of file
+}