Библиотека предоставляет функцию 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);
}
}