web-dev-qa-db-ja.com

FlutterアプリケーションでJavaまたは他の言語を使用する

私はこの質問に答えられず、あまりフィードバックがなかったため、 Android Flutter Analyze Audio Waveform で、私が探しているものについてオンラインで何も見つかりませんでした。その答えは、ネイティブコードを使用し、プラットフォームチャネルを使用してフラッターに接続するように指示しましたが、いくつかの説明を求めたところ、何も得られませんでした。

だから私の質問は、Javaで操作を実行できる場合)(これはずっと以前から存在していたため、ドキュメントが大きくなります)、そしてFlutterで結果を使用します。

より正確に言えば、JavaとFlutterでこれらのことを行うことができます:

1)オーディオ波形を分析して特定の周波数のピークポイントを見つけ、タイムスタンプを使用してそれらをフラッターで表示します。

編集1:ピークポイントとは

enter image description here

これは、さまざまな周波数範囲の波形です(オレンジ色は低音(80〜255Hz))。黒丸で囲まれたポイントはピークポイントです。曲のオーディオスペクターを分析し、特定の周波数のピークポイントを見つける必要があります。次に、ピークを見つけたら、タイムスタンプ(16秒など)を保存する必要があります。

2)編集2:ビデオコラージュのように、30または60fpsビデオの各フレームが画像であるビデオのいくつかの写真を編集する必要があります。

3)編集3:ビデオに基本的なフレーム固有のエフェクトを追加する必要があります。たとえば、フレームごとに変化するブラーやグレアなどです。

4)そのビデオに音楽を追加し、それをmp4またはaviまたは任意の形式に保存します。

5)編集4:最も重要なこと、これをすべてリアルタイムで行いたくはありませんが、すべてのフレームが一緒にレンダリングされる、レンダリングプロセスのようなアフターエフェクトに似ています。ニースになる唯一のことは、レンダリングがフレームにあることをユーザーに伝える一種の進行状況バーです。たとえば、200/300ですが、フレームまたはビデオのいずれも表示せず、レンダリングするだけです。バックグラウンドで、それを後で見ることができるmp4ビデオに保存します。

ご覧のとおり、初期状態のため、音楽の再生方法に関するチュートリアルがほとんどない言語で行うのは難しいプロセスです。しかし、Uisやその他のflutterの方がはるかに簡単であり、Flutterもマルチプラットフォームです。だから私はFlutter言語にこだわるのを好みます。

編集5:QtとJUCEを調べたところ、Qtは有効な代替手段のように見えますが、「クローズド」システムのように理解されているものについては、たとえば、マルチメディアライブラリを調べたが、私にとってはビデオを再生するなどの基本的なことはできますが、フレームをコラージュして保存することはできません。 (私が自分自身をうまく説明したかどうかわからない)。 JUCE一方では、見た目は良くなりますが、ビデオレンダリングを含むモバイルアプリケーションよりもPCオーディオVSTの方が多く見えます。もう1つは、これら2つはフリーではなく、Flutterのようにオープンソースであることです。

次に、Kyvyがあります。これは、Pythonモバイルデバイス用のポートであり、Python学習しやすい言語の1つだと思いますが、その一方で、UIの能力はそれほど高くなく、Androidでライブラリを使用するときに問題が発生する可能性があります。

私はC++またはJava Flutterを使用できると述べましたが、C++を使用すると、それは難しいプロセスであると言いました。したがって、私の質問はJavaで通常のAndroidアプリケーションを使用して、そして何らかの方法でFlutterアプリで関数を使用しますか?

