通常当我创建一个自定义类时,我可以创建一个使用该类作为参数的函数,例如:
class Sphere{
double calculateRadius() {return 40.0;}
}
Run Code Online (Sandbox Code Playgroud)
所以我可以调用Sphere.calculateRadius()。
但是对于预先存在的类,例如 String 类,这是无法做到的。例如。我试过做这样的事情:
String.createFrom(String s){return "new";}
Run Code Online (Sandbox Code Playgroud)
但它不起作用(Android Studio 甚至不让我编译。)。
这可能吗,如果可能,我怎么能在 Dart 中做到这一点?如果我创建了它,我将如何访问我从中调用该方法的对象?(示例中的字符串)
此问题的目的是找到显示图库中大量图像(20 或更多)的最佳方式。我需要在设备上显示所有照片。正如您所看到的,可能会显示很多图像,当我尝试使用不同的 Image.file() 小部件显示所有图像时,我的手机 (LG G2) 变慢,然后应用程序完全崩溃。
我认为问题是我在 5 年旧设备上加载大量 4K 图像(超过 100 张)。屏幕上实际同时显示的图像实际上大约是 15 个,但我需要有一个类似画廊的东西,所以所有图像都在 GridView 中。
所以,我不认为这是最好的选择,也许有一个功能可以将图像缩小到 100x100 像素。但在网上查找我找不到任何东西。那么,有没有更好的办法呢?
我使用 Android 平台通道获取所有图像路径及其文件夹。
我将它们全部放在这样的列表中:[[“Camera”,“storage/emulated/0/downloads/1.png”]等]
屏幕上有三个主要组件,带有两个箭头的图标按钮:DropDownMenu 和 GridView。
IconButton 重新查询来自 android 的所有路径。在上述列表中。下拉菜单在 onChanged 上有一个函数,它创建 gridView 使用的列表中的所有卡片。
这是功能:
void _onChanged(String value) {
setState(() {
_currFolder = value;
_photoCards = calculatePhotoCards();
});
}
Run Code Online (Sandbox Code Playgroud)
计算照片卡是这样的:
List<Widget> calculatePhotoCards() {
List<Widget> list = new List();
for (int v = 0; v < _foldersAndPaths.length; v++) {
if (_foldersAndPaths[v][0] == _currFolder) {
list.add(Card(
color: Colors.white,
shape: …Run Code Online (Sandbox Code Playgroud) 由于我对这个问题没有答案,也没有太多反馈:Android Flutter Analyze Audio Waveform 并且在网上找不到任何关于我正在寻找的内容,我只会问一个更广泛的问题,因为对该答案的评论告诉我使用原生代码并使用平台通道将其连接到颤振,但是当我询问一些说明时,我什么也没得到。
所以我的问题是如果我可以在 Java 中进行操作(它已经存在了很长时间,因此有更大的文档),然后在 Flutter 中使用结果。
更准确地说,我可以在 Java 和 Flutter 中做这些事情吗:
1) 分析Audio波形,找出特定频率的峰值点,并使用时间戳以flutter显示;
编辑 1: 什么是峰值?
这是不同频率范围的波形(橙色的是低音(80-255Hz)),黑色圈出的点是峰值点。我应该分析一首歌的音频频谱并找到某些频率的峰值点。然后当我找到峰值时,我需要保存时间戳,例如,16 秒等等。
2)编辑2:我需要编辑视频中的一些照片,比如视频拼贴,30或60fps视频的每一帧都是一个图像。
3) 编辑 3:我需要为视频添加基本的特定于帧的效果,例如会改变帧到帧的模糊或眩光。
4) 向该视频添加音乐并将其保存为 mp4 或 avi 或任何格式。
5) Edit 4: 最重要的事情,我不想这一切都是实时的,而更像是一个 After Effect 像 Render 过程,其中所有帧都一起渲染。唯一会好的是一种进度条,告诉用户渲染在帧上,例如,300 个中的 200 个,但我不想显示任何帧或视频,只是为了渲染它在后台,然后将其保存为 mp4 视频,之后可以查看。
正如你所看到的,用一种语言来做是一个困难的过程,由于它的早期状态,你很难找到关于如何播放音乐的教程。但是 Flutter 中的 UI 和其他一些东西更容易做到,而且 Flutter 也是多平台的。所以我更喜欢坚持使用 Flutter 语言。
编辑 5:我查看了 Qt 和 JUCE,发现 Qt 似乎是一个有效的替代方案,但它似乎更像是一个“封闭”系统,我的意思是,例如,我查看了多媒体库,但对于我来说你知道,你可以做一些基本的事情,例如播放视频,但不能拼贴帧并保存它。(不知道我自己解释的好不好)。JUCE 另一方面,看起来更好,但它似乎更适合 PC 音频 VST,而不是包括视频渲染在内的移动应用程序。另一件事是,这两个不像 Flutter 那样免费和开源。
然后是 Kivy,它可能是最好的,也不可能是最好的,因为它是用于移动设备的 Python 端口,而且我对 Python 有很多经验而且我认为它是一种更容易学习的语言,但另一方面,它没有那么多的 UI 功能。正如您所提到的,在 …
我真的不知道如何解释我所实现的确切目标。我需要在 android (Java) 上追踪 mp3 文件中某些频率的强度一定次数(或者如果可以在 Dart (Flutter) 上实现)。这是一张解释我的意思的图片:
我在 Blender 中使用Bake Sound to f-Curve Modifier制作了这个屏幕截图,这正是我想要实现的目标,但它是用 C++ 编写的,所以我做的第一件事是尝试从源代码中获取一些提示,但我找不到任何东西。
正如您所看到的,它不是实时的,而是特定频率(本例中的频率范围:80-255Hz)随时间变化的值。
缩放版本
正如您所看到的,它只是该频率强度随时间变化的图表。本例中 X 轴上的“分区”约为 180 秒/600 帧。
关于文件格式:输入文件是 mp3 或 wav。
对于与语言有关的内容:
我的主要目标是在 java 中实现这一点,但如果可能的话,在 Flutter(因此 Dart)中完成会很好。我问的是两者之一。如果 Flutter 不可能或太困难,那么 java 实现无论如何都很好,我正在使用应用程序上已有的平台通道,所以这不是什么大问题。
我在网上查找过,但我能找到的唯一教程是使用 FFT 的实时示例。
更好地解释我需要什么: 我有很多帧:假设有 300 个。我需要一个如下所示的函数:
List<Integer> calculateFrequencies(int number_of_frames, double freq_low,
freq_high, String FilePath){
List<Integer> result = new ArrayList<>();
double length = //Here I need to obtain the length of the …Run Code Online (Sandbox Code Playgroud) 当我运行一个应用程序,其中在容器上绘制了包裹在 Positioned 中的图标时,我收到一条错误消息,指出偏移量(Positioned 的left)使用 NaN 值。我上网查了一下,发现NaN的意思是Not a Number,但是我找不到是什么原因造成的。我的意思是,如果我将一个数字除以零,我会得到一个错误,说我不能将一个数字除以零,但根据我的理解,NaN 是一个常量,如果我乘以一个数字,我们可以说对于一个字符串我' d 得到不兼容类型错误,而不是 NaN。我并不是要求特定于我的代码的答案,因为我无法提供它,而是要求更一般的解释。
我正在尝试在 Cython 中循环 2 个 2d 数组。数组具有以下形状:
ranges_1是 的 6000x3 数组int64,而ranges_2是 的 2000x2 数组int64。这个迭代需要执行10000次左右。这意味着嵌套 for 循环内的计算总数约为 2000x6000x10000 = 1200 亿次。
这是我用来生成“虚拟”数据的代码:
import numpy as np
ranges_1 = np.stack([np.random.randint(0, 10_000, 6_000), np.random.randint(0, 10_000, 6_000), np.arange(0, 6_000)], axis=1)
ranges_2 = np.stack([np.random.randint(0, 10_000, 2_000), np.random.randint(0, 10_000, 2_000)], axis=1)
Run Code Online (Sandbox Code Playgroud)
这给出了 2 个像这样的数组:
array([[6131, 1478, 0],
[9317, 7263, 1],
[7938, 6249, 2],
...,
[5153, 426, 5997],
[9164, 9211, 5998],
[1695, 1792, 5999]])
Run Code Online (Sandbox Code Playgroud)
和:
array([[ 433, 558],
[3420, 2494], …Run Code Online (Sandbox Code Playgroud)