index.html 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. <script src="./opensheetmusicdisplay.min.js"></script>
  9. <style>
  10. * {
  11. margin: 0;
  12. padding: 0;
  13. }
  14. body {
  15. padding-bottom: 60px;
  16. height: 600px;
  17. overflow: hidden;
  18. }
  19. .vf-text {
  20. display: none;
  21. }
  22. #cursorImg-0 {
  23. display: none;
  24. }
  25. </style>
  26. </head>
  27. <body>
  28. <div id="osmdContainer" />
  29. <script>
  30. var osmd = new opensheetmusicdisplay.OpenSheetMusicDisplay("osmdContainer");
  31. osmd.setOptions({
  32. backend: "svg",
  33. // drawTitle: false,
  34. // drawPartNames: false,
  35. // drawLyricist: false,
  36. drawTitle: false,
  37. drawPartNames: false,
  38. drawLyricist: false,
  39. followCursor: false,
  40. autoResize: true,
  41. drawSubtitle: false,
  42. drawTitle: false,
  43. autoBeam: true,
  44. drawMetronomeMarks: false,
  45. drawMeasureNumbers: false,
  46. drawComposer: false,
  47. autoGenerateMutipleRestMeasuresFromRestMeasures: true,
  48. autoGenerateMultipleRestMeasuresFromRestMeasures: true,
  49. });
  50. osmd.EngravingRules.RenderMultipleRestMeasures = true;
  51. osmd.EngravingRules.CompactMode = true;
  52. osmd.EngravingRules.PageTopMarginNarrow = 5.0; // for compact mode
  53. osmd.EngravingRules.PageBottomMargin = 15.0;
  54. osmd.EngravingRules.PageLeftMargin = 1.0
  55. osmd.EngravingRules.PageRightMargin = 1.0
  56. // osmd.EngravingRules.DYMusicScoreType =
  57. // state.musicRenderType === EnumMusicRenderType.staff ? "staff" : "jianpu";
  58. // // 如果为固定调,需要加入全局
  59. // if (state.musicRenderType === EnumMusicRenderType.fixedTone) {
  60. // window.sett = {
  61. // keySignature: true,
  62. // };
  63. // }
  64. // debugger
  65. // console.log('osmd.EngravingRules')
  66. // osmd.EngravingRules.StaffDistance = 1.0;
  67. // osmd.EngravingRules.BetweenStaffDistance = 1.0;
  68. // osmd.EngravingRules.MinimumStaffLineDistance = 1.0;
  69. //osmd.EngravingRules.MinSkyBottomDistBetweenStaves = 1.0; // default 1.0. this can cause collisions with slurs and dynamics sometimes
  70. osmd.EngravingRules.MinSkyBottomDistBetweenSystems = 3.0; // default 5.0
  71. // note that osmd.EngravingRules === osmd.rules, since it's passed as a reference
  72. osmd.EngravingRules.MinimumDistanceBetweenSystems = 1;
  73. osmd.setPageFormat('794x1123')
  74. // osmd.setPageFormat('650x884')
  75. function getSvgPngToSize(osmd) {
  76. if (osmd) {
  77. if (osmd.Drawer.Backends.length > 0) {
  78. var imgList = []
  79. for (var idx = 0, len = osmd.Drawer.Backends.length; idx < len; idx++) {
  80. var backend = osmd.Drawer.Backends[idx]
  81. var state = backend.ctx.state;
  82. var width = backend.ctx.width / state.scale.x;
  83. var height = backend.ctx.height / state.scale.y;
  84. var cont = new XMLSerializer().serializeToString(
  85. backend.ctx.svg
  86. )
  87. imgList.push({
  88. img: cont,
  89. width: width,
  90. height: height,
  91. })
  92. }
  93. return imgList
  94. }
  95. } else {
  96. console.log('没有OSMD')
  97. }
  98. }
  99. function render() {
  100. osmd.render();
  101. // console.log(getSvgPngToSize(osmd), 'getSvgPngToSize(osmd)')
  102. window.parent.postMessage({
  103. api: 'musicStaffRender',
  104. loading: false,
  105. osmdImg: getSvgPngToSize(osmd)
  106. }, '*');
  107. }
  108. function renderXml(xmlUrl, partIndex) {
  109. osmd
  110. .load(xmlUrl)
  111. .then(
  112. function () {
  113. for (let i = 0; i < osmd.Sheet.Instruments.length; i++) {
  114. osmd.Sheet.Instruments[i].Visible = i === partIndex;
  115. }
  116. osmd.zoom = .5
  117. render();
  118. }
  119. );
  120. }
  121. function resetRender(partIndex) {
  122. for (let i = 0; i < osmd.Sheet.Instruments.length; i++) {
  123. osmd.Sheet.Instruments[i].Visible = i === partIndex;
  124. }
  125. render();
  126. }
  127. function resetRenderPage(type, xmlUrl) {
  128. let str = 'staff'
  129. if (type === 'first') {
  130. str = 'jianpu'
  131. window.sett = {
  132. keySignature: false,
  133. };
  134. } else if (type === 'fixed') {
  135. str = 'jianpu'
  136. window.sett = {
  137. keySignature: true,
  138. };
  139. }
  140. osmd.EngravingRules.DYMusicScoreType = str
  141. // console.log(type, xmlUrl)
  142. osmd
  143. .load(xmlUrl)
  144. .then(
  145. function () {
  146. // for (let i = 0; i < osmd.Sheet.Instruments.length; i++) {
  147. // // console.log(osmd.Sheet.Instruments[i].Name);
  148. // osmd.Sheet.Instruments[i].Visible = i === partIndex;
  149. // }
  150. osmd.zoom = .5
  151. render();
  152. }
  153. );
  154. }
  155. </script>
  156. </body>
  157. </html>