[jmsl] Non-static variable feature request
jmsl at music.columbia.edu
jmsl at music.columbia.edu
Fri Jun 20 19:25:46 EDT 2008
Hi all,
I was wondering if it's possible to have parameters that are different
between scores such as
Score.setMeasureNumbersVisible(false);
Score.setStaffNumbersVisible(false);
Score.setTimeSignaturesVisible(false);
Score.setInstrumentNamesVisible(false);
Score.setTempoVisible(false);
be local variables instead.
I think global makes sense for things like Score.setAntiAliasingHints,
but I can think of several scenarios where it might be helpful to be
able to individually turn on/off some of the above parameters.
Certain dialogs might not need time signatures, clefs, instrument
names, etc. and it would be really nice to be able to enable/disable
those individually. Does this hose a lot of things, or is it possible?
Here's a demo.
thanks,
Peter McCulloch
package demos;
import java.awt.Adjustable;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.AdjustmentEvent;
import java.awt.event.AdjustmentListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.DefaultBoundedRangeModel;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollBar;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.SwingConstants;
import com.didkovsky.portview.swing.ViewFactorySwing;
import com.softsynth.jmsl.JMSL;
import com.softsynth.jmsl.score.Clef;
import com.softsynth.jmsl.score.NoteFactory;
import com.softsynth.jmsl.score.Score;
public class NumberingDemo {
/**
* @param args
*/
public static void main(String[] args) {
JMSL.setViewFactory(new ViewFactorySwing());
JFrame frame = new JFrame();
JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
splitPane.setOneTouchExpandable(true);
Score.useSharedCanvas(false);
final Score score1 = new Score(2, 600, 150);
final Score score2 = new Score(4, 600, 450);
// Configure score1
score1.addMeasures(1, 4, 4);
score1.getMeasure(0).getStaff(1).setClef(Clef.BASS_CLEF);
score1.getMeasure(0).getStaff(0).setSpaceBelow(30);
score1.getMeasure(0).getStaff(1).setSpaceAbove(30);
score1.setCurrentMeasureNumber(0);
score1.setCurrentStaffNumber(0);
score1.addNote(NoteFactory.makeNote(4., 63, 1, 0.8));
score1.getLastAddedNote().addInterval(70.);
score1.getLastAddedNote().addInterval(76.);
score1.getLastAddedNote().addInterval(78.);
score1.setCurrentStaffNumber(1);
score1.addNote(NoteFactory.makeNote(4., 36, 1, 0.8));
score1.getLastAddedNote().addInterval(49);
// Configure score2
score2.addMeasures(10, 4, 4);
for (int i = 0; i < score2.size(); i++) {
score2.getMeasure(i).getStaff(1).setClef(Clef.BASS_CLEF);
score2.getMeasure(i).getStaff(3).setClef(Clef.BASS_CLEF);
}
JPanel panel1 = new JPanel();
panel1.setLayout(new BorderLayout());
JLabel chordEditorLabel = new JLabel(" Chord Editor - shouldn't
have instruments, time sigs, etc.");
chordEditorLabel.setPreferredSize(new Dimension(600, 30));
chordEditorLabel.setVerticalAlignment(SwingConstants.CENTER);
panel1.add(chordEditorLabel, BorderLayout.NORTH);
panel1.add(new JScrollPane(score1.getScoreCanvas().getComponent()),
BorderLayout.CENTER);
JPanel panel2 = new JPanel();
panel2.setLayout(new BorderLayout());
JLabel scoreLabel = new JLabel(" Score for two pianos - should have
instruments, time sigs, etc.");
scoreLabel.setPreferredSize(new Dimension(600, 30));
panel2.add(scoreLabel, BorderLayout.NORTH);
panel2.add(new JScrollPane(score2.getScoreCanvas().getComponent()),
BorderLayout.CENTER);
JScrollBar slider = new JScrollBar(Adjustable.HORIZONTAL);
slider.setModel(new DefaultBoundedRangeModel(0, 1, 0, score2.size()
- 1));
slider.addAdjustmentListener(new AdjustmentListener() {
@Override
public void adjustmentValueChanged(AdjustmentEvent e) {
score2.render(((JScrollBar) e.getSource()).getModel().getValue());
}
});
panel2.add(slider, BorderLayout.SOUTH);
splitPane.add(panel1);
splitPane.add(panel2);
frame.getContentPane().add(splitPane);
// Score.setMeasureNumbersVisible(false);
// Score.setStaffNumbersVisible(false);
// Appropriate for top one, but not for bottom one
Score.setTimeSignaturesVisible(false);
Score.setInstrumentNamesVisible(false);
frame.addWindowStateListener(new WindowAdapter() {
@Override
public void windowClosed(WindowEvent e) {
JMSL.closeMusicDevices();
System.exit(0);
}
});
frame.pack();
frame.setVisible(true);
}
}
More information about the jmsl
mailing list