1

这是通过 javax.sound.midi 产生 midi-sound 的尝试

ShortMessage 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 上调用程序更改而在任何其他通道上播放音符时,所有工作都完美。

我正在使用(我想)程序合成器在 Windows 上对其进行测试。

有人可以告诉我API这种可疑行为的原因吗?

我找到了旧的错误文件,但我不知道它是否相关: http ://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4425843

这里还有一些我无法理解它们是否相关的线程: 使用 javax.sound.midi 包设置乐器通道

4

0 回答 0