OpenCV在Java中的实时性能与C++;

OpenCV在Java中的实时性能与C++;,java,c++,opencv,midi,Java,C++,Opencv,Midi,我意识到这里有许多类似的问题,但我相信我的情况是独一无二的,足以证明自己的职位 我正在研究一种“视觉指挥”——我已经建立了一个程序来跟踪一个人的手势,并从这些手势中推断出节奏(以每分钟的节拍为单位)。我现在想做的是将测量的节奏映射到一个MIDI文件中,该文件在人指挥时播放。基本上,我希望该程序允许某人指挥合成乐曲,其中演奏的文件的节奏受指挥实时手势的影响。我用OpenCV库在C++中编写了这个文件。 这就是事情变得有趣/多毛的地方。直接修改MIDI文件的节奏看起来是一项艰巨的任务,考虑到今年夏天

我意识到这里有许多类似的问题,但我相信我的情况是独一无二的,足以证明自己的职位

我正在研究一种“视觉指挥”——我已经建立了一个程序来跟踪一个人的手势,并从这些手势中推断出节奏(以每分钟的节拍为单位)。我现在想做的是将测量的节奏映射到一个MIDI文件中,该文件在人指挥时播放。基本上,我希望该程序允许某人指挥合成乐曲,其中演奏的文件的节奏受指挥实时手势的影响。我用OpenCV库在C++中编写了这个文件。 这就是事情变得有趣/多毛的地方。直接修改MIDI文件的节奏看起来是一项艰巨的任务,考虑到今年夏天剩下的时间有限,我决定去别处看看。我碰巧在JavaAPI中找到Sequencer接口,它有一个可爱的方法叫做
setTempoinBPM
。它正是我所需要的;我在C++代码中工作有困难。

<>我尝试创建自己的JVM,用于调用C++代码中的java方法,但没有用。我还尝试通过将适当的命令行参数传递给
system()
,来调用Java程序,但在使用这种方法开始播放后,我无法改变MIDI文件的节奏

<>我想把C++代码转换成java代码,以便直接调用<代码> SETMTENPUBPME()/Cudio>,但我听到了关于这是否会影响OpenCV性能的矛盾报告。

<强>我想知道您的观点:OpenCV在java上的性能是否足够与C++的性能相媲美,将我的项目转换成java是值得的?


(如果您碰巧知道如何轻松地改变播放MIDI曲目的节奏,也请随意分享。)

也许您可以遵循解析/编译方法,而不是映射到MIDI文件

将MIDI视为数据(序列化的数据)的表示形式。将数据解析为对您的特定问题有意义的中间表示(IR)(即调整节奏)。试想,“我怎样才能最好地构造内存中的数据,使其易于操纵节奏?”

然后,使用包,您可以解析midi文件并提取重要部分。该软件包可能已经具有适合您的问题的IR。显然,它有一个序列化方法,可能需要将文件输入回播放器。或者,你可以找到一个玩家,你可以把你的IR直接传给他。如果你选择了一个已经用于一个已知玩家的IR(并且仍然适合你的节奏操控),那么你就不必考虑在修改了你的IR之后序列化它。
希望帮助……< P> > P>我对C++不太有经验,但已经使用过MIDI和.P/> 在它使用的幕后


快速搜索它看起来有可能控制C++的直接(参见<代码>空洞RMIDIIN的底部::初始化方法)。我不确定是否有一个好的干净的API,因为我没有太多使用rtMidi,但可能值得检查

一个帖子里有这么多问题。我真的不知道你为什么要这么轻易地重写你已经拥有的一切。我不知道C++的一个好的免费MIDI API,但我已经玩过了,它真的不是那么有挑战性。如果你找不到一个好的C++库,你应该看看。抱歉,如果这不清楚,你所发布的链接正是我试图创建我自己的JVM所做的,并且由于某种原因,我不能让它工作。(也许我忽略了一些非常简单的事情,但仍然如此。)不过,我很感谢你的回答@康纳听起来是个很酷的项目@Connor我理解你所说的,我只是真的很困惑,调试JVM启动出错的地方比“重写我的整个项目”在你的“可能的解决方案”列表中的位置要低。谢谢你的建议-我已经看过了一些其他类似的库。希望我能用一些不那么低级的东西来解决这个问题,但是如果没有高级的解决方案,有一些选择是很好的。我很感激!谢谢你的回复!我正在寻找一些类似的库,但有其他选择总是好的。