ここに同様の質問がたくさんあることは承知していますが、私の状況は独自の投稿を正当化するのに十分なほどユニークであると信じています.
私は一種の「視覚指揮者」に取り組んでいます - 私は、人の手のジェスチャーを追跡し、それらのジェスチャーからテンポ (1 分あたりの拍数) を推定するプログラムを構築しました。私が今やりたいことは、測定されたテンポを MIDI ファイルにマップし、その人が指揮している間に演奏することです。基本的には、このプログラムで誰かが合成された曲を指揮できるようにしたいと思います。再生中のファイルのテンポは、指揮者のジェスチャーによってリアルタイムで影響を受けます。これは、OpenCV ライブラリを使用して C++ で記述しました。
ここで、物事が面白く/毛むくじゃらになります。MIDI ファイルのテンポを直接変更するのは大変な作業のように思えますが、今年の夏に残された時間が限られているため、他の場所を探すことにしました。たまたま Java API に Sequencer インターフェースを見つけました。これには という素敵なメソッドがありsetTempoinBPM
ます。それはまさに私が必要としているものです。C++ コード内で動作させるのに問題がありました。
C++ コード内で Java メソッドを呼び出すための独自の JVM を作成しようとしましたが、役に立ちませんでした。また、適切なコマンド ライン引数を に渡して Java プログラムを呼び出してみました system()
が、この方法を使用して再生を開始した後、MIDI ファイルのテンポを変更することはできません。
直接呼び出すために、C++ コードを Java コードに変換することを検討していますsetTempoinBPM()
が、これが OpenCV のパフォーマンスに影響するかどうかについて、相反する報告を聞いています。
ご意見をお聞かせください: Java での OpenCV のパフォーマンスは、私のプロジェクトを Java に変換する価値があるほど C++ のパフォーマンスに匹敵しますか? (再生中の MIDI トラックのテンポを簡単に変更する方法を知っている場合は、それも教えてください。)