package jmsltestsuite; import java.awt.Frame; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import com.didkovsky.portview.swing.ViewFactorySwing; import com.softsynth.jmsl.JMSL; import com.softsynth.jmsl.score.MusicGlyphRendererProxy; import com.softsynth.jmsl.score.MusicGlyphRendererProxyListener; import com.softsynth.jmsl.score.Note; import com.softsynth.jmsl.score.Score; /** * JMSL Score lets you add custom music glyph renderers, that might use a real * music font for example. Here we test two such renderers, one that uses Sonata * music font for most glyphs, but gives the priority to another renderer for * microtonal accidentals (Accidentals font by Matthew Hindson, see * http://www.hindson.com.au/wordpress/free-fonts-available-for-download/ * * The order you add MusicGlyphRenderers to JMSL determines the priority. The * first renderer to successfully render a glyph returns true and stops the * chain. If they all fall through or if none exist, JMSL uses line drawing * routines. * * * * Test SonataMusicGlyphRenderer and AccidentalsMusicGlyphRenderer */ public class MusicGlyphRendererTestSimple implements MusicGlyphRendererProxyListener { PrintWriter log; public MusicGlyphRendererTestSimple() { try { log = new PrintWriter(new FileWriter(new File("logs/MusicGlyphProxyOutput.txt")), true); } catch (IOException e) { e.printStackTrace(); } } public void notifyRenderMusicGlyph(String msg) { // if (msg.indexOf("sharp") == -1 && msg.indexOf("flat") == -1) return; if (log != null) { log.println(msg); } else { System.out.println("\t\t\t" + msg); } } public static void main(String[] args) { JMSL.setViewFactory(new ViewFactorySwing()); MusicGlyphRendererTestSimple musicGlyphRendererTest = new MusicGlyphRendererTestSimple(); Score score = new Score(1, 800, 400); System.out.println("Using proxy renderer"); MusicGlyphRendererProxy proxyRenderer = new MusicGlyphRendererProxy(); proxyRenderer.addMusicGlyphRendererProxyListener(musicGlyphRendererTest); score.addMusicGlyphRenderer(proxyRenderer); // score.getScoreLayoutManager().setZoom(1); score.addMeasure(4, 4); score.addNote(0.666, 63.5, 0.5, 0.8).setBeamedOut(true); // score.addNote(0.666, 61.5, 0.5, 0.8).setAccPref(Note.ACC_PREFER_FLAT); // score.addNote(0.666, 61, 0.5, 0.8).setAccPref(Note.ACC_PREFER_FLAT); // score.addNote(2, 60.5, 0.5, 0.8).setAccPref(Note.ACC_PREFER_FLAT); // // ScoreFrame scoreFrame = new ScoreFrame(); // scoreFrame.addScore(score); Frame scoreFrame = new Frame("generic frame"); scoreFrame.add(score.getScoreCanvas().getComponent()); scoreFrame.pack(); scoreFrame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { JMSL.closeMusicDevices(); System.exit(0); } }); scoreFrame.setVisible(true); } }