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