【发布时间】:2016-08-14 16:15:23
【问题描述】:
我正在开发一个music programming language,并使用 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
我已经为此苦苦思索了一段时间。为什么音频会延迟,我们可以做些什么?
【问题讨论】:
标签: java audio jvm midi gervill