編集6:可能な代替案を見つけました:Kha( http://kha.tech/ )しかし、Flutterでの使用方法については何も見つかりませんでした。 良いアイデアでしょうか?

Javaまたはその他の言語を使用してFlutterアプリケーションで必要なことを行うことができるかどうか、そしてもしそうであれば、それが複雑であるかそれともそれほどでもないかについて、もっと確認を求めています。(初心者ですが、コードをキックスタートするためのチュートリアルやリンクも役立ちます。

4
Fabrizio

現時点でFlutterはUIの構築に最適ですが、すでに述べたように、まだ十分な機能やライブラリとの互換性はありません。その理由のかなりの部分は、C++と簡単に統合できないことですが、ここでは その には入りません。

あなたが求めていることは可能性が高いですが、それを行うのは簡単ではありません。まず、ビデオから特定のフレームをプルして表示したいように思えますが、これはさらに面倒です。また、モバイルデバイスでは処理能力がいくらか制限されていることを忘れないでください。非常に非同期である必要があり、注意しない限り、フラッターの問題を実際に引き起こす可能性があります。

あなたのポイントについて:

  1. これは非常に一般的な質問です。 Androidオーディオ処理ライブラリを調べることをお勧めします。それが可能であるとほぼ確信していますが、SOの質問は、どのフレームワークを使用するかについてアドバイスを求めるためのものではありません。 https://softwarerecs.stackexchange.com/ を試してください。

  2. ここでも、かなり一般的で、質問の内容が少し不明確です... sofwarerecsを試してください。いくつかのフレームを取り、それらをビデオにしたいと思いますか?

  3. トランスフォームを使用してフラッターで確実に行うことができるこれらのエフェクト(ズームなど)の一部。しかし、それはビデオファイル自体に追加するのではなく、フラッターで再生しているときだけです。そのためには、Android/Javaコードでビデオライブラリを使用する必要があります。

  4. もう一度、ビデオライブラリはこれを行う必要があります。

  5. これもビデオライブラリの一部です。

Processing と呼ばれる頭上にある1つのオーディオ/ビデオライブラリがmay必要なことを行うことを知っていますが、確かではありません。ただし、Android SDKはあります。 OpenCV は別の方法ですが、ビデオ/画像処理専用であり、Javaで直接使用していないため、どれほど簡単に使用できるかわかりません。

実際にこれをフラッターと一緒に実装する方法については、 Platform Channels を使用する必要があります。私はあなたの他の答えへのコメントでそれらを述べましたが、あなた自身でそれを調べることができると考えました。ドキュメントは、それがどのように機能し、どのように設定するかを説明するのに、私よりはるかに優れています。しかし、TLDRは、基本的に、ネイティブコード(Java/kotlin/Swiftなど)からフラッターコード(Dart)にシリアル化されたデータを送信すること、およびその逆を行い、ターゲットの同様のデータ構造に変換することを可能にします。言語。データが流れるさまざまな「チャネル」を設定でき、それらのチャネル内で、どちらかの端で呼び出される「メソッド」を設定するか、単にイベントをやり取りします。

冒頭で述べた複雑さは、フラッターとダートの間のチャネルを介して画像を送受信することは、それほど最適ではないということです。 JavaからDartに24/30/60fpsのスムーズな画像が送信されない可能性が高く、フラッターUIの残りの部分が大幅に遅くなる可能性があります。したがって、実際のビューポートに使用するのは、代わりに Texture であり、これは単にAndroid側からのデータを表示します。 Androidからテクスチャに書き込む方法を自分で理解する必要がありますが、そのために利用できる情報はたくさんあります。コントロール、オーディオの視覚化などは、ネイティブから取得したデータを使用して、フラッターで直接行うことができます。

必要なのは、基本的にDart/flutterで記述されたリモートコントロールで、Javaのオーディオ/ビデオ処理ライブラリとラッパーコードにさまざまなコマンドを送信します。

複雑に聞こえるかもしれませんが、それは複雑だからです。また、UIを組み込むのがフラッターであるのと同様に、Androidのみを対象とする場合に、追加の複雑な処理を行う価値があるかどうかについては疑問があります。


答えに実際に関連しているのではなく、いくつかのフレンドリーなアドバイス:

もう1つ言及しておきたいことがあります-プログラミングやさまざまな言語の習熟度はわかりませんが、ビデオ/オーディオ処理などは、通常Javaではなく、実際のネイティブで行われますコード(つまり、c/c ++)。そのため、実際にここで処理する必要がある抽象化には2つのレベルがあります(ある程度は、使用しているライブラリに応じて多少抽象化されるため)-c/c ++からJavaおよびJavaをDartに送信します。

あなたは仲介者を切り取ってネイティブともっと直接仕事をしたいかもしれません-その場合私は少なくとも Qt または [〜#〜] juce [〜#を見てみることをお勧めします〜] フラッターよりも特定のユースケースに適している場合があるため。 Kivy (pythonを使用)もあり、Pythonの画像/ビデオ/オーディオ処理ライブラリがたくさんあるのでうまくいくかもしれません...Androidおよびc ++ => pythonの翻訳がまだある程度残っています。ただし、ライセンスなどを検討する必要があります。Qtには、ほとんどのAndroidアプリに対して十分に広いOSライセンスがありますが、JUCEは、オープンソースを実行している場合を除き、料金を支払う必要があります。あなたが話しているもっと複雑な効果のためにおそらくOpenCVまたは何かを組み込んだほうがいいのですが、実際にはビデオフレームなどのネイティブデコードがあるので、Qtを他のものよりわずかに多く推薦する必要があります。ただし、単にJavaコードで記述するのと同じレベルの複雑さになる可能性がありますが、UIスタイルがわずかに異なり、C++ライブラリとの統合が簡単です。

2
rmtmckenzie