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

Popular posts from this blog

java - Andrioid studio start fail: Fatal error initializing 'null' -

android - Gradle sync Error:Configuration with name 'default' not found -

StringGrid issue in Delphi XE8 firemonkey mobile app -