diff --git a/bin/technomaker/BeatMaker.class b/bin/technomaker/BeatMaker.class index a066816..353ed22 100644 Binary files a/bin/technomaker/BeatMaker.class and b/bin/technomaker/BeatMaker.class differ diff --git a/bin/technomaker/Main.class b/bin/technomaker/Main.class index 66395bf..2b3394c 100644 Binary files a/bin/technomaker/Main.class and b/bin/technomaker/Main.class differ diff --git a/bin/technomaker/MelodyMaker.class b/bin/technomaker/MelodyMaker.class index e136876..4794580 100644 Binary files a/bin/technomaker/MelodyMaker.class and b/bin/technomaker/MelodyMaker.class differ diff --git a/bin/technomaker/TechnoMaker.class b/bin/technomaker/TechnoMaker.class index c5655d7..e189c6a 100644 Binary files a/bin/technomaker/TechnoMaker.class and b/bin/technomaker/TechnoMaker.class differ diff --git a/src/technomaker/BeatMaker.java b/src/technomaker/BeatMaker.java index 41dc540..fe53f38 100644 --- a/src/technomaker/BeatMaker.java +++ b/src/technomaker/BeatMaker.java @@ -11,8 +11,9 @@ import javax.sound.midi.Track; public class BeatMaker { Sequence s; Track t; + private int drum = 13; - public BeatMaker(Sequence s) throws InvalidMidiDataException { + public BeatMaker(Sequence s, int speed) throws InvalidMidiDataException { this.s = s; t = s.createTrack(); @@ -25,7 +26,7 @@ public class BeatMaker { // **** set tempo (meta event) **** MetaMessage mt = new MetaMessage(); - byte[] bt = { 0x10, (byte) 0x00, 0x00 }; + byte[] bt = { (byte) speed, (byte) 0x00, 0x00 }; mt.setMessage(0x51, bt, 3); me = new MidiEvent(mt, (long) 0); t.add(me); @@ -54,13 +55,15 @@ public class BeatMaker { private void generateDrums() throws InvalidMidiDataException { - int b1 = (int) (Math.random() * 3); - int b2 = (int) (Math.random() * 3); + // int b1 = (int) (Math.random() * 3); + // int b2 = (int) (Math.random() * 3); + int b1 = 0; + int b2 = 2; for (int i = 0; i < 100; i++) { // **** set instrument to Piano **** ShortMessage mm = new ShortMessage(); - mm.setMessage(ShortMessage.PROGRAM_CHANGE, 1, 118, 0x00); + mm.setMessage(ShortMessage.PROGRAM_CHANGE, 1, drum , 0x00); MidiEvent me = new MidiEvent(mm, (long) 0); t.add(me); diff --git a/src/technomaker/Main.java b/src/technomaker/Main.java index 044528d..f611a31 100644 --- a/src/technomaker/Main.java +++ b/src/technomaker/Main.java @@ -3,11 +3,11 @@ package technomaker; public class Main { public static void main(String[] args) { - new TechnoMaker().save("test1.mid"); + new TechnoMaker(8).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"); +// Process p = Runtime.getRuntime().exec("\"C:\\Program Files\\VideoLAN\\VLC\\vlc.exe\" D:\\spigotworkspace\\TenchnoMaker\\test1.mid"); +// Thread.sleep(120*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 index 2f6e384..f39192b 100644 --- a/src/technomaker/MelodyMaker.java +++ b/src/technomaker/MelodyMaker.java @@ -1,5 +1,7 @@ package technomaker; +import java.util.Random; + import javax.sound.midi.InvalidMidiDataException; import javax.sound.midi.MetaMessage; import javax.sound.midi.MidiEvent; @@ -12,8 +14,11 @@ public class MelodyMaker { Sequence s; Track t; + int instrument = 80 + (int) (Math.random() * 7); + int instrumentR = 80 + (int) (Math.random() * 7); + private int ton = 60; - public MelodyMaker(Sequence s) throws Exception { + public MelodyMaker(Sequence s, int speed) throws Exception { this.s = s; t = s.createTrack(); @@ -26,7 +31,7 @@ public class MelodyMaker { // **** set tempo (meta event) **** MetaMessage mt = new MetaMessage(); - byte[] bt = { 0x10, (byte) 0x00, 0x00 }; + byte[] bt = { (byte) speed, (byte) 0x00, 0x00 }; mt.setMessage(0x51, bt, 3); me = new MidiEvent(mt, (long) 0); t.add(me); @@ -54,24 +59,36 @@ public class MelodyMaker { } private void generateMelody() throws Exception { - for (int i = 0; i < 10; i++) - addStrophe(40 * i); + generateRefrain(); + addStrophe(40 * 0); + addRefrain(40 * 1); + addStrophe(40 * 2); + addStrophe(40 * 3); + addRefrain(40 * 4); + addStrophe(40 * 5); + addRefrain(40 * 6); + addStrophe(40 * 7); +// for (int i = 0; i < 8; i++) +// addRefrain(40 * i); } private void addStrophe(int offset) throws Exception { - int variation = 1 + (int) (Math.random() * 6); + int variation = 1 + (int) (Math.random() * 3); - 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; + ton += new Random().nextInt(variation * 2 + 1) - variation; + if (ton <= 0) + ton = 0; + if (ton >= 128) + ton = 127; // **** set instrument to Piano **** ShortMessage mm = new ShortMessage(); - mm.setMessage(ShortMessage.PROGRAM_CHANGE, (int) (Math.random()*100), 0x00); + mm.setMessage(ShortMessage.PROGRAM_CHANGE, instrument, 0x00); MidiEvent me = new MidiEvent(mm, (long) 0 + offset); t.add(me); @@ -89,4 +106,56 @@ public class MelodyMaker { } } + ShortMessage[] refrainOn = new ShortMessage[40]; + ShortMessage[] refrainOff = new ShortMessage[40]; + int[] tonLänge = new int[40]; + + private void generateRefrain() throws InvalidMidiDataException { + int variation = 1 + (int) (Math.random() * 3); + + for (int i = 0; i < 39;) { + i += 1 + Math.random() * 2; + + ton += new Random().nextInt(variation * 2 + 1) - variation; + if (ton <= 0) + ton = 0; + if (ton >= 128) + ton = 127; + ShortMessage mm = new ShortMessage(); + mm.setMessage(ShortMessage.NOTE_ON, ton, 127); + ShortMessage mm2 = new ShortMessage(); + mm2.setMessage(ShortMessage.NOTE_OFF, ton, 127); + if (i >= 40) + i = 39; + refrainOn[i] = mm; + refrainOff[i] = mm2; + tonLänge[i] = i; + } + } + + private void addRefrain(int offset) throws Exception { + + for (int i = 0; i < 40; i++) { + + // **** set instrument to Piano **** + ShortMessage mm = new ShortMessage(); + mm.setMessage(ShortMessage.PROGRAM_CHANGE, instrumentR, 0x00); + MidiEvent me = new MidiEvent(mm, (long) 0 + offset); + t.add(me); + + if (refrainOn[i] == null) { + System.out.println("exit"+i); + continue; + } + + // **** note on - middle C **** + me = new MidiEvent(refrainOn[i], (long) i + offset); + t.add(me); + // **** note off - middle C - 120 ticks later **** + me = new MidiEvent(refrainOff[i], (long) tonLänge[i] + offset); + t.add(me); + + } + } + } diff --git a/src/technomaker/TechnoMaker.java b/src/technomaker/TechnoMaker.java index 2679601..54be674 100644 --- a/src/technomaker/TechnoMaker.java +++ b/src/technomaker/TechnoMaker.java @@ -12,13 +12,15 @@ public class TechnoMaker { Sequence s; BeatMaker bm; MelodyMaker mm; + int speed; - public TechnoMaker() { + public TechnoMaker(int speed) { + this.speed = speed; try { s = new Sequence(Sequence.PPQ, 4); Track t = s.createTrack(); - mm = new MelodyMaker(s); - bm = new BeatMaker(s); + mm = new MelodyMaker(s,this.speed); + bm = new BeatMaker(s,this.speed); } catch (Exception e) { e.printStackTrace(); } diff --git a/test1 b/test1 deleted file mode 100644 index fd70f4c..0000000 Binary files a/test1 and /dev/null differ diff --git a/test1.mid b/test1.mid index 8d50991..2e8684f 100644 Binary files a/test1.mid and b/test1.mid differ