Setup and draw spectrograph.
Co-authored-by: sigonasr2 <sigonasr2@gmail.com>
This commit is contained in:
parent
a27cfe7702
commit
43c62688c6
@ -5,17 +5,29 @@ import java.awt.Graphics;
|
|||||||
import java.awt.geom.Rectangle2D;
|
import java.awt.geom.Rectangle2D;
|
||||||
import java.awt.font.FontRenderContext;
|
import java.awt.font.FontRenderContext;
|
||||||
import java.awt.Font;
|
import java.awt.Font;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
import javax.swing.JPanel;
|
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);
|
final Color NOTE_COLOR = new Color(196,116,116);
|
||||||
|
ArrayList<SpectrographBar> spectrograph = new ArrayList<SpectrographBar>();
|
||||||
|
|
||||||
public Canvas(Dimension size) {
|
public Canvas(Dimension size) {
|
||||||
super();
|
super();
|
||||||
this.setSize(size);
|
this.setSize(size);
|
||||||
this.setMinimumSize(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) {
|
public Rectangle2D calculateStringBoundsFont(String msg, Font font) {
|
||||||
FontRenderContext frc = this.getFontMetrics(font).getFontRenderContext();
|
FontRenderContext frc = this.getFontMetrics(font).getFontRenderContext();
|
||||||
return font.getStringBounds(msg, frc);
|
return font.getStringBounds(msg, frc);
|
||||||
@ -36,6 +48,14 @@ public class Canvas extends JPanel{
|
|||||||
if (LLSIG.game!=null) {
|
if (LLSIG.game!=null) {
|
||||||
g.setColor(Color.BLACK);
|
g.setColor(Color.BLACK);
|
||||||
g.fillRect(0,0,this.getWidth(),this.getHeight());
|
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.setColor(Color.WHITE);
|
||||||
g.drawString(Double.toString(LLSIG.game.musicPlayer.getPlayPosition()),0,32);
|
g.drawString(Double.toString(LLSIG.game.musicPlayer.getPlayPosition()),0,32);
|
||||||
if (LLSIG.game.BPM_MEASURE) {
|
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.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.ScheduledThreadPoolExecutor;
|
import java.util.concurrent.ScheduledThreadPoolExecutor;
|
||||||
import java.util.concurrent.TimeUnit;
|
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
import java.nio.file.Paths;
|
import java.nio.file.Paths;
|
||||||
@ -128,6 +127,7 @@ public class LLSIG implements KeyListener{
|
|||||||
while (true) {
|
while (true) {
|
||||||
long startTime = System.nanoTime();
|
long startTime = System.nanoTime();
|
||||||
frameCount++;
|
frameCount++;
|
||||||
|
canvas.update();
|
||||||
if (PLAYING) {
|
if (PLAYING) {
|
||||||
for (BeatTiming bt : timings) {
|
for (BeatTiming bt : timings) {
|
||||||
if (bt.active&&musicPlayer.getPlayPosition()>=bt.offset) {
|
if (bt.active&&musicPlayer.getPlayPosition()>=bt.offset) {
|
||||||
|
34
LLSIG/src/main/java/LLSIG/SpectrographBar.java
Normal file
34
LLSIG/src/main/java/LLSIG/SpectrographBar.java
Normal file
@ -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…
x
Reference in New Issue
Block a user