Java停止MIDI播放

嗨我有java应用程序播放来自序列的midi消息。 我是用jfugue库做的。

问题是,当我试图用停止按钮停止播放时(调用sequencer.stop()和sequencer.close()),最后播放的音符都是rest时间,我无法阻止它。

所以我要问关于停止所有音频和MIDI的解决方案! 从java应用程序声音播放。

注意:如果你想提出静音音量,你需要知道我希望最终用途能够再次按下播放按钮并再次听到声音,所以静音volumr将不是解决方案,或者请解释。

谢谢!

我猜你需要在调用Player.allNotesOff()之前调用Player.allNotesOff() sequencer.stop() 。 未经测试,如果不起作用,请告诉我。

MIDI播放音乐时,它使用NOTE_ON和NOTE_OFF事件的组合。 听起来就像按下停止按钮一样,序列在发送了NOTE_ON事件后停止,但在发送了NOTE_OFF事件之前。 这意味着声音将继续无限期播放。

JFugue中的allNotesOff()在Channel类中调用JavaSound的allNotesOff()方法; 此调用是针对每个MIDI通道进行的(有16个通道)。 不幸的是,这个解决方案无法正常工作。 尝试 sequencer.stop() Player.allNotesOff() 之后调用Player.allNotesOff() ,看看是否有帮助。