]> ruin.nu Git - moosique.git/blobdiff - MooNote.java
no message
[moosique.git] / MooNote.java
index 6ea6c39b6b6bfb369d6feca755dc194846dc5f06..d49495fcaafb3693144612b97c9d8e05c5fdb8cb 100644 (file)
@@ -29,21 +29,20 @@ 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)
         * @param pitch         the pitch of the note (0-127)
         * @param velocity      the velocity of the note (0-127)
         * @param timestamp     the timestamp of the note in ticks (96 per beat)
         * @param duration      the duration of the note in ticks (96 per beat)
         */
-       public MooNote (int track, int channel, int pitch, int velocity, long timestamp, int duration) {
+       public MooNote (int channel, int pitch, int velocity, long timestamp, int duration) {
                super(new ShortMessage(), timestamp);
                noteOffEvent = new MidiEvent(new ShortMessage(), timestamp + duration);
                noteOnMsg = (ShortMessage)getMessage();
@@ -61,7 +60,7 @@ public class MooNote extends MidiEvent {
        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) {}
        }
 
@@ -72,7 +71,7 @@ public class MooNote extends MidiEvent {
        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) {}
        }
 
@@ -83,7 +82,7 @@ public class MooNote extends MidiEvent {
        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) {}
        }
 
@@ -134,7 +133,7 @@ public class MooNote extends MidiEvent {
         */
        public int getDuration() {
                if (!hasNoteOffEvent()) return 0;
-               return (int)(getTick() - noteOffEvent.getTick());
+               return (int)(noteOffEvent.getTick() - getTick());
        }
 
        /** 
@@ -142,6 +141,24 @@ public class MooNote extends MidiEvent {
         * @return      the note off MidiEvent
         */
        public boolean hasNoteOffEvent() {
-               return noteOffEvent == null;
+               return noteOffEvent != null;
        }
-}
\ No newline at end of file
+
+       /**
+        * Adds this note (both noteOn and noteOffEvents) to a track.
+        * @param track the track it'll be added to.
+        */
+       public void addTo(Track track){
+               track.add(this);
+               if (hasNoteOffEvent()) track.add(noteOffEvent);
+       }
+       
+       /**
+        * Removes this note (both noteOn and noteOffEvents) from a track.
+        * @param track the track it'll be removed from.
+        */
+       public void removeFrom(Track track){
+               track.remove(this);
+               if (hasNoteOffEvent()) track.remove(noteOffEvent);
+       }
+}