java - Flutter/Java Plot Mp3 频率强度

标签 java android audio dart flutter

我真的不知道如何准确解释我正在取得的成就。我需要在 android (Java) 上(或者如果可能在 Dart (Flutter) 上) 跟踪 mp3 文件中特定频率的强度一定次数。这是一张解释我的意思的图片:

我在 Blender 中使用 Bake Sound to f-Curve Modifier 制作了这张截图,这正是我想要实现的,但它是用 C++ 编写的,所以我做的第一件事就是尝试从源代码中获得一些提示,但我找不到任何东西。

如您所见,它不是实时的,而是某个频率(本例中的频率范围:80-255Hz)随时间变化的值

放大版 如您所见,它只是该频率强度随时间变化的图表。 在这种情况下,X 轴上的“分区”约为 180 秒/600 帧。

关于文件格式: 输入文件为 mp3 或 wav。

有关语言的内容:

我的主要目标是在 java 中实现这一点,但如果可能的话,最好在 Flutter 中完成(所以 Dart)。我问的是两者之一。如果 Flutter 不可能或太难,Java 实现无论如何都很好,我正在使用应用程序上已有的平台 channel ,所以这不是什么大问题。

我在网上查找过,但我能找到的唯一教程是使用 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;

}

我该怎么做?

这可能吗?如果是,在 android 中也可以吗?

最佳答案

离散傅里叶变换(FFT 是最常用的算法)正是您所需要的,因为它将您的时域样本映射到频域。假设您有一段时间内的声音样本和这些样本的频率,您将能够实现您的目标,是否实时并不重要。

第二步是处理 FFT 结果,这将产生样本中存在的频率的幅度。

尝试基于 Java 的 FFT 实现的 Github https://github.com/search?q=java+fft您可能还会在那里找到一些示例。

关于java - Flutter/Java Plot Mp3 频率强度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52105609/

相关文章:

java - 带有泛型和 Mockito 的 ClassCastException

android - 检测android中的用户 Activity

java - NullPointerException - 尝试调用虚拟方法 `notifyDataSetChanged()`

html - 为<audio>标签传递身份验证 token

audio - 给定使用的SoundFont,是否可以尽可能准确地将音频分解为MIDI?

windows - 无法使用Windows Media编码器设置默认音频设备

java - 在 R 中读取 XLSX 文件时出错

java - Android 中的 OpenNLP 获取无效格式输入流

javascript - JavaFX WebView 不加载 jar 中的上层文件夹脚本

android - 在eclipse中为Android Samsung SDK搭建开发环境