public void JsonDeserializationTestWithProxyOnRealExample()
        {
            var assembly          = typeof(SerializationTests).Assembly;
            var scoreResourceName = $"{typeof(SerializationTests).Namespace}.Assets.JohannChristophBachFull3.0.xml";

            using (var scoreStream = assembly.GetManifestResourceStream(scoreResourceName))
                using (var scoreReader = new StreamReader(scoreStream))
                {
                    var sw = new Stopwatch();
                    sw.Start();

                    var scoreString = scoreReader.ReadToEnd();
                    var settings    = new HtmlScoreRendererSettings();
                    settings.RenderSurface = HtmlScoreRendererSettings.HtmlRenderSurface.Svg;
                    var profile = SMuFLMusicFont.CreateFromJsonResource <SerializationTests>("bravura_metadata.json");
                    settings.SetMusicFont(profile, "Bravura", "/fakeuri");
                    settings.Scale = 1;
                    settings.CustomElementPositionRatio = 0.8;
                    settings.IgnorePageMargins          = true;
                    var renderer = new HtmlSvgScoreRenderer(new XElement("root"), "testCanvas", settings);

                    renderer.Render(scoreString.ToScore());

                    sw.Stop();

                    var metadataAsProxy = (LazyLoadJsonProxy)profile.SMuFLMetadata;
                    Debug.WriteLine($"All rendering done in {sw.Elapsed}");
                    var deserTime = metadataAsProxy.GetTotalDeserializationTimeWithChildElements();
                    Debug.WriteLine($"Deserialization done in {deserTime}");
                }
        }
