我试图为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。我检查过,
javax.sound.midi
库支持SF2文件(synthesizer.isSoundBankSupported(soundfont)
返回true)。有人知道为什么我的程序会这样吗?
最佳答案
您的音序器上可能还有更多的发射器。我也遇到了这个愚蠢的问题。然后我想到了这个:
for(Transmitter tm: sequencer.getTransmitters())
{
tm.close();
}
sequencer.getTransmitter().setReceiver(synthesizer.getReceiver());
我才刚刚开始完全使用Java,更不用说Midi了。似乎很少有人去那里。我希望还有更多...
无论如何,它为我带来了成功。希望它也能对您有所帮助!