0

質問の質問者と同じjavax.sound.midiの例を使用しました。JavaMidiの出力を終了します。問題は、シーケンスをループするのではなく、一度再生した後にシーケンスを終了することでした。

ボタンを押すだけで再生を停止するようにシーケンサー(またはシンセサイザー?)に指示するコマンドを「注入」するにはどうすればよいのでしょうか。

これまでシンセサイザーとシーケンサーを閉じてみましたが、まだ音が出ています。また、トラックを削除することも、チャネル内のすべてのノートをオフにすることも(JavaのStop MIDI再生で提案されているように)機能しませんでした。

if (synth != null) {
        javax.sound.midi.MidiChannel[] channels = synth.getChannels();

        channels[0].allNotesOff();
        channels[0].allSoundOff();
    }

現在のシーケンスを停止した後、別のシーケンスを再生できるようにしたいと思います。

4

1 に答える 1

1

私が理解している限りでは、Sun JRE の Midi サポートは、完全に外部 (およびネイティブ) の midi 実装を使用しています。私自身、多くの問題を抱えていました (ボリュームコントロールが正しく機能しない、例えば、ボリュームを 0 に設定してもまだ聞こえる。音質も他の MIDI プレーヤーが提供するものよりもはるかに低い)。ネイティブ バインディングには、簡単に回避できない制限がある可能性があります。

私はGervillに切り替えることで問題を解決しました。これは、ネイティブ Java midi サポートの代替として意図された純粋な Java 実装です (MIDI 部分がオープン ソースとしてリリースされるのを妨げるライセンスの問題があります)。私の知る限り、彼らは何らかの理由で切り替えませんでしたが、将来の Java リリースでは切り替えられる可能性があります。

于 2012-09-10T13:45:20.340 に答える