Java 如何正确使用最小/最大算法绘制波形?(就像无畏一样)

Java 如何正确使用最小/最大算法绘制波形?(就像无畏一样),java,algorithm,libgdx,mp3,waveform,Java,Algorithm,Libgdx,Mp3,Waveform,我试图用audacity使用的最小/最大算法从.mp3音频流中绘制波形。该算法从一块样本中计算最小值和最大值,并在两点之间画一条垂直线。我可以用这种方法画出波形,几乎是正确的,但是有一些错误。这是一张图片: 如您所见,开始时波形正确地绘制了自身,但随后“空白”开始出现,就像我避免绘制一些线条一样。我在代码中找不到错误,请过来寻求帮助!。代码如下: /** * * */ 私有void createWaveform(){ //将包含音频中所有块的数组 数组块=新数组(); //样本中音频的长度 i

我试图用audacity使用的最小/最大算法从.mp3音频流中绘制波形。该算法从一块样本中计算最小值和最大值,并在两点之间画一条垂直线。我可以用这种方法画出波形,几乎是正确的,但是有一些错误。这是一张图片:

如您所见,开始时波形正确地绘制了自身,但随后“空白”开始出现,就像我避免绘制一些线条一样。我在代码中找不到错误,请过来寻求帮助!。代码如下:

/**
*
* */
私有void createWaveform(){
//将包含音频中所有块的数组
数组块=新数组();
//样本中音频的长度
int length=audio.getLengthinsSamples();
//每像素的采样量。w=屏幕宽度
采样每像素=长度/(int)w;
//获取所有样本
float[]samples=audio.getSamples();
//这很奇怪,但将样本分成了几块。我找不到其他方法,欢迎更好的选择
int max=每像素采样数;
int n=0;
对于(int i=0;i对于(int i=0;i如果有人试图在java中用Libgdx实现相同的算法,我找到了一个解决方案。不要使用ShaperEnder,而是使用Pixmaps和bug dissapear。如果您只使用java,请不要担心,第一篇文章中的算法很好,您只需要调整一些东西,因为您可能使用的是swing或一些ot她的图形库,但逻辑是相同的。最终结果:

我正在使用java和libgdx