import jp.crestmuse.cmx.amusaj.sp.* import jp.crestmuse.cmx.amusaj.filewrappers.* import jp.crestmuse.cmx.sound.* import javax.sound.midi.* class OctaveUpModule extends SPModule { void execute(Object[] src, TimeSeriesCompatible[] dest) { // src[0]からステータスバイトとデータバイトを取得 def (status, data1, data2) = src[0].getMessageInByteArray() // 1つめのデータバイトに12をたしたMIDIイベントを生成 def newevent = MidiEventWithTicktime.createShortMessageEvent( [status, data1 + 12, data2], 0, src[0].music_position) // 生成したMIDIイベントをそのまま出力 dest[0].add(newevent) } Class[] getInputClasses() { [MidiEventWithTicktime.class] } Class[] getOutputClasses() { [MidiEventWithTicktime.class] } } exec = new SPExecutor() vkb = new VirtualKeyboard() mi = new MidiInputModule(vkb) rcv = MidiSystem.getReceiver() mo = new MidiOutputModule(rcv) ou = new OctaveUpModule() exec.addSPModule(mi) exec.addSPModule(ou) exec.addSPModule(mo) exec.connect(mi, 0, ou, 0) exec.connect(ou, 0, mo, 0) exec.start()