<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <script src="./opensheetmusicdisplay.min.js"></script> <style> * { margin: 0; padding: 0; } body { /* padding-bottom: 60px; */ /* height: 600px; */ /* overflow: hidden; */ } /* .vf-text { display: none; } */ #cursorImg-0 { display: none; } </style> </head> <body> <div id="osmdContainer" /> <script> var osmd = new opensheetmusicdisplay.OpenSheetMusicDisplay("osmdContainer"); osmd.setOptions({ backend: "svg", drawTitle: false, drawPartNames: false, drawLyricist: false, }); // osmd.EngravingRules.RenderMultipleRestMeasures = true; // osmd.EngravingRules.CompactMode = true; // osmd.EngravingRules.PageTopMarginNarrow = 5.0; // for compact mode // osmd.EngravingRules.PageBottomMargin = 15.0; // osmd.EngravingRules.DYMusicScoreType = // state.musicRenderType === EnumMusicRenderType.staff ? "staff" : "jianpu"; // // 如果为固定调,需要加入全局 // if (state.musicRenderType === EnumMusicRenderType.fixedTone) { // window.sett = { // keySignature: true, // }; // } // debugger // console.log('osmd.EngravingRules') // osmd.EngravingRules.StaffDistance = 1.0; // osmd.EngravingRules.BetweenStaffDistance = 1.0; // osmd.EngravingRules.MinimumStaffLineDistance = 1.0; //osmd.EngravingRules.MinSkyBottomDistBetweenStaves = 1.0; // default 1.0. this can cause collisions with slurs and dynamics sometimes osmd.EngravingRules.MinSkyBottomDistBetweenSystems = 3.0; // default 5.0 // note that osmd.EngravingRules === osmd.rules, since it's passed as a reference osmd.EngravingRules.MinimumDistanceBetweenSystems = 1; // osmd.setPageFormat('794x1123') osmd.setPageFormat('650x884') function getSvgPngToSize(osmd) { if (osmd) { if (osmd.Drawer.Backends.length > 0) { var imgList = [] for (var idx = 0, len = osmd.Drawer.Backends.length; idx < len; idx++) { var backend = osmd.Drawer.Backends[idx] var state = backend.ctx.state; var width = backend.ctx.width / state.scale.x; var height = backend.ctx.height / state.scale.y; var cont = new XMLSerializer().serializeToString( backend.ctx.svg ) imgList.push({ img: cont, width: width, height: height, }) } return imgList } } else { console.log('没有OSMD') } } function render() { osmd.render(); // console.log(getSvgPngToSize(osmd), 'getSvgPngToSize(osmd)') window.parent.postMessage({ api: 'musicStaffRender', loading: false, osmdImg: getSvgPngToSize(osmd) }, '*'); } function renderXml(xmlUrl, partIndex, type) { if(type) { let str = 'staff' if (type === 'first') { str = 'jianpu' window.sett = { keySignature: false, }; } else if (type === 'fixed') { str = 'jianpu' window.sett = { keySignature: true, }; } osmd.EngravingRules.DYMusicScoreType = str } osmd .load(xmlUrl) .then( function () { // for (let i = 0; i < osmd.Sheet.Instruments.length; i++) { // // console.log(osmd.Sheet.Instruments[i].Name); // osmd.Sheet.Instruments[i].Visible = i === partIndex; // } osmd.zoom = .5 render(); } ); } function resetRender(partIndex) { for (let i = 0; i < osmd.Sheet.Instruments.length; i++) { osmd.Sheet.Instruments[i].Visible = i === partIndex; } render(); } function resetRenderPage(type, xmlUrl) { let str = 'staff' if (type === 'first') { str = 'jianpu' window.sett = { keySignature: false, }; } else if (type === 'fixed') { str = 'jianpu' window.sett = { keySignature: true, }; } osmd.EngravingRules.DYMusicScoreType = str // console.log(type, xmlUrl) osmd .load(xmlUrl) .then( function () { // for (let i = 0; i < osmd.Sheet.Instruments.length; i++) { // // console.log(osmd.Sheet.Instruments[i].Name); // osmd.Sheet.Instruments[i].Visible = i === partIndex; // } osmd.zoom = .5 render(); } ); } </script> </body> </html>