commit 2af51efe0d16cfd1a61b7d87ff504d5af3005dfa Author: MasterGordon Date: Sat Jan 26 22:30:50 2019 +0100 Init diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..e461bea --- /dev/null +++ b/.classpath @@ -0,0 +1,6 @@ + + + + + + diff --git a/.project b/.project new file mode 100644 index 0000000..cd392b4 --- /dev/null +++ b/.project @@ -0,0 +1,17 @@ + + + TenchnoMaker + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..bb35fa0 --- /dev/null +++ b/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,11 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/bin/technomaker/BeatMaker.class b/bin/technomaker/BeatMaker.class new file mode 100644 index 0000000..a066816 Binary files /dev/null and b/bin/technomaker/BeatMaker.class differ diff --git a/bin/technomaker/Main.class b/bin/technomaker/Main.class new file mode 100644 index 0000000..66395bf Binary files /dev/null and b/bin/technomaker/Main.class differ diff --git a/bin/technomaker/MelodyMaker.class b/bin/technomaker/MelodyMaker.class new file mode 100644 index 0000000..e136876 Binary files /dev/null and b/bin/technomaker/MelodyMaker.class differ diff --git a/bin/technomaker/TechnoMaker.class b/bin/technomaker/TechnoMaker.class new file mode 100644 index 0000000..c5655d7 Binary files /dev/null and b/bin/technomaker/TechnoMaker.class differ diff --git a/src/technomaker/BeatMaker.java b/src/technomaker/BeatMaker.java new file mode 100644 index 0000000..41dc540 --- /dev/null +++ b/src/technomaker/BeatMaker.java @@ -0,0 +1,91 @@ +package technomaker; + +import javax.sound.midi.InvalidMidiDataException; +import javax.sound.midi.MetaMessage; +import javax.sound.midi.MidiEvent; +import javax.sound.midi.Sequence; +import javax.sound.midi.ShortMessage; +import javax.sound.midi.SysexMessage; +import javax.sound.midi.Track; + +public class BeatMaker { + Sequence s; + Track t; + + public BeatMaker(Sequence s) throws InvalidMidiDataException { + this.s = s; + t = s.createTrack(); + + // **** General MIDI sysex -- turn on General MIDI sound set **** + byte[] b = { (byte) 0xF0, 0x7E, 0x7F, 0x09, 0x01, (byte) 0xF7 }; + SysexMessage sm = new SysexMessage(); + sm.setMessage(b, 6); + MidiEvent me = new MidiEvent(sm, (long) 0); + t.add(me); + + // **** set tempo (meta event) **** + MetaMessage mt = new MetaMessage(); + byte[] bt = { 0x10, (byte) 0x00, 0x00 }; + mt.setMessage(0x51, bt, 3); + me = new MidiEvent(mt, (long) 0); + t.add(me); + + // **** set track name (meta event) **** + mt = new MetaMessage(); + String TrackName = new String("midifile track"); + mt.setMessage(0x03, TrackName.getBytes(), TrackName.length()); + me = new MidiEvent(mt, (long) 0); + t.add(me); + + // **** set omni on **** + ShortMessage mm = new ShortMessage(); + mm.setMessage(ShortMessage.CONTROL_CHANGE, 0x7D, 0x00); + me = new MidiEvent(mm, (long) 0); + t.add(me); + + // **** set poly on **** + mm = new ShortMessage(); + mm.setMessage(ShortMessage.CONTROL_CHANGE, 0x7F, 0x00); + me = new MidiEvent(mm, (long) 0); + t.add(me); + + generateDrums(); + } + + private void generateDrums() throws InvalidMidiDataException { + + int b1 = (int) (Math.random() * 3); + int b2 = (int) (Math.random() * 3); + + for (int i = 0; i < 100; i++) { + // **** set instrument to Piano **** + ShortMessage mm = new ShortMessage(); + mm.setMessage(ShortMessage.PROGRAM_CHANGE, 1, 118, 0x00); + MidiEvent me = new MidiEvent(mm, (long) 0); + t.add(me); + + // **** note on - middle C **** + mm = new ShortMessage(); + mm.setMessage(ShortMessage.NOTE_ON, 1, 20, 127); + me = new MidiEvent(mm, (long) i * 4 + b1); + t.add(me); + // **** note off - middle C - 120 ticks later **** + mm = new ShortMessage(); + mm.setMessage(ShortMessage.NOTE_OFF, 1, 20, 127); + me = new MidiEvent(mm, (long) i * 4 + b1); + t.add(me); + + // **** note on - middle C **** + mm = new ShortMessage(); + mm.setMessage(ShortMessage.NOTE_ON, 1, 20, 127); + me = new MidiEvent(mm, (long) i * 4 + b2); + t.add(me); + // **** note off - middle C - 120 ticks later **** + mm = new ShortMessage(); + mm.setMessage(ShortMessage.NOTE_OFF, 1, 20, 127); + me = new MidiEvent(mm, (long) i * 4 + b2); + t.add(me); + + } + } +} diff --git a/src/technomaker/Main.java b/src/technomaker/Main.java new file mode 100644 index 0000000..044528d --- /dev/null +++ b/src/technomaker/Main.java @@ -0,0 +1,16 @@ +package technomaker; + +public class Main { + + public static void main(String[] args) { + new TechnoMaker().save("test1.mid"); + try { + Process p = Runtime.getRuntime().exec("\"C:\\Program Files\\VideoLAN\\VLC\\vlc.exe\" D:\\spigotworkspace\\TenchnoMaker\\test1.mid"); + Thread.sleep(41*1000); + p = Runtime.getRuntime().exec("taskkill /IM \"vlc.exe\" /F"); + } catch (Exception e) { + + } + } + +} diff --git a/src/technomaker/MelodyMaker.java b/src/technomaker/MelodyMaker.java new file mode 100644 index 0000000..2f6e384 --- /dev/null +++ b/src/technomaker/MelodyMaker.java @@ -0,0 +1,92 @@ +package technomaker; + +import javax.sound.midi.InvalidMidiDataException; +import javax.sound.midi.MetaMessage; +import javax.sound.midi.MidiEvent; +import javax.sound.midi.Sequence; +import javax.sound.midi.ShortMessage; +import javax.sound.midi.SysexMessage; +import javax.sound.midi.Track; + +public class MelodyMaker { + + Sequence s; + Track t; + + public MelodyMaker(Sequence s) throws Exception { + this.s = s; + t = s.createTrack(); + + // **** General MIDI sysex -- turn on General MIDI sound set **** + byte[] b = { (byte) 0xF0, 0x7E, 0x7F, 0x09, 0x01, (byte) 0xF7 }; + SysexMessage sm = new SysexMessage(); + sm.setMessage(b, 6); + MidiEvent me = new MidiEvent(sm, (long) 0); + t.add(me); + + // **** set tempo (meta event) **** + MetaMessage mt = new MetaMessage(); + byte[] bt = { 0x10, (byte) 0x00, 0x00 }; + mt.setMessage(0x51, bt, 3); + me = new MidiEvent(mt, (long) 0); + t.add(me); + + // **** set track name (meta event) **** + mt = new MetaMessage(); + String TrackName = new String("midifile track"); + mt.setMessage(0x03, TrackName.getBytes(), TrackName.length()); + me = new MidiEvent(mt, (long) 0); + t.add(me); + + // **** set omni on **** + ShortMessage mm = new ShortMessage(); + mm.setMessage(ShortMessage.CONTROL_CHANGE, 0x7D, 0x00); + me = new MidiEvent(mm, (long) 0); + t.add(me); + + // **** set poly on **** + mm = new ShortMessage(); + mm.setMessage(ShortMessage.CONTROL_CHANGE, 0x7F, 0x00); + me = new MidiEvent(mm, (long) 0); + t.add(me); + + generateMelody(); + } + + private void generateMelody() throws Exception { + for (int i = 0; i < 10; i++) + addStrophe(40 * i); + } + + private void addStrophe(int offset) throws Exception { + + int variation = 1 + (int) (Math.random() * 6); + + int ton = 60; + for (int i = 0; i < 40;) { + + i += 1 + Math.pow(Math.random() * 3, 2) * 0.3; + + ton += (int) (Math.random() * (variation * 2 + 1)) - variation; + + // **** set instrument to Piano **** + ShortMessage mm = new ShortMessage(); + mm.setMessage(ShortMessage.PROGRAM_CHANGE, (int) (Math.random()*100), 0x00); + MidiEvent me = new MidiEvent(mm, (long) 0 + offset); + t.add(me); + + // **** note on - middle C **** + mm = new ShortMessage(); + mm.setMessage(ShortMessage.NOTE_ON, ton, 127); + me = new MidiEvent(mm, (long) i + offset); + t.add(me); + // **** note off - middle C - 120 ticks later **** + mm = new ShortMessage(); + mm.setMessage(ShortMessage.NOTE_OFF, ton, 127); + me = new MidiEvent(mm, (long) 1 + i + offset); + t.add(me); + + } + } + +} diff --git a/src/technomaker/TechnoMaker.java b/src/technomaker/TechnoMaker.java new file mode 100644 index 0000000..2679601 --- /dev/null +++ b/src/technomaker/TechnoMaker.java @@ -0,0 +1,36 @@ +package technomaker; + +import java.io.File; +import java.io.IOException; + +import javax.sound.midi.MidiSystem; +import javax.sound.midi.Sequence; +import javax.sound.midi.Track; + +public class TechnoMaker { + + Sequence s; + BeatMaker bm; + MelodyMaker mm; + + public TechnoMaker() { + try { + s = new Sequence(Sequence.PPQ, 4); + Track t = s.createTrack(); + mm = new MelodyMaker(s); + bm = new BeatMaker(s); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public void save(String filename) { + File f = new File(filename); + try { + MidiSystem.write(s, 1, f); + } catch (IOException e) { + e.printStackTrace(); + } + } + +} diff --git a/test1 b/test1 new file mode 100644 index 0000000..fd70f4c Binary files /dev/null and b/test1 differ diff --git a/test1.mid b/test1.mid new file mode 100644 index 0000000..8d50991 Binary files /dev/null and b/test1.mid differ