有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

OpenCV在爪哇与C++的实时性能

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

我正在研究一种“视觉指挥”——我建立了一个程序,可以跟踪一个人的手势,并根据这些手势推断出节奏(以每分钟的节拍为单位)。我现在想做的是将测量的节奏映射到一个MIDI文件,该文件在人指挥时播放。基本上,我希望这个程序允许某人指挥一段合成的曲子,其中演奏的文件的节奏受指挥的实时手势的影响。我用OpenCV库在C++中编写了这个文件。p>

这就是事情变得有趣的地方。直接修改MIDI文件的节奏看起来是一项艰巨的任务,考虑到今年夏天剩下的时间有限,我决定去别处看看。我碰巧在JavaAPI中找到Sequencer接口,它有一个可爱的方法setTempoinBPM。它正是我所需要的;我在C++代码中工作有问题。

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

<>我考虑将C++代码转换成java代码,以便直接调用^ {CD3>},但我听到了关于这是否会影响OpenCV性能的矛盾报告。p>

<强>我想知道您的观点:OpenCV在java上的性能是否足够与C++的性能相媲美,将我的项目转换成java是值得的? (如果您碰巧知道如何轻松地改变正在播放的MIDI曲目的节奏,请随时分享。)


共 (2) 个答案

  1. # 1 楼答案

    <>我对C++没有经验,但已经使用了MIDI,通过openFrameworksofxMidi

    它在幕后使用rtMidi

    快速搜索,看起来可能有可能从C++直接控制tempo(参见^ {< CD1>}方法)。我不确定是否有一个干净的API,因为我没有太多使用rtMidi,但可能值得检查

  2. # 2 楼答案

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

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

    然后,使用包like this,您可以解析midi文件并提取重要部分。该软件包可能已经有了适合您的问题的IR。显然,它有一个序列化方法,可能需要将文件输入回播放器。或者,你可以找到一个球员,你可以把你的IR直接传递给他。如果你选择了一个已经用于一个已知玩家的IR(并且仍然适合你的节奏操控),那么你就不必考虑在修改了你的IR之后序列化它。p>

    希望这能帮助