我意识到这里有许多类似的问题,但我相信我的情况非常独特,足以保证它自己的帖子。
我正在研究某种“视觉指挥”——我已经构建了一个程序,可以跟踪一个人的手势并从这些手势中推断出节奏(以每分钟节拍为单位)。我现在想做的是将测量到的速度映射到一个 MIDI 文件,该文件在人指挥时播放。基本上,我希望该程序允许某人进行合成乐曲,其中正在播放的文件的速度会受到指挥家手势的实时影响。我已经使用 OpenCV 库在 C++ 中编写了这个。
这就是事情变得有趣/多毛的地方。直接修改 MIDI 文件的速度看起来是一项艰巨的任务,鉴于今年夏天剩下的时间有限,我决定换个地方看看。我碰巧在 Java API 中找到了 Sequencer 接口,它有一个可爱的方法,叫做setTempoinBPM
. 它完全符合我的需要;我只是很难让它在我的 C++ 代码中工作。
我尝试创建自己的 JVM 以在 C++ 代码中调用 Java 方法,但无济于事。我还尝试通过将适当的命令行参数传递给 来调用 Java 程序 system()
,但是在使用这种方法开始播放后,我无法更改 MIDI 文件的速度。
我正在考虑将我的 C++ 代码转换为 Java 代码以便setTempoinBPM()
直接调用,但我一直听到关于这是否会影响 OpenCV 性能的相互矛盾的报告。
我想听听您的意见:OpenCV 在 Java 上的性能是否足以与其 C++ 性能相媲美,以至于将我的项目转换为 Java 是否值得付出努力?(如果您碰巧知道如何轻松更改正在播放的 MIDI 音轨的速度,也请随时分享。)