编程语言
首页 > 编程语言> > Java中信号幅度与时间的关系

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

作者:互联网

为了解决一个棘手的问题,我正在竭尽全力(至少对我来说).

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

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

有人知道怎么做吗?有没有可以依靠的好教程?
由于我对Java知之甚少,所以希望有人可以帮助我.

更新:

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

解决方法:

基本方法是这样的:

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

例如.

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线程上!).

祝好运!

标签:spectrum,audio,java,signals
来源: https://codeday.me/bug/20191106/2000458.html