Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法立即停止midi序列_Java_Midi - Fatal编程技术网

Java 无法立即停止midi序列

Java 无法立即停止midi序列,java,midi,Java,Midi,我使用了与问题列表相同的javax.sound.midi示例。这里的问题是在播放一次序列后终止序列,而不是循环播放 我想知道如何“注入”一个命令,让音序器(或者更确切地说是合成器?)在按下按钮时停止播放 到目前为止,我已经尝试关闭合成器和音序器,但声音仍在播放。此外,删除音轨或关闭通道中的所有音符(如中所建议)都不起作用: 我希望在停止当前序列后能够播放另一个序列。据我所知,Sun JRE中的Midi支持使用完全外部(和本地)的Midi实现。我自己也有一些问题(音量控制不正常,例如将音量设置为0

我使用了与问题列表相同的javax.sound.midi示例。这里的问题是在播放一次序列后终止序列,而不是循环播放

我想知道如何“注入”一个命令,让音序器(或者更确切地说是合成器?)在按下按钮时停止播放

到目前为止,我已经尝试关闭合成器和音序器,但声音仍在播放。此外,删除音轨或关闭通道中的所有音符(如中所建议)都不起作用:


我希望在停止当前序列后能够播放另一个序列。

据我所知,Sun JRE中的Midi支持使用完全外部(和本地)的Midi实现。我自己也有一些问题(音量控制不正常,例如将音量设置为0,但仍然可以听到声音。音质也远低于其他midi播放器提供的音质)。本机绑定中可能存在一些无法轻松解决的限制


我通过切换到纯java实现解决了我的问题,该实现旨在替代本机java midi支持(有许可证问题阻止midi部分作为开源发布)。据我所知,他们并没有因为任何原因而切换,但可能在未来的java版本中仍然会切换。

我使用的是openJDK 6(在Ubuntu 12.04上),我认为那里的标准合成器是gervill。如果你直接使用Gervill,那么音序器就会暴露出来,你应该能够控制它,几乎没有延迟。也许声音管道(毕竟gervill生产原始PCM)太长了,你会得到明显的延迟吗?当我使用gervill时,我从它的示例播放器中获取代码,因此我还可以控制PCM发送到的线路。但是,关于该行缓冲区大小的卷更改仍有明显的延迟。我认为,为了尽量减少命令延迟,您需要为线路设置一个较小的缓冲区,或者您需要关闭并重新打开线路以中断当前播放的任何内容。我不确定声音管道是否存在问题,但我会按照您的建议查看gervill示例播放器,然后告诉它是否有效。
if (synth != null) {
        javax.sound.midi.MidiChannel[] channels = synth.getChannels();

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