上篇稍微带过了一下javax.sound.midi包进行midi播放的方式。那么这里我们就来看看怎么样捕获和处理midi的音符信号。
之前我们有使用过Sequence类当中的一个方法:
Track[] tracks = Sequence.getTracks();
对音频处理稍有了解就知道,midi记录的声音信息是多轨的,根据midi的信号原则,最多可以有128条轨道(编号为0~127)。所以说一个 javax.sound.midi.Track其实就是一个在此midi中存在的音轨数据的实例化对象。
midi使用一种叫做“信息”(Message)的机制来存储音符信息,一般来说,信息可以被翻译成“短信息”(ShortMessage , 注意和手机的”短信“区别开)和”综合信息“(MetaMessage)。根据文档上对于信息内容的分类,可知短信息是负责控制轨道开始发声、停止发声、调整音量和做其他播放有关的控制的。而综合信息并没有被定义实际的用途,我们可以在MetaMessage的Javadoc上看到这样一段。
/** A <code>MetaMessage</code> is a <code>{@link MidiMessage}</code> that is not meaningful to synthesizers, but
* that