在Java中信号幅度与时间的关系

时间:2010-04-11 20:09:47

标签: java audio signals spectrum

为了解决棘手的问题,我正绞尽脑汁(至少对我而言)。

播放音频文件(使用Java)时,我希望信号幅度随时间显示。

我的意思是我想实现一个显示一种示波器(频谱分析仪)的小面板。 应在时域中查看音频信号(垂直轴是幅度,水平轴是时间)。

有谁知道怎么做?有一个我可以依赖的好教程吗? 由于我对Java知之甚少,我希望有人可以帮助我。

更新

基本上我想要的是振幅与时间的关系,而不是频率。 应在时域中查看音频信号(垂直轴是幅度,水平轴是时间)。

4 个答案:

答案 0 :(得分:3)

基本方法是:

  1. 收集您要显示的音频数据。这可以是原始音频样本,或者可以是处理的结果(例如,对N个样本求平均,或者取每个第N个样本)以在x轴上提供缩放。 (如果没有缩放,您将需要48000像素才能显示1秒的音频。)

  2. 鉴于此样本数组,您必须将其转换为aplitude-time图。首先,您可以创建一个新的JPanel并覆盖绘制方法以绘制绘​​图。

  3. E.g。

    public void paint(Graphics g)
    {
       short[] samples;  // the samples to render - get this from step 1.
    
       int height = getHeight();
       int middle = height/2;
    
       for (int i=0; i<samples.length; i++)
       {
          int sample = samples[i];
          int amplitude = sample*middle;
          g.drawLine(i, middle+amplitide, i, middle-amplitude); 
       }  
    }
    

    这将在您的组件中绘制幅度 - 时间图。它将与组件一样高,并且与样本数量一样宽。

    要获得动画,你经常将一个新的short []数组放入组件中并调用repaint()(当然,在Swing Event线程上全部!)。

    祝你好运!

答案 1 :(得分:1)

频谱分析仪基于Fast Fourier Transforms。你会很好地阅读这些内容。它们将信号从时域转换到频域。

你想要的时间或频率是什么?

答案 2 :(得分:0)

答案 3 :(得分:0)

这是一个非常酷的教程,可以解答您的大部分问题: Digital Signal Processing and Fast Fourier Transform in Java