/*
* Musical Skill Coach - An interactive midi device friendly program to help music students improve their skills
* Copyright (C) 2011 Paul-Emile Gaudet
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package music.ui.panels;
import javax.swing.*;
import music.ui.images.TrebleClefImage;
import music.ui.lib.Bar;
import music.ui.lib.FiveStaff;
import music.ui.lib.MusicCanvas;
import music.ui.lib.MusicTime;
import music.ui.lib.Note;
import music.ui.lib.TimingCurve;
public class Timing extends JPanel
{
/**
*
*/
private static final long serialVersionUID = 1L;
protected JTextField keepFrames;
protected JPanel segmentPane;
protected FiveStaff staff;
protected TimingCurve timingCurve;
protected MusicCanvas musicCanvas;
protected boolean processEvent;
protected TrebleClefImage tcImage;
public Timing()
{
super();
setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
add(musicCanvas = new MusicCanvas());
staff = new FiveStaff();
tcImage = new TrebleClefImage();
timingCurve = new TimingCurve();
timingCurve.setDescent(150);
musicCanvas.setTopStaff(staff);
musicCanvas.setTimingCurve(timingCurve);
musicCanvas.setTopClef(tcImage);
staff.setDescent(50);
processEvent = true;
}
public void removeNotes()
{
musicCanvas.removeNotes();
}
public void addMusicTime(int top, int bottom)
{
musicCanvas.setMusicTime(new MusicTime(top, bottom));
}
public void addNote(Bar bar, int note, int randomNo, int noteType)
{
if ((noteType != 1) && (noteType != 2) && (noteType != 4) && (noteType != 8))
return;
if (noteType > 4)
{
timingCurve.setEigthDisplay(true);
}
Note n = new Note(1);
n.setMidiNote(note, noteType, randomNo);
if (bar == null)
musicCanvas.addNote(n, false);
else
bar.addNote(n);
}
public Bar addBar()
{
Bar bar = new Bar();
musicCanvas.addBar(bar);
return bar;
}
public void addTiming(double timingRatio, int force)
{
if (force == 0)
return;
int bin = ((int)(TimingCurve.TIMING_BINS * timingRatio) + (TimingCurve.TIMING_BINS / 2)) % TimingCurve.TIMING_BINS;
timingCurve.addToBin(bin);
invalidate();
repaint();
}
}