【发布时间】:2013-07-29 18:20:02
【问题描述】:
我知道这里有许多类似的问题,但我相信我的情况非常独特,足以保证自己发帖。
我正在研究某种“视觉指挥”——我已经构建了一个程序,可以跟踪一个人的手势并根据这些手势推断节奏(以每分钟节拍为单位)。我现在想做的是将测量到的速度映射到一个 MIDI 文件,该文件在人指挥时播放。基本上,我希望该程序允许某人进行合成乐曲,其中正在播放的文件的速度会受到指挥家手势的实时影响。我已经使用 OpenCV 库在 C++ 中编写了这个。
这就是事情变得有趣/令人毛骨悚然的地方。直接修改 MIDI 文件的速度看起来是一项艰巨的任务,鉴于今年夏天剩下的时间有限,我决定去别处看看。我碰巧在 Java API 中找到了 Sequencer 接口,它有一个可爱的方法,叫做setTempoinBPM。它完全符合我的需要;我只是无法让它在我的 C++ 代码中工作。
我尝试创建自己的 JVM 以在 C++ 代码中调用 Java 方法,但无济于事。我还尝试通过将适当的命令行参数传递给 system() 来调用 Java 程序,但是在使用这种方法开始播放后,我无法更改 MIDI 文件的速度。
我正在考虑将我的 C++ 代码转换为 Java 代码以便直接调用 setTempoinBPM(),但我一直听到关于这是否会影响 OpenCV 性能的相互矛盾的报告。
我想听听您的意见:OpenCV 在 Java 上的性能是否足以与其 C++ 性能相媲美,以至于将我的项目转换为 Java 是否值得付出努力? (如果你碰巧知道如何轻松改变正在播放的 MIDI 轨道的速度,也请随时分享。)
【问题讨论】:
-
一篇文章中有这么多问题。我真的不知道为什么你会如此轻易地重写你已经拥有的一切。我不知道用于 c++ 的好的免费 MIDI API,但我玩过Java Invocation API,它真的没有那么具有挑战性。如果你没有找到好的 C++ 库,你应该调查一下。
-
抱歉,如果不清楚 - 您发布的链接正是我试图创建自己的 JVM 时所做的,但由于某种原因,我无法让它工作。 (我可能忽略了一些非常简单的事情,但仍然如此。)我很感谢您的回复!
-
@Connor 听起来是个很酷的项目!
-
@Connor 我明白你的意思,我真的很困惑,调试你的 JVM 启动出现问题在你的“可能的解决方案”列表中低于“重写我的整个项目”。