我正在尝试为Java程序实现一个MIDI播放器。因此,我开始使用javax.sound.midi
库。我在那里加载了我的Sequencer
和Synthesizer
:
private void playMidiFile() {
Soundbank soundfont = MidiSystem.getSoundbank(Util.internalFile("FluidR3_GM.sf2").getInputStream());
Sequencer sequencer = MidiSystem.getSequencer();
Synthesizer synthesizer = MidiSystem.getSynthesizer();
sequencer.open();
synthesizer.open();
synthesizer.loadAllInstruments(soundfont);
sequencer.getTransmitter().setReceiver(synthesizer.getReceiver());
sequencer.setSequence(Util.internalFile("MyMusic.mid").getInputStream());
sequencer.start();
}
第一秒我可以清晰地听到我加载的声音字体文件,但之后 MIDI 播放却使用了标准声音字体。我检查过 SF2 文件并确认 javax.sound.midi
库支持该字体文件(synthesizer.isSoundBankSupported(soundfont)
返回为 true)。是否有人知道我的程序出现这种行为的原因?