/* * Created on Jan 3, 2006 * */ package jmsltestsuite; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import com.didkovsky.portview.swing.ViewFactorySwing; import com.softsynth.jmsl.JMSL; import com.softsynth.jmsl.JMSLRandom; import com.softsynth.jmsl.jsyn2.JSynMusicDevice; import com.softsynth.jmsl.jsyn2.JSynUnitVoiceInstrument; import com.softsynth.jmsl.jsyn2.unitvoices.FilteredSawtoothBL; import com.softsynth.jmsl.score.Note; import com.softsynth.jmsl.score.Orchestra; import com.softsynth.jmsl.score.Score; import com.softsynth.jmsl.score.ScoreFrame; import com.softsynth.jmsl.util.Oof; /** * Generate a measure of 256th notes. Use 1/F for pitch * * @author Nick Didkovsky, nick@didkovsky.com * */ public class TwoHundredFiftySixthNotes { public static void main(String[] args) { JMSL.setViewFactory(new ViewFactorySwing()); Score score = new Score(1, 1100, 600); score.addMeasure(4, 4); score.getMeasure(0).getStaff(0).setSpaceAbove(300); score.setName("Melody generated by 1/F Noise"); JSynMusicDevice.instance().open(); Orchestra orch = new Orchestra(); orch.addInstrument(new JSynUnitVoiceInstrument(8, FilteredSawtoothBL.class.getName())); score.setOrchestra(orch); double maxPitch = 84; double minPitch = 48; double pitchRange = maxPitch - minPitch; Oof oof = new Oof(7); oof.randomize(); double maxOof = Double.MIN_VALUE; double minOof = Double.MAX_VALUE; for (int i = 0; i < 20000; i++) { double v = oof.next(); maxOof = Math.max(maxOof, v); minOof = Math.min(minOof, v); } System.out.println("maxOof=" + maxOof + ", minOof=" + minOof); for (int i = 0; i < 64 * 5; i++) { double duration = .125 / 4; // 4.0 / 256.0; double oofValue = oof.next(); double fractionOfOofRange = oofValue / (maxOof - minOof); double pitch = (fractionOfOofRange * pitchRange) + minPitch; double amplitude = JMSLRandom.choose(.4); double hold = duration * 0.8; Note n = score.addNote(duration, pitch, amplitude, hold); n.setBeamedOut(i % 32 != 31); } final ScoreFrame scoreFrame = new ScoreFrame(); scoreFrame.addScore(score); scoreFrame.pack(); scoreFrame.setVisible(true); scoreFrame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { scoreFrame.quit(); } }); } }