Fab*_*zio 5 java audio android dart flutter
我真的不知道如何解释我所实现的确切目标。我需要在 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 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;
}
Run Code Online (Sandbox Code Playgroud)
我怎么能这样做呢?
那可能吗?如果是的话,安卓也可以吗?
小智 2
离散傅里叶变换(FFT 是最常用的算法)正是您所需要的,因为它将您的时域样本映射到频域。假设您拥有一段时间内的声音样本以及采样的频率,您将能够实现您的目标,是否实时并不重要。
第二步是处理 FFT 的结果,这将产生样本中存在的频率的幅度。
尝试 Github 基于 Java 的 FFT 实现https://github.com/search?q=java+fft,您可能还会在那里找到一些示例。
归档时间: |
|
查看次数: |
2236 次 |
最近记录: |