X-Git-Url: https://ruin.nu/git/?a=blobdiff_plain;f=MooKeyboard.java;h=5581172e6d10792cbe5d6cbbae30c10b88ce492e;hb=11fcb74f0ca701b2ac9fb61ff459b19207213dbd;hp=90ed18fd4acf3d582b7569f08f16c23b25fc4ebc;hpb=e49990e17bff158ad638a16ba4aa616673b94627;p=moosique.git diff --git a/MooKeyboard.java b/MooKeyboard.java index 90ed18f..5581172 100644 --- a/MooKeyboard.java +++ b/MooKeyboard.java @@ -9,22 +9,36 @@ import java.awt.event.*; 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 = new int[120]; + /** + * Sets up the synthesizer emulation. + */ + public MooKeyboard() { + isOn = new boolean[120]; + } + + static { + startNote = 48; + makeKeyboardMapping(); + } + /** * Plays the appropriate MIDI NoteOn event. */ public void keyPressed(KeyEvent e) { - try { - // Retrieves the notenumber from the conversion array. - int noteNumber = keyToNote[e.getKeyCode()]; - // 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; - } catch (ArrayIndexOutOfBoundsException x) { - return; + if (!e.isControlDown()) { + try { + // Retrieves the notenumber from the conversion array. + int noteNumber = keyToNote[e.getKeyCode()]; + // 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; + } catch (ArrayIndexOutOfBoundsException x) { + return; + } } } @@ -32,14 +46,16 @@ public class MooKeyboard extends KeyAdapter { * Plays the appropriate MIDI NoteOff event. */ public void keyReleased(KeyEvent e) { - try { - // Retrieves the notenumber from the conversion array. - int noteNumber = keyToNote[e.getKeyCode()]; - // Sends the NoteOff event. - Moosique.getActiveChannel().noteOff(noteNumber); - isOn[noteNumber] = false; - } catch (ArrayIndexOutOfBoundsException x) { - return; + if (!e.isControlDown()) { + try { + // Retrieves the notenumber from the conversion array. + int noteNumber = keyToNote[e.getKeyCode()]; + // Sends the NoteOff event. + Moosique.getActiveChannel().noteOff(noteNumber); + isOn[noteNumber] = false; + } catch (ArrayIndexOutOfBoundsException x) { + return; + } } } @@ -47,8 +63,10 @@ public class MooKeyboard extends KeyAdapter { * Sets the octave of the lower part of the keyboard (default = 4) * @param n the octave to start at */ - public void setOctave(int n) { - startNote = n * 12; + public static void setOctave(int n) { + if ((startNote == 0 && n == -1) || (startNote == 108 && n == 1)) return; + startNote += n*12; + makeKeyboardMapping(); } /** Maps keycodes (array indices) to MIDI note numbers using the following layout: @@ -58,7 +76,7 @@ public class MooKeyboard extends KeyAdapter { * 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; @@ -92,4 +110,4 @@ public class MooKeyboard extends KeyAdapter { keyToNote[48] = startNote + 27; keyToNote[80] = startNote + 28; } -} \ No newline at end of file +}