我不太清楚如何准确地解释我要实现的东西。我需要追踪mp3文件中某些频率强度在一定次数内的变化,在Android(Java)上(或如果可能在Dart(Flutter)上)。下面是一张解释图片:
我使用Blender制作了这张截图,使用的是Bake Sound to f-Curve Modifier,这正是我要实现的内容,但它是用C++编写的,所以我尝试从源代码中获取一些线索,但我找不到任何有用的信息。
如您所见,它不是实时的,而是一个特定频率(这种情况下是80-255Hz的频率范围)在一段时间内的值。
放大版本 您可以看到它只是一个表明该频率随时间变化的强度图形。在本例中,X轴上的“divisions”大约为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 song in units as small as possible, for example, milliseconds or nanoseconds
for(int v = 0, v < number_of_frames; v++){
double currFrame = lenght/300 * v;
double intensity = get_intensity(currFrame, freq_low, freq_high) //How Could I do this??
result.add(intensity);
}
return result;
}
我该如何做到这一点?
这是可能的吗?如果可能,安卓系统也能实现吗?