这是尝试通过javax.sound.midi
制作midi-soundShortMessage first = new ShortMessage();
first.setMessage(ShortMessage.PROGRAM_CHANGE, 1, 7, 0); // changing instrument here
MidiEvent changeInstrument = new MidiEvent(first, 1);
track.add(changeInstrument);
ShortMessage a = new ShortMessage();
a.setMessage(ShortMessage.NOTE_ON, 1, 44, 127);
MidiEvent noteOn = new MidiEvent(a, 2);
track.add(noteOn);
ShortMessage b = new ShortMessage();
a.setMessage(ShortMessage.NOTE_OFF, 1, 44, 127);
MidiEvent noteOff = new MidiEvent(b, 32);
track.add(noteOff);
player.setSequence(seq);
player.start();
问题是乐器没有改变(“原声三角钢琴”独立于所选号码播放)。
然而我起初发现,如果频道号为0而不是1,所有作品都是完美的。后来我发现了更令人困惑的事情 - 即使在频道0上调用节目更改而在任何其他频道上播放音符,所有这些都很完美。 / p>
我正在使用(我想)程序合成器在Windows上进行测试。
有人可以告诉我这种API可疑行为的原因吗?
我发现了旧的bug,但我不知道它是否相关: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4425843
以下是我无法理解它们是否相关的主题: Setting instrument channels using the javax.sound.midi package