Example usage for javax.sound.midi MidiEvent MidiEvent

List of usage examples for javax.sound.midi MidiEvent MidiEvent

Introduction

In this page you can find the example usage for javax.sound.midi MidiEvent MidiEvent.

Prototype

public MidiEvent(MidiMessage message, long tick) 

Source Link

Document

Constructs a new MidiEvent .

Usage

From source file:Main.java

private static MidiEvent makeEvent(int cmd, int chan, int d1, int d2, int tick) {
    MidiEvent event = null;//from   ww  w  . ja  v a  2 s.  c  o  m
    try {
        ShortMessage sm = new ShortMessage();
        sm.setMessage(cmd, chan, d1, 127);
        event = new MidiEvent(sm, tick);
    } catch (Exception e) {
        e.printStackTrace(System.err);
    }
    return event;
}

From source file:PlayerPiano.java

public static void addTrack(Sequence s, int instrument, int tempo, char[] notes)
        throws InvalidMidiDataException {
    Track track = s.createTrack(); // Begin with a new track

    // Set the instrument on channel 0
    ShortMessage sm = new ShortMessage();
    sm.setMessage(ShortMessage.PROGRAM_CHANGE, 0, instrument, 0);
    track.add(new MidiEvent(sm, 0));

    int n = 0; // current character in notes[] array
    int t = 0; // time in ticks for the composition

    // These values persist and apply to all notes 'till changed
    int notelength = 16; // default to quarter notes
    int velocity = 64; // default to middle volume
    int basekey = 60; // 60 is middle C. Adjusted up and down by octave
    boolean sustain = false; // is the sustain pedal depressed?
    int numnotes = 0; // How many notes in current chord?

    while (n < notes.length) {
        char c = notes[n++];

        if (c == '+')
            basekey += 12; // increase octave
        else if (c == '-')
            basekey -= 12; // decrease octave
        else if (c == '>')
            velocity += 16; // increase volume;
        else if (c == '<')
            velocity -= 16; // decrease volume;
        else if (c == '/') {
            char d = notes[n++];
            if (d == '2')
                notelength = 32; // half note
            else if (d == '4')
                notelength = 16; // quarter note
            else if (d == '8')
                notelength = 8; // eighth note
            else if (d == '3' && notes[n++] == '2')
                notelength = 2;/*ww  w  .j  a va 2  s.  c  om*/
            else if (d == '6' && notes[n++] == '4')
                notelength = 1;
            else if (d == '1') {
                if (n < notes.length && notes[n] == '6')
                    notelength = 4; // 1/16th note
                else
                    notelength = 64; // whole note
            }
        } else if (c == 's') {
            sustain = !sustain;
            // Change the sustain setting for channel 0
            ShortMessage m = new ShortMessage();
            m.setMessage(ShortMessage.CONTROL_CHANGE, 0, DAMPER_PEDAL, sustain ? DAMPER_ON : DAMPER_OFF);
            track.add(new MidiEvent(m, t));
        } else if (c >= 'A' && c <= 'G') {
            int key = basekey + offsets[c - 'A'];
            if (n < notes.length) {
                if (notes[n] == 'b') { // flat
                    key--;
                    n++;
                } else if (notes[n] == '#') { // sharp
                    key++;
                    n++;
                }
            }

            addNote(track, t, notelength, key, velocity);
            numnotes++;
        } else if (c == ' ') {
            // Spaces separate groups of notes played at the same time.
            // But we ignore them unless they follow a note or notes.
            if (numnotes > 0) {
                t += notelength;
                numnotes = 0;
            }
        } else if (c == '.') {
            // Rests are like spaces in that they force any previous
            // note to be output (since they are never part of chords)
            if (numnotes > 0) {
                t += notelength;
                numnotes = 0;
            }
            // Now add additional rest time
            t += notelength;
        }
    }
}

From source file:PlayerPiano.java

public static void addNote(Track track, int startTick, int tickLength, int key, int velocity)
        throws InvalidMidiDataException {
    ShortMessage on = new ShortMessage();
    on.setMessage(ShortMessage.NOTE_ON, 0, key, velocity);
    ShortMessage off = new ShortMessage();
    off.setMessage(ShortMessage.NOTE_OFF, 0, key, velocity);
    track.add(new MidiEvent(on, startTick));
    track.add(new MidiEvent(off, startTick + tickLength));
}

From source file:at.ofai.music.util.WormFileParseException.java

public Sequence toMIDI(EventList pedal) throws InvalidMidiDataException {
    final int midiTempo = 1000000;
    Sequence s = new Sequence(Sequence.PPQ, 1000);
    Track[] tr = new Track[16];
    tr[0] = s.createTrack();/*from  w  w w .  j av a2 s.c om*/
    MetaMessage mm = new MetaMessage();
    byte[] b = new byte[3];
    b[0] = (byte) ((midiTempo >> 16) & 0xFF);
    b[1] = (byte) ((midiTempo >> 8) & 0xFF);
    b[2] = (byte) (midiTempo & 0xFF);
    mm.setMessage(0x51, b, 3);
    tr[0].add(new MidiEvent(mm, 0L));
    for (Event e : l) { // from match or beatTrack file
        if (e.midiCommand == 0) // skip beatTrack file
            break;
        if (tr[e.midiTrack] == null)
            tr[e.midiTrack] = s.createTrack();
        //switch (e.midiCommand) 
        //case ShortMessage.NOTE_ON:
        //case ShortMessage.POLY_PRESSURE:
        //case ShortMessage.CONTROL_CHANGE:
        //case ShortMessage.PROGRAM_CHANGE:
        //case ShortMessage.CHANNEL_PRESSURE:
        //case ShortMessage.PITCH_BEND:
        ShortMessage sm = new ShortMessage();
        sm.setMessage(e.midiCommand, e.midiChannel, e.midiPitch, e.midiVelocity);
        tr[e.midiTrack].add(new MidiEvent(sm, (long) Math.round(1000 * e.keyDown)));
        if (e.midiCommand == ShortMessage.NOTE_ON) {
            sm = new ShortMessage();
            sm.setMessage(ShortMessage.NOTE_OFF, e.midiChannel, e.midiPitch, 0);
            tr[e.midiTrack].add(new MidiEvent(sm, (long) Math.round(1000 * e.keyUp)));
        }
    }
    if (pedal != null) { // from MIDI file
        //      if (t.size() > 0)   // otherwise beatTrack files leave an empty trk
        //         t = s.createTrack();
        for (Event e : pedal.l) {
            if (tr[e.midiTrack] == null)
                tr[e.midiTrack] = s.createTrack();
            ShortMessage sm = new ShortMessage();
            sm.setMessage(e.midiCommand, e.midiChannel, e.midiPitch, e.midiVelocity);
            tr[e.midiTrack].add(new MidiEvent(sm, (long) Math.round(1000 * e.keyDown)));
            if (e.midiCommand == ShortMessage.NOTE_ON) {
                sm = new ShortMessage();
                sm.setMessage(ShortMessage.NOTE_OFF, e.midiChannel, e.midiPitch, e.midiVelocity);
                tr[e.midiTrack].add(new MidiEvent(sm, (long) Math.round(1000 * e.keyUp)));
            }
            //catch (InvalidMidiDataException exception) {}
        }
    }
    return s;
}