【问题标题】:How to generate spectrogram image from Deeplearning4J's org.datavec.audio.Spectrogram?如何从 Deeplearning4J 的 org.datavec.audio.Spectrogram 生成频谱图像?
【发布时间】:2018-09-20 12:32:19
【问题描述】:

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

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

我不是在寻找确切的代码:我很感激只是对一般方法的描述。

【问题讨论】:

    标签: java spectrogram deeplearning4j


    【解决方案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);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-20
      • 1970-01-01
      • 2017-09-07
      • 2019-08-14
      • 2012-05-16
      • 2015-04-27
      相关资源
      最近更新 更多