TR-808 のサウンドバンクを Java にロードしていて、そのキットを再生したいのですが、問題は、デフォルトのサウンドバンクがドラムと一緒に再生されるのを無効にできないことです。GM サウンドを使用するだけではすべてが機能しますが、SoundBank をロードすると、すべてがマッシュアップされます。
player = MidiSystem.getSequencer();
player.open();
seqTrans = player.getTransmitter();
synth = MidiSystem.getSynthesizer();
synthRcvr = synth.getReceiver();
seqTrans.setReceiver(synthRcvr);
synth.open();
File file = new File("resources/TR-808.sf2");
Soundbank soundbank = MidiSystem.getSoundbank(file);
// synth.unloadAllInstruments(synth.getDefaultSoundbank()); don't work:(
synth.loadAllInstruments(soundbank);
Sequence seq = new Sequence(Sequence.PPQ, 4);
Track track = seq.createTrack();
ShortMessage instr = new ShortMessage();
instr.setMessage(192, channel, 35, 0);
MidiEvent changeInstrument = new MidiEvent(instr, 1);
track.add(changeInstrument);
for(int i = 1; i < 30; i++){
ShortMessage a = new ShortMessage();
a.setMessage(144, channel, 35, 100);
MidiEvent noteOn = new MidiEvent(a, 4+4*i);
track.add(noteOn);
}
何かおかしくないですか?
編集
私はこれを見つけました。明らかに、この問題を抱えているのは私だけではありません。
男が書く
ここの誰かが同じ問題を抱えているようで、デフォルトのサウンドバンクが新しいサウンドバンクと同時に再生されます: http://forums.sun.com/thread.jspa?threadID=5182082。ただし、彼らの「解決済み」の返信では、多くの情報は得られません。新しいサウンドバンクの .gm ファイルの場所と関係があります。
悲しいことに、Sun のフォーラムへのリンクはもう機能しません (オラクルさん、私はあなたを見ています!)。投稿は 2009 年のものなので、インターネットの時代にはかなり古いものであり、この問題が解決されることを願っていました-悲しいことにそうではないようです。
Beads Project ( http://beadsproject.net )を使用するように切り替えましたが、Midi サポートも提供しています。オーディオ サンプルは完全に機能しており (Java Audio よりもはるかに優れています!)、近いうちに Midi 実装で運試しをする予定です。誰かが興味を持っている場合は、結果が得られ次第、この質問に更新を投稿できます。