package jmsltestsuite;
import java.util.Vector;

import com.softsynth.jmsl.JMSL;
import com.softsynth.jmsl.MusicShape;
import com.softsynth.jmsl.score.Score;
import com.softsynth.jmsl.score.ScoreFrame;
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.Transcriber;
import com.softsynth.jmsl.util.TimeSignature;
//import com.softsynth.jmsl.util.*;

/** 
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 TestTranscribe2 {

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

		MusicShape MusicShape_4 = new MusicShape(4);
		MusicShape_4.setDimensionName(0, "duration");
		MusicShape_4.setDimensionName(1, "pitch");
		MusicShape_4.setDimensionName(2, "amplitude");
		MusicShape_4.setDimensionName(3, "hold");

		double time = 0;
		double dur;
		for (int i = 0; i < 9; i++) {
			dur = 1.0 / 9;
			MusicShape_4.add(time, 60 + i, 0.5, dur * 0.9);
			time += dur;
		}
		for (int i = 0; i < 9; i++) {
			dur = 2.0 / 9;
			MusicShape_4.add(time, 60 + i, 0.5, dur * 0.9);
			time += dur;
		}
		for (int i = 0; i < 11; i++) {
			dur = 1.0 / 11;
			MusicShape_4.add(time, 60 + i, 0.5, dur * 0.9);
			time += dur;
		}

		for (int i = 0; i < 11; i++) {
			dur = 2.0 / 11;
			MusicShape_4.add(time, 60 + i, 0.5, dur * 0.9);
			time += dur;
		}

		for (int i = 0; i < 13; i++) {
			dur = 2.0 / 13;
			MusicShape_4.add(time, 60 + i, 0.5, dur * 0.9);
			time += dur;
		}

		for (int i = 0; i < 26; i++) {
			dur = 1.0 / 13;
			MusicShape_4.add(time, 60 + i, 0.5, dur * 0.9);
			time += dur;
		}

		for (int i = 0; i < 14; i++) {
			dur = 1.0 / 7;
			MusicShape_4.add(time, 60 + i, 0.5, dur * 0.9);
			time += dur;
		}

		for (int i = 0; i < 9; i++) {
			dur = 4.0 / 9;
			MusicShape_4.add(time, 60 + i, 0.5, dur * 0.9);
			time += dur;
		}

		for (int i = 0; i < 11; i++) {
			dur = 4.0 / 11;
			MusicShape_4.add(time, 60 + i, 0.5, dur * 0.9);
			time += dur;
		}

		for (int i = 0; i < 13; i++) {
			dur = 4.0 / 13;
			MusicShape_4.add(time, 60 + i, 0.5, dur * 0.9);
			time += dur;
		}

		for (int i = 0; i < 7; i++) {
			dur = 4.0 / 7;
			MusicShape_4.add(time, 60 + i, 0.5, dur * 0.9);
			time += dur;
		}

		for (int i = 0; i < 5; i++) {
			dur = 4.0 / 5;
			MusicShape_4.add(time, 60 + i, 0.5, dur * 0.9);
			time += dur;
		}

		for (int i = 0; i < 6; i++) {
			dur = 4.0 / 6;
			MusicShape_4.add(time, 60 + i, 0.5, dur * 0.9);
			time += dur;
		}

		//MusicShape_4.add( 0.0, 60.0, 0.5, 0.6 );
		//MusicShape_4.add( 0.66666, 75.0, 0.5, 0.3 );
		//MusicShape_4.add( 0.66666, 65.0, 0.5, 0.3 );

		/*
		MusicShape_4.add( 0.0, 75.0, 0.0546875, 0.45650088975022296 );
		MusicShape_4.add( 0.5706261121877787, 82.0, 0.0546875, 0.2240926191557514 );
		MusicShape_4.add( 0.8507418861324679, 63.0, 0.046875, 0.7251799479373859 );
		MusicShape_4.add( 1.7572168210542003, 80.0, 0.046875, 0.09698754199954432 );
		MusicShape_4.add( 1.8784512485536307, 68.0, 0.0546875, 0.13368181711752633 );
		MusicShape_4.add( 2.0455535199505386, 60.0, 0.0390625, 0.17853558473657627 );
		MusicShape_4.add( 2.268723000871259, 75.0, 0.015625, 0.7433517885498775 );
		MusicShape_4.add( 3.1979127365586058, 81.0, 0.0234375, 0.12629853893809193 );
		MusicShape_4.add( 3.3557859102312206, 74.0, 0.0625, 0.1023081446107536 );
		MusicShape_4.add( 3.4836710909946627, 65.0, 0.0703125, 0.1146639353426945 );
		MusicShape_4.add( 3.627001010173031, 63.0, 0.0703125, 0.37484475144225265 );
		MusicShape_4.add( 4.095556949475847, 61.0, 0.078125, 0.598508341274439 );
		MusicShape_4.add( 4.843692376068895, 68.0, 0.015625, 0.5941270800834006 );
		MusicShape_4.add( 5.586351226173146, 73.0, 0.0234375, 0.1814934622876177 );
		MusicShape_4.add( 5.813218054032668, 73.0, 0.0234375, 0.20270420632322056 );
		MusicShape_4.add( 6.066598311936694, 64.0, 0.046875, 0.3365125829173213 );
		MusicShape_4.add( 6.487239040583345, 70.0, 0.03125, 0.5800337353805409 );
		MusicShape_4.add( 7.212281209809022, 78.0, 0.0390625, 0.12019123574387856 );
		MusicShape_4.add( 7.36252025448887, 78.0, 0.1015625, 0.26175634273982495 );
		MusicShape_4.add( 7.6897156829136515, 65.0, 0.1015625, 0.4005958771216162 );
		
		*/
		// 1 staff, width, height
		Score score = new Score(1, 1024, 800);
		score.addMeasure();

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

		TimeSignature ts = new TimeSignature(4, 4);
		Vector tsVector = new Vector();
		tsVector.addElement(ts);
		transcriber.setTimeSignatures(tsVector);

		score.setCurrentStaffNumber(0);
		try {
			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);
	}

}