Java ge(此处必须隐式),有三种可能的形式:GM2或GS或XG。但是,如果API不允许直接处理银行选择消息,那么了解它也无济于事。而且,ShortMessage(ShortMessage.PROGRAM\u CHANGE,0,14,0)对我来说看起来很可疑。你

Java ge(此处必须隐式),有三种可能的形式:GM2或GS或XG。但是,如果API不允许直接处理银行选择消息,那么了解它也无济于事。而且,ShortMessage(ShortMessage.PROGRAM\u CHANGE,0,14,0)对我来说看起来很可疑。你,java,midi,midi-instrument,Java,Midi,Midi Instrument,ge(此处必须隐式),有三种可能的形式:GM2或GS或XG。但是,如果API不允许直接处理银行选择消息,那么了解它也无济于事。而且,ShortMessage(ShortMessage.PROGRAM\u CHANGE,0,14,0)对我来说看起来很可疑。你检查过这个了吗?应该有两个参数(通道和程序号),但这里有三个。你有没有试过把零中的一个变成别的?看起来其中一个参数可能是带有此API的银行编号。@Hibou57ShortMessage构造函数的四参数形式从单独的命令和通道值创建MIDI状态字节



ge(此处必须隐式),有三种可能的形式:GM2或GS或XG。但是,如果API不允许直接处理银行选择消息,那么了解它也无济于事。而且,
ShortMessage(ShortMessage.PROGRAM\u CHANGE,0,14,0)
对我来说看起来很可疑。你检查过这个了吗?应该有两个参数(通道和程序号),但这里有三个。你有没有试过把零中的一个变成别的?看起来其中一个参数可能是带有此API的银行编号。@Hibou57
ShortMessage
构造函数的四参数形式从单独的命令和通道值创建MIDI状态字节。这可能取决于何时以及如何发送MIDI银行选择消息。代码段不显示任何银行选择操作。如果你忘了,那就先试试这个。如果你这么做了,我可能会有一个答案,告诉你更多关于MIDI Bank Select可能出现的问题。@Hibou57据我所知,Bank Select命令用于MIDI通道(我以
channel.programChange(1152,14)
的形式使用,除非我弄错了)。MidiMessage是否有一个等价物?好的……我不知道Java MIDI API,所以我没有注意到。银行号码惊人地大(这对我来说很少见)。问题可能是,对于银行选择消息(此处必须隐式),有三种可能的形式:GM2或GS或XG。但是,如果API不允许直接处理银行选择消息,那么了解它也无济于事。而且,
ShortMessage(ShortMessage.PROGRAM\u CHANGE,0,14,0)
对我来说看起来很可疑。你检查过这个了吗?应该有两个参数(通道和程序号),但这里有三个。你有没有试过把零中的一个变成别的?看起来其中一个参数可能是带有此API的银行编号。@Hibou57
ShortMessage
构造函数的四参数形式从单独的命令和通道值创建MIDI状态字节。这可能取决于何时以及如何发送MIDI银行选择消息。代码段不显示任何银行选择操作。如果你忘了,那就先试试这个。如果你这么做了,我可能会有一个答案,告诉你更多关于MIDI Bank Select可能出现的问题。@Hibou57据我所知,Bank Select命令用于MIDI通道(我以
channel.programChange(1152,14)
的形式使用,除非我弄错了)。MidiMessage是否有一个等价物?好的……我不知道Java MIDI API,所以我没有注意到。银行号码惊人地大(这对我来说很少见)。问题可能是,对于银行选择消息(此处必须隐式),有三种可能的形式:GM2或GS或XG。但是,如果API不允许直接处理银行选择消息,那么了解它也无济于事。而且,
ShortMessage(ShortMessage.PROGRAM\u CHANGE,0,14,0)
对我来说看起来很可疑。你检查过这个了吗?应该有两个参数(通道和程序号),但这里有三个。你有没有试过把零中的一个变成别的?看起来其中一个参数可能是带有此API的银行编号。@Hibou57
ShortMessage
构造函数的四参数形式从单独的命令和通道值创建MIDI状态字节。这正是我要找的。谢谢你的帮助和信息。正是我想要的。谢谢你的帮助和信息。正是我想要的。谢谢你的帮助和信息。正是我想要的。谢谢你的帮助和信息。
MidiChannel channel = synthesizer.getChannels()[0];
if (channel != null) {
    channel.programChange(1152, 14);
    channel.noteOn(70, 100);
}
Sequence sequence = new Sequence(Sequence.PPQ, 2);
Track track = sequence.createTrack();
ShortMessage pcMessage = new ShortMessage(ShortMessage.PROGRAM_CHANGE, 0, 14, 0);
track.add(new MidiEvent(pcMessage, 0));
... = new ShortMessage(ShortMessage.CONTROL_CHANGE, 0, 0,  1152 >> 7);   // = 9
... = new ShortMessage(ShortMessage.CONTROL_CHANGE, 0, 32, 1152 & 0x7f); // = 0
... = new ShortMessage(ShortMessage.PROGRAM_CHANGE, 0, 14, 0);