X-Git-Url: https://ruin.nu/git/?a=blobdiff_plain;f=MooNote.java;h=d401aa7de424e51250c95d5ae90b881c33370df8;hb=948e069926266ead58bc5466520e131941f2466c;hp=12e12386cd94e74f597d04a92cf56de65e6dc48e;hpb=dc7477835f6d61c4235b7fbe36f97fec553e2f81;p=moosique.git diff --git a/MooNote.java b/MooNote.java index 12e1238..d401aa7 100644 --- a/MooNote.java +++ b/MooNote.java @@ -1,18 +1,18 @@ import javax.sound.midi.*; -/* - * Functional representation of a MIDI note, which contains two MIDI events, note on and note off. +/** + * Functional representation of a MIDI note, which adds functionality to the existent MidiEvent class. + * Also provides a reference to the corresponding NoteOff event. * - * @author Andersson, Andreen, Lanneskog, Pehrson - * @version 2.0 + * @author Einar Pehrson */ public class MooNote extends MidiEvent { - private MidiEvent noteOffEvent; - private ShortMessage noteOnMsg, noteOffMsg; + protected MidiEvent noteOffEvent; + protected ShortMessage noteOnMsg, noteOffMsg; - /* + /** * Creates a MooNote from the given NoteOn event in the current track. * @param noteOnEvent the NoteOn event of the note */ @@ -21,7 +21,7 @@ public class MooNote extends MidiEvent { noteOnMsg = (ShortMessage)getMessage(); } - /* + /** * Creates a MooNote from the given NoteOn event in the current track and creates a reference to * the corresponding NoteOff event. * @param noteOnEvent the NoteOn event of the note @@ -29,12 +29,12 @@ public class MooNote extends MidiEvent { */ public MooNote (MidiEvent noteOnEvent, MidiEvent noteOffEvent) { super(noteOnEvent.getMessage(), noteOnEvent.getTick()); - noteOffEvent = new MidiEvent(noteOffEvent.getMessage(), noteOffEvent.getTick()); + this.noteOffEvent = noteOffEvent; noteOnMsg = (ShortMessage)getMessage(); noteOffMsg = (ShortMessage)noteOffEvent.getMessage(); } - /* + /** * Creates a MooNote of the given pitch, velocity and duration in the current track. * @param track the track to which the MooNote was added * @param channel the channel of the note (1-16) @@ -54,40 +54,40 @@ public class MooNote extends MidiEvent { } catch (InvalidMidiDataException e) {} } - /* + /** * Sets the channel of the current note. * @param channel the channel of the note (1-16) */ public void setChannel(int channel) { try { noteOnMsg.setMessage(noteOnMsg.getCommand(), (byte)channel, noteOnMsg.getData1(), noteOnMsg.getData2()); - noteOffMsg.setMessage(noteOffMsg.getCommand(), (byte)channel, noteOffMsg.getData1(), noteOffMsg.getData2()); + if(hasNoteOffEvent()) noteOffMsg.setMessage(noteOffMsg.getCommand(), (byte)channel, noteOffMsg.getData1(), noteOffMsg.getData2()); } catch (InvalidMidiDataException e) {} } - /* + /** * Sets the pitch of the current note. * @param pitch the pitch of the note (0-127) */ public void setPitch(int pitch) { try { noteOnMsg.setMessage(noteOnMsg.getCommand(), noteOnMsg.getChannel(), (byte)pitch, noteOnMsg.getData2()); - noteOffMsg.setMessage(noteOffMsg.getCommand(), noteOffMsg.getChannel(), (byte)pitch, noteOffMsg.getData2()); + if(hasNoteOffEvent()) noteOffMsg.setMessage(noteOffMsg.getCommand(), noteOffMsg.getChannel(), (byte)pitch, noteOffMsg.getData2()); } catch (InvalidMidiDataException e) {} } - /* + /** * Sets the velocity of the current note. * @param vel the velocity of the note (0-127) */ public void setVelocity(int vel) { try { noteOnMsg.setMessage(noteOnMsg.getCommand(), noteOnMsg.getChannel(), noteOnMsg.getData1(), (byte)vel); - noteOffMsg.setMessage(noteOffMsg.getCommand(), noteOffMsg.getChannel(), noteOffMsg.getData1(), noteOffMsg.getData2()); + if(hasNoteOffEvent()) noteOffMsg.setMessage(noteOffMsg.getCommand(), noteOffMsg.getChannel(), noteOffMsg.getData1(), noteOffMsg.getData2()); } catch (InvalidMidiDataException e) {} } - /* + /** * Sets the duration of the current note (or rather moves the note off event). * @param n the duration of the note in ticks (96 per beat) */ @@ -95,7 +95,7 @@ public class MooNote extends MidiEvent { if (hasNoteOffEvent()) noteOffEvent.setTick(getTick() + ticks); } - /* + /** * Sets the timestamp of the current note. * @param tick the timestamp of the note in ticks (96 per beat) */ @@ -104,7 +104,7 @@ public class MooNote extends MidiEvent { super.setTick(tick); } - /* + /** * Returns the channel of the current note. * @return the channel of the note (1-16) */ @@ -112,7 +112,7 @@ public class MooNote extends MidiEvent { return noteOnMsg.getChannel(); } - /* + /** * Returns the pitch of the current note. * @return the pitch of the note (0-127) */ @@ -120,7 +120,7 @@ public class MooNote extends MidiEvent { return noteOnMsg.getData1(); } - /* + /** * Returns the velocity of the current note. * @return the velocity of the note (0-127) */ @@ -128,20 +128,30 @@ public class MooNote extends MidiEvent { return noteOnMsg.getData2(); } - /* + /** * Returns the duration of the current note. * @return the duration of the note (in ticks) */ public int getDuration() { if (!hasNoteOffEvent()) return 0; - return (int)(getTick() - noteOffEvent.getTick()); + return (int)(noteOffEvent.getTick() - getTick()); } - /* + /** * Returns whether the NoteOff event was found. * @return the note off MidiEvent */ public boolean hasNoteOffEvent() { - return noteOffEvent == null; + return noteOffEvent != null; } -} \ No newline at end of file + + public void addTo(Track track){ + track.add(this); + if (hasNoteOffEvent()) track.add(noteOffEvent); + } + + public void removeFrom(Track track){ + track.remove(this); + if (hasNoteOffEvent()) track.remove(noteOffEvent); + } +}