【发布时间】:2020-03-12 21:53:47
【问题描述】:
我必须用 Java 编写一个程序,它使用 StdAudio 和 Picture 在声音文件播放时创建二维颜色可视化,但我不确定如何。
谁能告诉我我需要做的一切,或者告诉我需要做什么来“转换”声音文件以便它可以被图片读取?
我可以从声音文件中获取样本并将它们作为双精度数组返回,但是那怎么会创建图像呢?这些值怎么可能与图像同步?
我一直在 Eclipse 中玩耍,只是想弄清楚它是如何工作的,但我的代码最终变得一团糟。
private final static int SAMPLE_RATE = 44100;
private static int WIDTH = 500;
private static int HEIGHT = 100;
private static JFrame frame;
private static Picture pic;
public static void main(String[] args) throws IOException
{
pic = new Picture(WIDTH, HEIGHT); // <- blank black image
String audioFile = "SampleTest2.wav";
double[] audio = StdAudio.read(audioFile);
frame = new JFrame();
frame.setContentPane(pic.getJLabel());
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.setTitle("Sound Visualization");
frame.setResizable(false);
frame.pack();
frame.setVisible(true);
for (int k = 0; k < audio.length; k++)
StdAudio.play(audio[k]);
for (int i = 0; i < pic.width(); i ++)
{
for (int j = 0; j < pic.height(); j++)
{
pic.set(i, j, toColor(audio[SAMPLE_RATE + i]));
//frame.setContentPane(pic.getJLabel());
}
frame.repaint();
}
}
private static Color toColor(double colVal)
{
int r = (int) (((colVal + 1) / 2) * 255);
int g = (int) (((colVal + 1) / 2) * 255);
int b = (int) (((colVal + 1) / 2) * 255);
return new Color(r, g, b);
}
【问题讨论】:
标签: java image-processing audio visualization javasound