gpt4 book ai didi

java - 如何从 Deeplearning4J 的 org.datavec.audio.Spectrogram 生成频谱图图像?

转载 作者:太空宇宙 更新时间:2023-11-04 10:10:25 33 4
gpt4 key购买 nike

我正在寻找在 Android 应用程序中生成频谱图图像的方法。我找到了this project它似乎完成了所需的一半工作:它加载音频文件并在给定的时间和频率创建强度的二维数组。然而,现在我有点迷失:如何从这些数据生成人类可见的图片?

据我了解,它将涉及将强度值从 [-1,1] 浮点范围映射到像素颜色。但作为音频处理领域的菜鸟,我不知道其他应用程序是如何做到这一点的。

我不是在寻找确切的代码:我希望仅了解一般方法的描述。

最佳答案

该库提供了函数 public double[][] getNormalizedSpectrogramData() 来返回音频频谱图数据,该数据是归一化的数字数据(介于 0 和 之间)。

返回值第一个索引是样本数,第二个索引是频率范围值(我可能不正确,欢迎更正!)。

有很多方法可以显示它,我在 JavaFX 中创建了一个工作示例:

import javafx.event.ActionEvent;
import javafx.scene.image.ImageView;
import javafx.scene.image.PixelWriter;
import javafx.scene.image.WritableImage;
import javafx.scene.paint.Color;
import org.datavec.audio.Wave;
import org.datavec.audio.extension.*;

import java.io.InputStream;

public class Controller {
public ImageView imgDisplay;

public void loadMusic(ActionEvent actionEvent) {
InputStream is = getClass().getResourceAsStream("/sounds/oxp.wav");
Wave wave = new Wave(is);
Spectrogram sptr = new Spectrogram(wave);

double[][] spData = sptr.getNormalizedSpectrogramData();
WritableImage resImg = new WritableImage(spData.length,spData[0].length);
PixelWriter pxWr = resImg.getPixelWriter();

int x = 0, y = 0;
for(double[] col : spData) /* or row?! */
{
y = 0;
for(double item : col)
{
resImg.getPixelWriter().setColor(x,y, Color.rgb((int)(item * 255),(int)(item * 255),(int)(item * 255)));
y++;
}
x++;
}

System.out.println("Done! Image size is: " + x + "," + y);
imgDisplay.setFitWidth(x);
imgDisplay.setFitHeight(y);
imgDisplay.setImage(resImg);
}
}

关于java - 如何从 Deeplearning4J 的 org.datavec.audio.Spectrogram 生成频谱图图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52425268/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com