index.html 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  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. console.log(osmd, 'osmd.EngravingRules')
  55. // osmd.EngravingRules.DYMusicScoreType =
  56. // state.musicRenderType === EnumMusicRenderType.staff ? "staff" : "jianpu";
  57. // // 如果为固定调,需要加入全局
  58. // if (state.musicRenderType === EnumMusicRenderType.fixedTone) {
  59. // window.sett = {
  60. // keySignature: true,
  61. // };
  62. // }
  63. // debugger
  64. // console.log('osmd.EngravingRules')
  65. // osmd.EngravingRules.StaffDistance = 1.0;
  66. // osmd.EngravingRules.BetweenStaffDistance = 1.0;
  67. // osmd.EngravingRules.MinimumStaffLineDistance = 1.0;
  68. //osmd.EngravingRules.MinSkyBottomDistBetweenStaves = 1.0; // default 1.0. this can cause collisions with slurs and dynamics sometimes
  69. osmd.EngravingRules.MinSkyBottomDistBetweenSystems = 3.0; // default 5.0
  70. // note that osmd.EngravingRules === osmd.rules, since it's passed as a reference
  71. osmd.EngravingRules.MinimumDistanceBetweenSystems = 1;
  72. osmd.setPageFormat('794x1123')
  73. // osmd.setPageFormat('650x884')
  74. function getSvgPngToSize(osmd) {
  75. if (osmd) {
  76. if (osmd.Drawer.Backends.length > 0) {
  77. var imgList = []
  78. for (var idx = 0, len = osmd.Drawer.Backends.length; idx < len; idx++) {
  79. var backend = osmd.Drawer.Backends[idx]
  80. var state = backend.ctx.state;
  81. var width = backend.ctx.width / state.scale.x;
  82. var height = backend.ctx.height / state.scale.y;
  83. var cont = new XMLSerializer().serializeToString(
  84. backend.ctx.svg
  85. )
  86. imgList.push({
  87. img: cont,
  88. width: width,
  89. height: height,
  90. })
  91. }
  92. return imgList
  93. }
  94. } else {
  95. console.log('没有OSMD')
  96. }
  97. }
  98. function render() {
  99. osmd.render();
  100. // console.log(getSvgPngToSize(osmd), 'getSvgPngToSize(osmd)')
  101. window.parent.postMessage({
  102. api: 'musicStaffRender',
  103. loading: false,
  104. osmdImg: getSvgPngToSize(osmd)
  105. }, '*');
  106. }
  107. function renderXml(xmlUrl, partIndex) {
  108. osmd
  109. .load(xmlUrl)
  110. .then(
  111. function () {
  112. for (let i = 0; i < osmd.Sheet.Instruments.length; i++) {
  113. // console.log(osmd.Sheet.Instruments[i].Name);
  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>