为了解决棘手的问题,我正绞尽脑汁(至少对我而言)。
播放音频文件(使用Java)时,我希望信号幅度随时间显示。
我的意思是我想实现一个显示一种示波器(频谱分析仪)的小面板。 应在时域中查看音频信号(垂直轴是幅度,水平轴是时间)。
有谁知道怎么做?有一个我可以依赖的好教程吗? 由于我对Java知之甚少,我希望有人可以帮助我。
基本上我想要的是振幅与时间的关系,而不是频率。 应在时域中查看音频信号(垂直轴是幅度,水平轴是时间)。
答案 0 :(得分:3)
基本方法是:
收集您要显示的音频数据。这可以是原始音频样本,或者可以是处理的结果(例如,对N个样本求平均,或者取每个第N个样本)以在x轴上提供缩放。 (如果没有缩放,您将需要48000像素才能显示1秒的音频。)
鉴于此样本数组,您必须将其转换为aplitude-time图。首先,您可以创建一个新的JPanel并覆盖绘制方法以绘制绘图。
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