Beispiel #2
0
        private HtmlScoreRendererSettings CreateScoreRendererSettings(string musicFontName, string fontMetadataPath, params string[] musicFontUris)
        {
            var fontMetadata = string.IsNullOrWhiteSpace(fontMetadataPath) ? null : File.ReadAllText(
                Path.Combine(hostingEnvironment.ContentRootPath, "wwwroot") + fontMetadataPath);
            var settings = new HtmlScoreRendererSettings();

            settings.RenderSurface = HtmlScoreRendererSettings.HtmlRenderSurface.Svg;
            settings.CustomElementPositionRatio = 1;
            if (musicFontName == "Polihymnia")
            {
                settings.Fonts.Add(MusicFontStyles.MusicFont, new HtmlFontInfo(musicFontName, 22, musicFontUris));
                settings.Fonts.Add(MusicFontStyles.StaffFont, new HtmlFontInfo(musicFontName, 24, musicFontUris));
                settings.Fonts.Add(MusicFontStyles.GraceNoteFont, new HtmlFontInfo(musicFontName, 12, musicFontUris));
                settings.Fonts.Add(MusicFontStyles.TimeSignatureFont, new HtmlFontInfo("Open Sans", 12, "/fonts/OpenSans-Regular.ttf"));
                settings.Fonts.Add(MusicFontStyles.LyricsFont, new HtmlFontInfo("Open Sans", 12, "/fonts/OpenSans-Regular.ttf"));
                settings.Fonts.Add(MusicFontStyles.DirectionFont, new HtmlFontInfo("Open Sans", 14, "/fonts/OpenSans-Regular.ttf"));
            }
            else
            {
                var profile = SMuFLMusicFont.CreateFromJsonString(fontMetadata);
                profile.FontSizes[MusicFontStyles.MusicFont]         = 20;
                profile.FontSizes[MusicFontStyles.TimeSignatureFont] = 20;
                profile.FontSizes[MusicFontStyles.StaffFont]         = 20;
                settings.SetMusicFont(profile, musicFontName, musicFontUris);
            }

            settings.RenderingMode     = Controls.Rendering.ScoreRenderingModes.AllPages;
            settings.IgnorePageMargins = true;

            return(settings);
        }
        public HtmlScoreRendererSettings GetRendererSettings()
        {
            if (rendererSettings != null)
            {
                return(rendererSettings);
            }

            rendererSettings = new HtmlScoreRendererSettings();
            rendererSettings.RenderSurface = HtmlScoreRendererSettings.HtmlRenderSurface.Svg;
            rendererSettings.CustomElementPositionRatio = 1;

            var musicFontUris = new[] { "/fonts/Polihymnia.ttf" };

            rendererSettings.Fonts.Add(MusicFontStyles.MusicFont, new HtmlFontInfo("Polihymnia", 22, musicFontUris));
            rendererSettings.Fonts.Add(MusicFontStyles.StaffFont, new HtmlFontInfo("Polihymnia", 24, musicFontUris));
            rendererSettings.Fonts.Add(MusicFontStyles.GraceNoteFont, new HtmlFontInfo("Polihymnia", 12, musicFontUris));
            rendererSettings.Fonts.Add(MusicFontStyles.TimeSignatureFont, new HtmlFontInfo("Open Sans", 12, "/fonts/OpenSans-Regular.ttf"));
            rendererSettings.Fonts.Add(MusicFontStyles.LyricsFont, new HtmlFontInfo("Open Sans", 12, "/fonts/OpenSans-Regular.ttf"));
            rendererSettings.Fonts.Add(MusicFontStyles.DirectionFont, new HtmlFontInfo("Open Sans", 14, "/fonts/OpenSans-Regular.ttf"));

            /*var profile = SMuFLMusicFont.CreateFromJsonString(fontMetadata, false); //TODO: Proxy disabled becasue Mono.wasm does not support Reflection.Emit yet
             * profile.FontSizes[MusicFontStyles.MusicFont] = 20;
             * profile.FontSizes[MusicFontStyles.TimeSignatureFont] = 20;
             * profile.FontSizes[MusicFontStyles.StaffFont] = 20;
             * rendererSettings.SetMusicFont(profile, "Bravura", musicFontUris);*/

            rendererSettings.RenderingMode     = Controls.Rendering.ScoreRenderingModes.Panorama;
            rendererSettings.IgnorePageMargins = true;

            return(rendererSettings);
        }
        public static MvcHtmlString NoteViewerFor <TModel>(this HtmlHelper <TModel> htmlHelper, Expression <Func <TModel, Score> > expression, Expression <Func <TModel, HtmlScoreRendererSettings> > settingsExpression)
        {
            if (expression == null)
            {
                throw new ArgumentNullException("expression");
            }
            if (settingsExpression == null)
            {
                throw new ArgumentNullException("settingsExpression");
            }

            ModelMetadata             metadata         = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
            Score                     score            = metadata.Model == null ? null : metadata.Model as Score;
            ModelMetadata             settingsMetadata = ModelMetadata.FromLambdaExpression(settingsExpression, htmlHelper.ViewData);
            HtmlScoreRendererSettings settings         = settingsMetadata.Model == null ? null : settingsMetadata.Model as HtmlScoreRendererSettings;

            return(NoteViewerHelper(htmlHelper, score, settings));
        }
        public static HtmlString NoteViewerFor <TModel>(this IHtmlHelper <TModel> htmlHelper, Expression <Func <TModel, Score> > expression, Expression <Func <TModel, HtmlScoreRendererSettings> > settingsExpression)
        {
            if (expression == null)
            {
                throw new ArgumentNullException("expression");
            }
            if (settingsExpression == null)
            {
                throw new ArgumentNullException("settingsExpression");
            }

            var   explorer                     = ExpressionMetadataProvider.FromLambdaExpression(expression, htmlHelper.ViewData, htmlHelper.MetadataProvider);
            Score score                        = explorer.Model == null ? null : explorer.Model as Score;
            var   settingsExplorer             = ExpressionMetadataProvider.FromLambdaExpression(settingsExpression, htmlHelper.ViewData, htmlHelper.MetadataProvider);
            HtmlScoreRendererSettings settings = settingsExplorer.Model == null ? null : settingsExplorer.Model as HtmlScoreRendererSettings;

            return(NoteViewerHelper(htmlHelper, score, settings));
        }
