Java MIDI 音频在笔记本电脑退出休眠状态后延迟
我正在开发一种音乐编程语言,并使用JVM(通过Clojure)来播放用这种语言编写的乐谱。到目前为止,我们只是使用javax.sound.midi MidiSynthesizer来播放乐谱。
由于Clojure的启动时间很慢,并且我们希望能够从命令行播放乐谱并立即听到它,因此我们选择将乐谱解释器构造为后台服务器进程,并使用用Java编写的更轻量级的命令行客户端与它进行通信。
所有这些都在大多数情况下都运行良好,但是,有一个奇怪的问题,我们看到如果您启动服务器,然后关闭笔记本电脑*并让它休眠,然后再次打开它并让服务器播放乐谱,音频不会立即发生,而是延迟几秒钟。运行带有调试日志记录的服务器,我实际上可以看到MIDI音符开/关事件立即发生(并且正确计时),但音频延迟。
*这可能是也可能不是特定于平台的。我在运行OS X 10.9.5 Mavericks的2014 Macbook Pro上看到了这个问题。
为了帮助缩小范围,我把这个简单的例子(使用Java,而不是Clojure)放在一起,演示了这个问题:
https://github.com/daveyarwood/java-midi-delayed-audio-example
我已经为此挠头一段时间了。为什么音频延迟,我们能做些什么?