java - How change MIDI file? -
in www.jsresources.org example, still problems: velocity? beats per minute? why not 120 64? why ticks means not 1.3 millisecond interval 0.5 second? how place shorter note? how read instruments file? sample code
synthesizer synthesizer; synthesizer = midisystem.getsynthesizer(); synthesizer.open(); midichannel chan = synthesizer.getchannels()[0]; chan.programchange(1152, 14);
reads midichannel system (global?) not file.
velocity volume or gain of note. goes 0 127 - higher number, louder note be.
64 chosen because medium level (not loud).
to able use shorter notes, have change resolution of sequence - "tempo based" resolution , works in ticks per quarter note:
sequence = new sequence(sequence.ppq, 1);
increasing second argument, have more ticks per quarter note, , consequently shorter notes.
you use:
sequence = new sequence(sequence.smpte_30, 1);
this give division type of 30 frames per second. second argument giving maximum resolution of 1 note per frame.
it's in documentation.
here's sample - modified example link - should save file on desktop. might have change different location:
import java.io.file; import java.io.ioexception; import javax.sound.midi.sequence; import javax.sound.midi.midievent; import javax.sound.midi.midisystem; import javax.sound.midi.shortmessage; import javax.sound.midi.track; import javax.sound.midi.invalidmididataexception; public class createsequence { private static final int velocity = 64; public static void main(string[] args) { file outputfile = new file(system.getproperty("user.home") + "//desktop//file.midi"); sequence sequence = null; try { sequence = new sequence(sequence.smpte_30, 2); } catch (invalidmididataexception e) { e.printstacktrace(); system.exit(1); } track track = sequence.createtrack(); int note = 40; (int tick = 0; tick < 215;) { track.add(createnoteevent(shortmessage.note_on, ++note, velocity, tick)); track.add(createnoteevent(shortmessage.note_off, note, velocity, tick += 3)); } try { midisystem.write(sequence, 0, outputfile); } catch (ioexception e) { e.printstacktrace(); system.exit(1); } } private static midievent createnoteevent(int ncommand, int nkey, int nvelocity, long ltick) { shortmessage message = new shortmessage(); try { message.setmessage(ncommand, 0, nkey, nvelocity); } catch (invalidmididataexception e) { e.printstacktrace(); system.exit(1); } midievent event = new midievent(message, ltick); return event; } }
reading file whole new question. check docs!
Comments
Post a Comment