Beispiel #6
0
        public HomeViewModel()
        {
            var settings = new HtmlScoreRendererSettings();

            settings.RenderSurface = HtmlScoreRendererSettings.HtmlRenderSurface.Svg;
            var musicFontUris = new[] { "/fonts/Polihymnia.svg", "/fonts/Polihymnia.ttf", "/fonts/Polihymnia.woff" };

            settings.RenderingMode = ScoreRenderingModes.AllPages;
            settings.Fonts.Add(MusicFontStyles.MusicFont, new HtmlFontInfo("Polihymnia", 22, musicFontUris));
            settings.Fonts.Add(MusicFontStyles.StaffFont, new HtmlFontInfo("Polihymnia", 24, musicFontUris));
            settings.Fonts.Add(MusicFontStyles.GraceNoteFont, new HtmlFontInfo("Polihymnia", 14, musicFontUris));
            settings.Fonts.Add(MusicFontStyles.LyricsFont, new HtmlFontInfo("Open Sans", 9, "/fonts/OpenSans-Regular.ttf"));
            settings.Fonts.Add(MusicFontStyles.TimeSignatureFont, new HtmlFontInfo("Open Sans", 12, "/fonts/OpenSans-Regular.ttf"));
            settings.Fonts.Add(MusicFontStyles.DirectionFont, new HtmlFontInfo("Open Sans", 10, "/fonts/OpenSans-Regular.ttf"));
            settings.Scale = 1;
            settings.CustomElementPositionRatio = 0.8;
            settings.IgnorePageMargins          = true;
            Settings = settings;

            RadarChartSettings = new HtmlRadarChartRendererSettings();
            Samples            = new[] {
                new RadarChartSample("Performance", "Performance", 50)
                {
                    ValidationMinValue = 40, ValidationMaxValue = 60
                },
                new RadarChartSample("User experience", "User experience", 52)
                {
                    ValidationMinValue = 20, ValidationMaxValue = 40
                },
                new RadarChartSample("Responsiveness", "Responsiveness", 18)
                {
                    ValidationMinValue = 20, ValidationMaxValue = 40
                },
                new RadarChartSample("Cost", "Cost", 30)
                {
                    ValidationMinValue = 30, ValidationMaxValue = 60
                },
                new RadarChartSample("Awesomeness", "Awesomeness", 37)
                {
                    ValidationMinValue = 20, ValidationMaxValue = 40
                }
            };
        }
        public static MvcHtmlString NoteViewerFor <TModel>(this HtmlHelper <TModel> htmlHelper, Expression <Func <TModel, string> > expression, HtmlScoreRendererSettings settings)
        {
            if (expression == null)
            {
                throw new ArgumentNullException(nameof(expression));
            }
            if (settings == null)
            {
                throw new ArgumentNullException(nameof(settings));
            }

            ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
            string        musicXml = metadata.Model == null ? null : metadata.Model.ToString();

            return(NoteViewerHelper(htmlHelper, musicXml, settings));
        }
 public static MvcHtmlString NoteViewer(this HtmlHelper htmlHelper, Score score, HtmlScoreRendererSettings settings)
 {
     return(NoteViewerHelper(htmlHelper, score, settings));
 }
 public static MvcHtmlString NoteViewer(this HtmlHelper htmlHelper, string musicXml, HtmlScoreRendererSettings settings)
 {
     return(NoteViewerHelper(htmlHelper, musicXml, settings));
 }
        private static MvcHtmlString NoteViewerHelper(HtmlHelper htmlHelper, string musicXml, HtmlScoreRendererSettings settings)
        {
            MusicXmlParser parser = new MusicXmlParser();
            Score          score  = parser.Parse(XDocument.Parse(musicXml));

            return(NoteViewerHelper(htmlHelper, score, settings));
        }
        private static MvcHtmlString NoteViewerHelper(HtmlHelper htmlHelper, Score score, HtmlScoreRendererSettings settings)
        {
            IScore2HtmlBuilder builder;

            if (settings.RenderSurface == HtmlScoreRendererSettings.HtmlRenderSurface.Canvas)
            {
                builder = new Score2HtmlCanvasBuilder(score, string.Format("scoreCanvas{0}", canvasIdCount), settings);
            }
            else if (settings.RenderSurface == HtmlScoreRendererSettings.HtmlRenderSurface.Svg)
            {
                builder = new Score2HtmlSvgBuilder(score, string.Format("scoreCanvas{0}", canvasIdCount), settings);
            }
            else
            {
                throw new NotImplementedException("Unsupported rendering engine.");
            }

            string html = builder.Build();

            canvasIdCount++;
            return(MvcHtmlString.Create(html));
        }
 public static IHtmlContent NoteViewer(this IHtmlHelper htmlHelper, string musicXml, HtmlScoreRendererSettings settings)
 {
     return(NoteViewerHelper(htmlHelper, musicXml, settings));
 }
Beispiel #13
0
 public ServerSideSettingsService(IHostingEnvironment hostingEnvironment)
 {
     this.hostingEnvironment = hostingEnvironment;
     rendererSettings        = CreateScoreRendererSettings("Bravura", "/fonts/bravura_metadata.json", "/fonts/Bravura.otf");
 }
 public CanvasScoreRenderer(Canvas canvas, HtmlScoreRendererSettings settings)
     : base(canvas, settings)
 {
     OwnershipDictionary = new Dictionary <FrameworkElement, MusicalSymbol>();
 }