Init
This commit is contained in:
commit
2af51efe0d
|
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
|
||||
<classpathentry kind="src" path="src"/>
|
||||
<classpathentry kind="output" path="bin"/>
|
||||
</classpath>
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>TenchnoMaker</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
||||
|
|
@ -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
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -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);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Reference in New Issue