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();
}
最初の 1 秒間は、ロードしたサウンドフォントをはっきりと聞くことができますが、その後、どういうわけか、標準のサウンドフォントで MIDI が再生されます。確認したところ、SF2 ファイルはjavax.sound.midi
ライブラリでサポートされています ( synthesizer.isSoundBankSupported(soundfont)
true を返します)。
私のプログラムがこのように動作する理由を誰かが知っていますか?