[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