首页 文章

在Flutter应用程序中使用Java或其他语言

提问于
浏览
0

由于我没有得到答案,也没有太多关于这个问题的反馈:Android Flutter Analyze Audio Waveform并没有在网上发现我只是问一个更广泛的问题,因为对该答案的评论告诉我使用本机代码并使用平台通道将其连接到扑了但是当我问了一些澄清时我什么都没得到 .

所以我的问题是如果我可以在Java (which has been around since a much longer time, and thus has a way bigger documentation) 中进行操作,然后在Flutter中使用结果 .

更确切地说,我可以在Java和Flutter中做这些事情:

1)分析音频波形并找到特定频率的峰值点,并使用时间戳在颤动中显示它们;

编辑1: What Are Peak Points?

enter image description here

这是不同频率范围的波形(橙色一个是低音(80-255Hz)),黑色圈出的点是峰值点 . 我应该分析一首歌的音频幽灵并找出某些频率的峰值点 . 然后,当我找到峰值时,我需要保存时间戳,例如,16秒等等 .

2)编辑2:我需要编辑视频中的一些照片,例如视频拼贴,30或60fps视频的每帧都是图像 .

3)编辑3:我需要为视频添加基本帧特定效果,例如可以逐帧改变的模糊或眩光 .

4)将音乐添加到该视频并将其保存为mp4或avi或任何格式 .

5)编辑4:最重要的是,我不希望这一切都是实时的,但更像是像渲染过程之类的After Effect,其中所有的帧都被渲染在一起 . 唯一不错的是一种进度条告诉用户Render处于帧状态,例如,200的300,但我不想显示任何帧或视频,只是为了渲染它在后台,然后将其保存为可以查看的mp4视频 .

正如您所看到的那样,在一种语言中,您很难找到关于如何播放音乐的教程,因为它的早期状态 . 但是Uis和其他一些事情更容易发生,Flutter也是多平台 . 所以我更喜欢坚持Flutter语言 .

编辑5:我看了Qt和JUCE,发现Qt似乎是一个有效的替代方案,但似乎更像是一个“封闭”的系统,我的意思是,例如,我看了多媒体库,但我看到的是什么我知道,你可以做基本的东西,例如播放视频,但不能拼贴帧并保存 . (不知道我是否解释得很好) . JUCE另一方面,看起来更好,但PC音频VST似乎比包括视频渲染在内的移动应用更多 . 另一件事是,这两个不是免费的,像Flutter一样是开源的 .

然后有Kivy,它可能也可能不是最好的,因为它是移动设备的Python端口,我有很多使用Python的经验而且我认为这是一种比较容易学习的语言,但另一方面,它没有那么多UI功能 . 正如您所提到的,在Android上使用库可能会有问题 .

你声明我可以使用C或Java With Flutter,但是你用C告诉你这是一个艰难的过程 . So My question turned out to be Could I write the process in java with a Normal Android Application And Then in some way use the functions in a Flutter App?

编辑6: I found a possivle alternative: Kha(http://kha.tech/) . 但是再一次没有发现如何将它与Flutter一起使用 . Could it be a good Idea?

我要求更多确认是否可以使用Java或任何其他语言在Flutter应用程序中执行我需要的操作 . 如果它是复杂或不那么多,如果是的话 . (我是初学者) . 但是一些教程或链接来启动代码也会很有帮助!

1 回答

  • 1

    此时的颤动对于构建UI非常有用,但是因为你已经拥有很多功能或与库的兼容性 . 其中很大一部分原因是它现在还没有进入that .

    你问的是最有可能的,但这根本不是简单的事情 . 首先,听起来你想要从视频中提取特定帧并显示它们 - 这将是一个额外的复杂因素 . 并且不要忘记在移动设备上你的处理能力有限 - 事情必须非常异步,除非你小心,否则实际上会导致颤振问题 .

    至于你的观点:

    • 这是一个非常笼统的问题 . 我几乎可以肯定这是可能的,但是问题不是要求建议使用哪个框架 . 试试https://softwarerecs.stackexchange.com/ .

    • 再次,相当一般,有点不清楚你在问什么...尝试sofwarerecs . 我假设您想要拍摄几帧并将它们制作成视频?

    • 使用变换可以肯定地使用颤动进行一些效果(即缩放) . 但这只是在玩扑扑而不是添加到视频文件本身时 . 要做到这一点,你将不得不在android / java代码中使用视频库 .

    • 再一次,视频库应该这样做 .

    • 这也应该是视频库的一部分 .

    我知道一个名为Processing的头顶音频/视频库可能会满足您的需求,但不是当然 . 它确实有一个android sdk . OpenCV将是另一个,但仅用于视频/图像处理,我不确定't used it directly with Java so I'不确定它是多么容易使用 .

    对于你如何'd actually go about implementing this along with flutter... you'需要使用Platform Channels . 我在评论中提到了他们你的另一个答案,但想你可以自己看一下 . 该文档确实能够更好地解释其工作方式以及如何设置它 . 但TLDR本质上就是它们允许你做的是从本机代码(java / kotlin / swift等)发送序列化数据到flutter代码(dart),反之亦然,它被转换成目标中的类似数据结构语言 . 您可以设置数据流的各种'channels',并在这些通道中设置'methods',它们在任一端被调用,或者只是来回发送事件 .

    我在开始时提到的复杂性是,在颤动和飞镖之间来回传送图像并不能获得从java到dart的平滑24/30 / 60fps图像,并且可能会减慢其余部分的速度 . 显着地颤动着 . 那么你想要用于实际视口的是Texture,它只是显示来自android端的数据 . 您'll have to figure out how to write to a texture from android yourself, but there'有很多可用的信息 . 控制,音频的可视化等可以直接用从本机检索的数据来完成 .

    你将拥有的本质上是一个用dart / flutter编写的遥控器,它将各种命令发送到音频/视频处理库和Java中的包装代码 .

    如果这听起来很复杂,那就是因为它 . 而且,如果你只是针对Android,我怀疑它是否值得额外的复杂性 .


    与答案没有关系,而是一些友好的建议:

    我还会提到另外一件事 - 我不知道你对编程和不同语言的熟练程度,但是视频/音频处理等通常不是在java中完成,而是在实际的本机代码中完成(即c / c ) . 因此,实际上有两个抽象级别你必须在这里处理(在某种程度上,它可能会被抽象一些或很多,取决于你正在使用的库) - c / c到java和java飞镖 .

    您可能希望删除中间人并更直接地使用本地工作 - 在这种情况下,我建议至少看一下QtJUCE,因为它们可能比您的特定用例更适合 . 还有Kivy(使用python)可能会运行良好,因为's a ton of image/video/audio processing libraries for Python somehow... although they may not all work on android and still have the c++ => python translation to some degree. You' ll必须考虑许可等 - Qt对于大多数Android应用程序有足够广泛的操作系统许可证,但JUCE你'd have to pay for unless you'正在做开源 . 我'd have to recommend Qt slightly more than the others as it actually has native decoding of video frames etc, although you' d可能想要将OpenCV或其他东西用于你正在谈论的更复杂的效果 . 但它可能与简单的java代码编写相同,但是UI风格略有不同,与c库的集成更容易 .

相关问题