yuin #1436(2007/07/24 16:34 GMT) [ Scala ] Rating3/3=1.00
適当に。なぜかオルゴール音色。 そういえばMIDI検定という謎な検定持ってます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
import javax.sound.midi.spi._ import javax.sound.midi._ def play_mmf(mmf:String):unit = { val noteMap = Map('c' -> 60, 'd' -> 62, 'e' -> 64, 'f' -> 65, 'g' -> 67, 'a' -> 69, 'b' -> 71) val crotchet = 24 val channel = 0 val inst = 11 val velocity= 127 var current = 0 val sequence = new Sequence(Sequence.PPQ, crotchet) val track = sequence.createTrack var m = new ShortMessage m.setMessage(ShortMessage.PROGRAM_CHANGE,channel, inst, 0) track.add(new MidiEvent(m,0)) def addEvent(t:int, pitch:int, pos:int):unit = { var m = new ShortMessage m.setMessage(t, channel, pitch, velocity) track.add(new MidiEvent(m, pos)) } def interval = current = current + crotchet/2 def addNote(pitch:int):unit = { addEvent(ShortMessage.NOTE_ON, pitch, current) interval addEvent(ShortMessage.NOTE_OFF, pitch, current) } mmf.foreach(n => n match{ case 'r' => interval case x => addNote(noteMap(x)) }) val sequencer = MidiSystem.getSequencer sequencer.addMetaEventListener(new MetaEventListener(){ def meta(meta:MetaMessage):unit = meta.getType match { case 47 => sequencer.close() System.exit(0); case _ => () } }); sequencer.open sequencer.setSequence(sequence) sequencer.start } play_mmf("cdefedcrefgagfercrcrcrcrcdefedcr")
Rating3/3=1.00-0+
[ reply ]
yuin
#1436()
[
Scala
]
Rating3/3=1.00
import javax.sound.midi.spi._ import javax.sound.midi._ def play_mmf(mmf:String):unit = { val noteMap = Map('c' -> 60, 'd' -> 62, 'e' -> 64, 'f' -> 65, 'g' -> 67, 'a' -> 69, 'b' -> 71) val crotchet = 24 val channel = 0 val inst = 11 val velocity= 127 var current = 0 val sequence = new Sequence(Sequence.PPQ, crotchet) val track = sequence.createTrack var m = new ShortMessage m.setMessage(ShortMessage.PROGRAM_CHANGE,channel, inst, 0) track.add(new MidiEvent(m,0)) def addEvent(t:int, pitch:int, pos:int):unit = { var m = new ShortMessage m.setMessage(t, channel, pitch, velocity) track.add(new MidiEvent(m, pos)) } def interval = current = current + crotchet/2 def addNote(pitch:int):unit = { addEvent(ShortMessage.NOTE_ON, pitch, current) interval addEvent(ShortMessage.NOTE_OFF, pitch, current) } mmf.foreach(n => n match{ case 'r' => interval case x => addNote(noteMap(x)) }) val sequencer = MidiSystem.getSequencer sequencer.addMetaEventListener(new MetaEventListener(){ def meta(meta:MetaMessage):unit = meta.getType match { case 47 => sequencer.close() System.exit(0); case _ => () } }); sequencer.open sequencer.setSequence(sequence) sequencer.start } play_mmf("cdefedcrefgagfercrcrcrcrcdefedcr")Rating3/3=1.00-0+
[ reply ]