be.tarsos.dsp.ui.LinkedFrame Maven / Gradle / Ivy
/*
* _______ _____ _____ _____
* |__ __| | __ \ / ____| __ \
* | | __ _ _ __ ___ ___ ___| | | | (___ | |__) |
* | |/ _` | '__/ __|/ _ \/ __| | | |\___ \| ___/
* | | (_| | | \__ \ (_) \__ \ |__| |____) | |
* |_|\__,_|_| |___/\___/|___/_____/|_____/|_|
*
* -------------------------------------------------------------
*
* TarsosDSP is developed by Joren Six at IPEM, University Ghent
*
* -------------------------------------------------------------
*
* Info: http://0110.be/tag/TarsosDSP
* Github: https://github.com/JorenSix/TarsosDSP
* Releases: http://0110.be/releases/TarsosDSP/
*
* TarsosDSP includes modified source code by various authors,
* for credits and info, see README.
*
*/
package be.tarsos.dsp.ui;
import java.awt.Color;
import java.awt.Dimension;
import java.io.File;
import java.util.HashMap;
import javax.swing.JFrame;
import javax.swing.JSplitPane;
import be.tarsos.dsp.ui.ViewPort.ViewPortChangedListener;
import be.tarsos.dsp.ui.layers.AmplitudeAxisLayer;
import be.tarsos.dsp.ui.layers.BackgroundLayer;
import be.tarsos.dsp.ui.layers.BeatLayer;
import be.tarsos.dsp.ui.layers.ConstantQLayer;
import be.tarsos.dsp.ui.layers.DragMouseListenerLayer;
import be.tarsos.dsp.ui.layers.LegendLayer;
import be.tarsos.dsp.ui.layers.PitchContourLayer;
import be.tarsos.dsp.ui.layers.SelectionLayer;
import be.tarsos.dsp.ui.layers.TimeAxisLayer;
import be.tarsos.dsp.ui.layers.VerticalFrequencyAxisLayer;
import be.tarsos.dsp.ui.layers.WaveFormLayer;
import be.tarsos.dsp.ui.layers.ZoomMouseListenerLayer;
import be.tarsos.dsp.ui.layers.pch.PitchClassHistogramLayer;
import be.tarsos.dsp.ui.layers.pch.ScaleLayer;
public class LinkedFrame extends JFrame implements ViewPortChangedListener {
private JSplitPane lastSplitPane;
private static final long serialVersionUID = 7301610309790983406L;
private static LinkedFrame instance;
private static HashMap panels;
private boolean drawing = false;
public static void main(String... strings) {
LinkedFrame.getInstance();
}
protected JSplitPane getLastSplitPane(){
return this.lastSplitPane;
}
private LinkedFrame() {
super();
panels = new HashMap();
}
public static LinkedFrame getInstance() {
if (instance == null) {
instance = new LinkedFrame();
instance.initialise();
}
return instance;
}
public void initialise() {
this.setMinimumSize(new Dimension(800, 400));
JSplitPane contentPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
this.lastSplitPane = contentPane;
this.setContentPane(contentPane);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
contentPane.setDividerLocation(0);
buildStdSetUp();
setVisible(true);
}
public void createNewSplitPane() {
lastSplitPane.setDividerSize(2);
JSplitPane sp = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
sp.setDividerSize(0);
lastSplitPane.add(sp, JSplitPane.BOTTOM);
lastSplitPane = sp;
}
public void viewPortChanged(ViewPort newViewPort) {
if (!drawing) {
drawing = true;
for (LinkedPanel panel : panels.values()) {
panel.repaint();
}
drawing = false;
}
}
private CoordinateSystem getCoordinateSystem(AxisUnit yUnits) {
float minValue = -1000;
float maxValue = 1000;
if(yUnits == AxisUnit.FREQUENCY){
minValue = 200;
maxValue = 8000;
}
return new CoordinateSystem(yUnits, minValue, maxValue);
}
private void buildStdSetUp() {
CoordinateSystem cs = getCoordinateSystem(AxisUnit.AMPLITUDE);
File audioFile = new File("/home/joren/Desktop/08._Ladrang_Kandamanyura_10s-20s.wav");
LinkedPanel panel = new LinkedPanel(cs);
panel.addLayer(new ZoomMouseListenerLayer());
panel.addLayer(new DragMouseListenerLayer(cs));
panel.addLayer(new BackgroundLayer(cs));
panel.addLayer(new AmplitudeAxisLayer(cs));
panel.addLayer(new TimeAxisLayer(cs));
panel.addLayer(new WaveFormLayer(cs, audioFile));
panel.addLayer(new BeatLayer(cs,audioFile,true,true));
panel.addLayer(new SelectionLayer(cs));
LegendLayer legend = new LegendLayer(cs,50);
panel.addLayer(legend);
legend.addEntry("Onsets",Color.BLUE);
legend.addEntry("Beats", Color.RED);
panel.getViewPort().addViewPortChangedListener(this);
LinkedFrame.panels.put("Waveform", panel);
this.lastSplitPane.add(panel, JSplitPane.TOP);
cs = getCoordinateSystem(AxisUnit.FREQUENCY);
panel = new LinkedPanel(cs);
panel.addLayer(new ZoomMouseListenerLayer());
panel.addLayer(new DragMouseListenerLayer(cs));
panel.addLayer(new BackgroundLayer(cs));
panel.addLayer(new ConstantQLayer(cs,audioFile,2048,3600,10800,12));
// panel.addLayer(new FFTLayer(cs,audioFile,2048,512));
panel.addLayer(new PitchContourLayer(cs,audioFile,Color.red,2048,1024));
panel.addLayer(new SelectionLayer(cs));
panel.addLayer(new VerticalFrequencyAxisLayer(cs));
panel.addLayer(new TimeAxisLayer(cs));
panel.getViewPort().addViewPortChangedListener(this);
CoordinateSystem pchCS = new CoordinateSystem(AxisUnit.OCCURENCES, 0, 1000,true);
pchCS.setMin(Axis.X, 0);
pchCS.setMax(Axis.X, 1200);
final LinkedPanel pchPanel = new LinkedPanel(pchCS);
pchPanel.addLayer(new BackgroundLayer(pchCS));
pchPanel.addLayer(new DragMouseListenerLayer(pchCS));
pchPanel.addLayer(new PitchClassHistogramLayer());
pchPanel.addLayer(new ScaleLayer(pchCS,true));
pchPanel.addLayer(new ScaleLayer(pchCS,false));
pchPanel.getViewPort().addViewPortChangedListener(new ViewPortChangedListener() {
boolean painting = false;
@Override
public void viewPortChanged(ViewPort newViewPort) {
if(!painting){
painting = true;
pchPanel.repaint();
painting = false;
}
}
});
this.lastSplitPane.add(pchPanel, JSplitPane.BOTTOM);
LinkedFrame.panels.put("Spectral info", panel);
lastSplitPane.setDividerLocation(0.7);
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy