package jmsltestsuite;
import java.util.Vector;

import com.softsynth.jmsl.JMSL;
import com.softsynth.jmsl.MusicShape;
import com.softsynth.jmsl.score.Clef;
import com.softsynth.jmsl.score.Score;
import com.softsynth.jmsl.score.ScoreFrame;
import com.softsynth.jmsl.score.Tempo;
import com.softsynth.jmsl.score.transcribe.BeatDivisionSchemeList;
import com.softsynth.jmsl.score.transcribe.ElementMissedException;
import com.softsynth.jmsl.score.transcribe.SearchPathListExpansionException;
import com.softsynth.jmsl.score.transcribe.TempoTimeSignatureHolder;
import com.softsynth.jmsl.score.transcribe.Transcriber;
import com.softsynth.jmsl.util.TimeSignature;

/** 
JMSL's com.softsynth.jmsl.score.transcribe package enables the transcription of arbitrary MusicShape data into common music notation.

 * 
@author Nick Didkovsky, (c) 2002 Nick Didkovsky, All Rights reserved. */

public class TestTranscribe4 {

	public static void main(String args[]) {
		JMSL.clock.setAdvance(0.1);
		BeatDivisionSchemeList.defaultSetup();

		MusicShape source = new MusicShape(7);
		source.setLimits(6, 0, 2000);
		for (int i = 0; i < 16; i++) {
			source.add(i, 60 + i, 0.5, 0.9, 10 + i, 100 + i, 1000 + i);
		}

		// 2 staves, width, height
		Score score = new Score(2, 1024, 800);
		score.addMeasure();
		score.getMeasure(0).getStaff(1).setClef(Clef.BASS_CLEF);

		Transcriber transcriber = new Transcriber();
		transcriber.setScore(score);
		transcriber.setSourceMusicShape(source);

		Vector tsVector = new Vector();
		tsVector.addElement(new TempoTimeSignatureHolder(new Tempo(120), new TimeSignature(3, 8)));

		transcriber.setTempoTimeSignatures(tsVector);

		try {
			score.setCurrentStaffNumber(0);
			transcriber.transcribe();
		} catch (ElementMissedException e) {
			e.printStackTrace();
			System.out.println("ERROR: " + e);
			System.exit(0);
		} catch (SearchPathListExpansionException e) {
			e.printStackTrace();
			System.out.println("ERROR: " + e);
			System.exit(0);
		}

		final ScoreFrame f = new ScoreFrame();
		f.addScore(score);
	//	f.loadPrefs();
		f.addWindowListener(new java.awt.event.WindowAdapter() {
			public void windowClosing(java.awt.event.WindowEvent e) {
				f.quit();
			}
		});

		f.setVisible(true);

	}

}