Setup and draw spectrograph.

Co-authored-by: sigonasr2 <sigonasr2@gmail.com>
main
Nic0Nic0Nii 3 years ago
parent a27cfe7702
commit 43c62688c6
  1. 35
      LLSIG/src/main/java/LLSIG/Canvas.java
  2. 2
      LLSIG/src/main/java/LLSIG/LLSIG.java
  3. 34
      LLSIG/src/main/java/LLSIG/SpectrographBar.java

@ -5,17 +5,29 @@ import java.awt.Graphics;
import java.awt.geom.Rectangle2D;
import java.awt.font.FontRenderContext;
import java.awt.Font;
import java.util.ArrayList;
import javax.swing.JPanel;
public class Canvas extends JPanel{
import javafx.scene.media.AudioSpectrumListener;
public class Canvas extends JPanel implements AudioSpectrumListener{
final Color NOTE_COLOR = new Color(196,116,116);
ArrayList<SpectrographBar> spectrograph = new ArrayList<SpectrographBar>();
public Canvas(Dimension size) {
super();
this.setSize(size);
this.setMinimumSize(size);
}
public void update() {
for (int i=0;i<spectrograph.size();i++) {
SpectrographBar sb = spectrograph.get(i);
sb.update();
}
}
public Rectangle2D calculateStringBoundsFont(String msg, Font font) {
FontRenderContext frc = this.getFontMetrics(font).getFontRenderContext();
return font.getStringBounds(msg, frc);
@ -36,6 +48,14 @@ public class Canvas extends JPanel{
if (LLSIG.game!=null) {
g.setColor(Color.BLACK);
g.fillRect(0,0,this.getWidth(),this.getHeight());
final int SPECTROBAR_SIZE = this.getWidth()/spectrograph.size();
for (int i=0;i<spectrograph.size();i++) {
SpectrographBar sb = spectrograph.get(i);
sb.draw(g,SPECTROBAR_SIZE*i,SPECTROBAR_SIZE,this.getHeight());
}
g.setColor(Color.WHITE);
g.drawString(Double.toString(LLSIG.game.musicPlayer.getPlayPosition()),0,32);
if (LLSIG.game.BPM_MEASURE) {
@ -113,4 +133,17 @@ public class Canvas extends JPanel{
}
}
}
@Override
public void spectrumDataUpdate(double timestamp, double duration, float[] magnitudes, float[] phases) {
if (spectrograph.size()!=magnitudes.length) {
spectrograph.clear();
for (float f : magnitudes) {
spectrograph.add(new SpectrographBar(f));
}
} else {
for (int i=0;i<magnitudes.length;i++) {
spectrograph.get(i).update(magnitudes[i]);
}
}
}
}

@ -8,7 +8,6 @@ import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.util.regex.Pattern;
import java.nio.file.Paths;
@ -128,6 +127,7 @@ public class LLSIG implements KeyListener{
while (true) {
long startTime = System.nanoTime();
frameCount++;
canvas.update();
if (PLAYING) {
for (BeatTiming bt : timings) {
if (bt.active&&musicPlayer.getPlayPosition()>=bt.offset) {

@ -0,0 +1,34 @@
package main.java.LLSIG;
import java.awt.Graphics;
import java.awt.Color;
public class SpectrographBar {
final float NO_UPDATE = 999f;
float current_magnitude = 0.0f;
SpectrographBar() {
this(0f);
}
SpectrographBar(float magnitude) {
update(magnitude);
}
public void update() {
update(NO_UPDATE);
}
public void update(float value) {
if (value!=NO_UPDATE) {
if (Math.abs(current_magnitude)>0.3f) {
current_magnitude/=1.01f;
} else {
current_magnitude=0;
}
} else {
current_magnitude=value;
}
}
public void draw(Graphics g,int x,int w,int h) {
int colVal = (int)((Math.abs(current_magnitude)/60d)*255);
g.setColor(new Color(colVal,colVal,colVal,colVal));
g.fillRect(x,0,w,h);
}
}
Loading…
Cancel
Save