package fr.utc.leapband.utilities;
import javax.sound.midi.*;
import java.util.ArrayList;
public class GuitarChordDemo { // this is the first one
// public static void main(String[] args) {
//
// GuitarTuning gt = new GuitarTuning();
//
// ArrayList<Integer> eMajorChordMidiValues = new ArrayList<Integer>();
//
// eMajorChordMidiValues.add(gt.midiNum(6,0));
// eMajorChordMidiValues.add(gt.midiNum(5,2));
// eMajorChordMidiValues.add(gt.midiNum(4,2));
// eMajorChordMidiValues.add(gt.midiNum(3,1));
// eMajorChordMidiValues.add(gt.midiNum(2,0));
// eMajorChordMidiValues.add(gt.midiNum(1,0));
//
// ArrayList<Integer> aMajorChordMidiValues = new ArrayList<Integer>();
//
// aMajorChordMidiValues.add(gt.midiNum(6,0));
// aMajorChordMidiValues.add(gt.midiNum(5,0));
// aMajorChordMidiValues.add(gt.midiNum(4,2));
// aMajorChordMidiValues.add(gt.midiNum(3,2));
// aMajorChordMidiValues.add(gt.midiNum(2,2));
// aMajorChordMidiValues.add(gt.midiNum(1,0));
//
//
// final int instrument = 25; // SEE http://soundprogramming.net/file_formats/general_midi_instrument_list
//
// /* 25 Acoustic Guitar (nylon)
// 26 Acoustic Guitar (steel)
// 27 Electric Guitar (jazz)
// 28 Electric Guitar (clean)
// 29 Electric Guitar (muted)
// 30 Overdriven Guitar
// 31 Distortion Guitar
// 32 Guitar harmonics */
//
// GuitarChordDemo mini = new GuitarChordDemo();
// mini.playChord(instrument, eMajorChordMidiValues);
// mini.playChord(instrument, aMajorChordMidiValues);
//
// System.exit(0);
// }
public void playChord(int instrument, ArrayList<Integer> chord, int velocity) {
try {
Sequencer player = MidiSystem.getSequencer();
player.open();
Sequence seq = new Sequence(Sequence.PPQ, 4);
Track track = seq.createTrack();
ShortMessage first = new ShortMessage();
first.setMessage(192, 1, instrument, 0);
MidiEvent changeInstrument = new MidiEvent(first, 1);
track.add(changeInstrument);
final int duration = 16;
for (int i=0; i<chord.size(); i++) {
ShortMessage a = new ShortMessage();
if (velocity < 0 ) {
velocity = 0;
} else if (velocity >127) {
velocity = 127;
}
a.setMessage(ShortMessage.NOTE_ON, 1, chord.get(i), velocity);
MidiEvent noteOn = new MidiEvent(a, i+1);
track.add(noteOn);
}
for (int i=0; i<chord.size(); i++) {
ShortMessage b = new ShortMessage();
b.setMessage(ShortMessage.NOTE_OFF, 1, chord.get(0), velocity);
MidiEvent noteOff = new MidiEvent(b, duration);
track.add(noteOff);
}
player.setSequence(seq);
player.start();
Thread.sleep(1600);
player.close();
} catch (Exception ex) {ex.printStackTrace();}
} // close play
} // close class