首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java中信号随时间变化的幅度

Java中信号随时间变化的幅度
EN

Stack Overflow用户
提问于 2010-04-12 04:09:47
回答 4查看 5.2K关注 0票数 3

为了解决一个棘手的问题(至少对我来说),我绞尽脑汁。

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

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

有人知道怎么做吗?有没有我可以信赖的好教程?因为我对Java知之甚少,所以我希望有人能帮助我。

更新:

基本上我想要的是相对于时间的振幅,而不是频率。音频信号应该在时域中观看(垂直轴是振幅,水平轴是时间)。

EN

回答 4

Stack Overflow用户

发布于 2010-04-28 02:56:00

基本方法是这样的:

  1. 收集您要显示的音频数据。这可以是原始音频样本,也可以是在x轴上提供缩放的处理结果(例如,对N个样本进行平均,或每隔N个样本取一次)。(如果不缩放,您将需要48000像素才能显示1秒的音频。)
  2. 给定此样本数组,您必须将其转换为时长曲线。首先,您可以创建一个新的画图并覆盖JPanel方法来绘制绘图。

例如。

代码语言:javascript
复制
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事件线程上进行)。

祝好运!

票数 3
EN

Stack Overflow用户

发布于 2010-04-12 04:15:17

频谱分析仪基于Fast Fourier Transforms。你应该好好读一读这些东西。它们将信号从时域转换到频域。

那么你想要的是时间还是频率呢?

票数 1
EN

Stack Overflow用户

发布于 2010-04-12 04:15:43

转义- http://sourceforge.net/projects/fscape/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2618517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档