Sfoglia il codice sorgente

Merge branch 'ktyq-online-new' into feature-patch

TIANYONG 3 settimane fa
parent
commit
6f78fba3b1
46 ha cambiato i file con 573 aggiunte e 482 eliminazioni
  1. 7 7
      dist/colexiu.html
  2. 7 7
      dist/index.html
  3. 4 4
      dist/instrument.html
  4. 0 0
      dist/js/colexiu-6797f344.js
  5. 0 0
      dist/js/colexiu-legacy-021b26ee.js
  6. 0 0
      dist/js/gym-e57d2e74.js
  7. 0 0
      dist/js/gym-legacy-bd35c562.js
  8. 0 0
      dist/js/index-139c70d3.js
  9. 0 0
      dist/js/index-204e8585.js
  10. 1 1
      dist/js/index-29a489a4.js
  11. 1 1
      dist/js/index-4ef6f5b9.js
  12. 0 0
      dist/js/index-7dad5569.js
  13. 0 0
      dist/js/index-890ff5f7.js
  14. 0 0
      dist/js/index-89f36e8b.js
  15. 0 0
      dist/js/index-b5659e41.js
  16. 0 0
      dist/js/index-de4e4bb8.js
  17. 1 1
      dist/js/index-legacy-21fcfe5f.js
  18. 0 0
      dist/js/index-legacy-46433986.js
  19. 0 0
      dist/js/index-legacy-6756c292.js
  20. 1 1
      dist/js/index-legacy-68f9fc7c.js
  21. 0 0
      dist/js/index-legacy-7787e22d.js
  22. 0 0
      dist/js/index-legacy-93c90b23.js
  23. 0 0
      dist/js/index-legacy-c4f2a05f.js
  24. 0 0
      dist/js/index-legacy-e352db17.js
  25. 0 0
      dist/js/index-legacy-e9a0a46a.js
  26. 0 0
      dist/js/instrument-b316f97b.js
  27. 0 0
      dist/js/instrument-legacy-b016555e.js
  28. 0 0
      dist/js/modeView-7e57fec5.js
  29. 0 0
      dist/js/modeView-legacy-9a73f1b8.js
  30. 0 0
      dist/js/orchestra-a130c006.js
  31. 0 0
      dist/js/orchestra-legacy-5c5fd267.js
  32. 0 0
      dist/js/polyfills-bdbb13e0.js
  33. 0 0
      dist/js/report-share-cd5a973e.js
  34. 0 0
      dist/js/report-share-legacy-223752da.js
  35. 8 8
      dist/orchestra.html
  36. 5 5
      dist/report-share.html
  37. 472 207
      src/constant/instruments.ts
  38. 1 1
      src/page-instrument/evaluat-model/index.tsx
  39. 43 229
      src/state.ts
  40. 6 0
      src/utils/baseApi.ts
  41. 2 1
      src/view/fingering/fingering-relationships.ts
  42. 2 2
      src/view/fingering/index.tsx
  43. 3 1
      src/view/music-score/index.tsx
  44. 7 4
      src/view/rhythm/index.tsx
  45. 0 0
      stats.html
  46. 2 2
      vite.config.ts

+ 7 - 7
dist/colexiu.html

@@ -2,7 +2,7 @@
 <html lang="en">
 
 <head>
-  <script type="module" crossorigin src="./js/polyfills-6b4fae76.js"></script>
+  <script type="module" crossorigin src="./js/polyfills-bdbb13e0.js"></script>
 
   <meta charset="UTF-8" />
   <link rel="icon" type="image/svg+xml" href="./vite.svg" />
@@ -40,11 +40,11 @@
       },
     })
   </script>
-  <script type="module" crossorigin src="./js/colexiu-1dd52313.js"></script>
-  <link rel="modulepreload" crossorigin href="./js/index-557da405.js">
-  <link rel="modulepreload" crossorigin href="./js/index-82ec78ed.js">
-  <link rel="modulepreload" crossorigin href="./js/index-7f5c97b1.js">
-  <link rel="modulepreload" crossorigin href="./js/index-22bb3984.js">
+  <script type="module" crossorigin src="./js/colexiu-6797f344.js"></script>
+  <link rel="modulepreload" crossorigin href="./js/index-139c70d3.js">
+  <link rel="modulepreload" crossorigin href="./js/index-204e8585.js">
+  <link rel="modulepreload" crossorigin href="./js/index-890ff5f7.js">
+  <link rel="modulepreload" crossorigin href="./js/index-4ef6f5b9.js">
   <link rel="stylesheet" href="./css/index-1ec513a0.css">
   <link rel="stylesheet" href="./css/colexiu-62f31c4f.css">
   <script type="module">import.meta.url;import("_").catch(()=>1);async function* g(){};window.__vite_is_modern_browser=true;</script>
@@ -57,7 +57,7 @@
   
   <script nomodule>!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",(function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()}),!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script>
   <script nomodule crossorigin id="vite-legacy-polyfill" src="./js/polyfills-legacy-1d2158fb.js"></script>
-  <script nomodule crossorigin id="vite-legacy-entry" data-src="./js/colexiu-legacy-4fceae41.js">System.import(document.getElementById('vite-legacy-entry').getAttribute('data-src'))</script>
+  <script nomodule crossorigin id="vite-legacy-entry" data-src="./js/colexiu-legacy-021b26ee.js">System.import(document.getElementById('vite-legacy-entry').getAttribute('data-src'))</script>
 </body>
 
 </html>

+ 7 - 7
dist/index.html

@@ -2,7 +2,7 @@
 <html lang="ZH-cn">
 
 <head>
-  <script type="module" crossorigin src="./js/polyfills-6b4fae76.js"></script>
+  <script type="module" crossorigin src="./js/polyfills-bdbb13e0.js"></script>
 
   <meta charset="UTF-8">
   <link rel="icon" href="./favicon.ico" />
@@ -75,11 +75,11 @@
       }
     })
   </script>
-  <script type="module" crossorigin src="./js/gym-16eb931f.js"></script>
-  <link rel="modulepreload" crossorigin href="./js/index-557da405.js">
-  <link rel="modulepreload" crossorigin href="./js/index-82ec78ed.js">
-  <link rel="modulepreload" crossorigin href="./js/index-e50e863f.js">
-  <link rel="modulepreload" crossorigin href="./js/index-22bb3984.js">
+  <script type="module" crossorigin src="./js/gym-e57d2e74.js"></script>
+  <link rel="modulepreload" crossorigin href="./js/index-139c70d3.js">
+  <link rel="modulepreload" crossorigin href="./js/index-204e8585.js">
+  <link rel="modulepreload" crossorigin href="./js/index-7dad5569.js">
+  <link rel="modulepreload" crossorigin href="./js/index-4ef6f5b9.js">
   <link rel="modulepreload" crossorigin href="./js/plyr.min-c8c2777b.js">
   <link rel="stylesheet" href="./css/index-1ec513a0.css">
   <link rel="stylesheet" href="./css/index-85f95688.css">
@@ -99,7 +99,7 @@
   
   <script nomodule>!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",(function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()}),!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script>
   <script nomodule crossorigin id="vite-legacy-polyfill" src="./js/polyfills-legacy-1d2158fb.js"></script>
-  <script nomodule crossorigin id="vite-legacy-entry" data-src="./js/gym-legacy-b063b8c0.js">System.import(document.getElementById('vite-legacy-entry').getAttribute('data-src'))</script>
+  <script nomodule crossorigin id="vite-legacy-entry" data-src="./js/gym-legacy-bd35c562.js">System.import(document.getElementById('vite-legacy-entry').getAttribute('data-src'))</script>
 </body>
 
 </html>

+ 4 - 4
dist/instrument.html

@@ -2,7 +2,7 @@
 <html lang="en">
 
 <head>
-  <script type="module" crossorigin src="./js/polyfills-6b4fae76.js"></script>
+  <script type="module" crossorigin src="./js/polyfills-bdbb13e0.js"></script>
 
   <meta charset="UTF-8" />
   <meta name="viewport"
@@ -41,8 +41,8 @@
       })
     }
   </script>
-  <script type="module" crossorigin src="./js/instrument-2c7bbc6d.js"></script>
-  <link rel="modulepreload" crossorigin href="./js/index-557da405.js">
+  <script type="module" crossorigin src="./js/instrument-b316f97b.js"></script>
+  <link rel="modulepreload" crossorigin href="./js/index-139c70d3.js">
   <link rel="stylesheet" href="./css/index-1ec513a0.css">
   <link rel="stylesheet" href="./css/instrument-7b1512ed.css">
   <script type="module">import.meta.url;import("_").catch(()=>1);async function* g(){};window.__vite_is_modern_browser=true;</script>
@@ -68,7 +68,7 @@
   </script>   -->
   <script nomodule>!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",(function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()}),!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script>
   <script nomodule crossorigin id="vite-legacy-polyfill" src="./js/polyfills-legacy-1d2158fb.js"></script>
-  <script nomodule crossorigin id="vite-legacy-entry" data-src="./js/instrument-legacy-545b5ab0.js">System.import(document.getElementById('vite-legacy-entry').getAttribute('data-src'))</script>
+  <script nomodule crossorigin id="vite-legacy-entry" data-src="./js/instrument-legacy-b016555e.js">System.import(document.getElementById('vite-legacy-entry').getAttribute('data-src'))</script>
 </body>
 
 </html>

File diff suppressed because it is too large
+ 0 - 0
dist/js/colexiu-6797f344.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/colexiu-legacy-021b26ee.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/gym-e57d2e74.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/gym-legacy-bd35c562.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-139c70d3.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-204e8585.js


+ 1 - 1
dist/js/index-e44e67ea.js → dist/js/index-29a489a4.js

@@ -1 +1 @@
-import{d as i,F as l,W as d,bY as e,M as r,V as c,j as s,aT as u}from"./index-557da405.js";const f="_skeleton_vtlsh_1",m="_detail_vtlsh_12",p="_container_vtlsh_20",a={skeleton:f,detail:m,container:p},y=i({name:"music-list",setup(){const n=l(),t=d({isLoading:!0,isProductLoading:!1,product:[{state:!1,name:"五线谱",type:e.staff,base64:""},{state:!1,name:"首调",type:e.firstTone,base64:""},{state:!1,name:"固定调",type:e.fixedTone,base64:""}]});r(()=>{window.appName="colexiu",c.xmlUrl=n.xmlUrl,t.isLoading=!1});const o=async()=>{console.log("渲染完成")};return()=>s("div",{class:a.detail},[s("div",{id:"scrollContainer",class:[a.container,"hideCursor"]},[!t.isLoading&&s(u,{onRendered:o},null)])])}});export{y as default};
+import{d as i,F as l,W as d,bY as e,M as r,V as c,j as s,aT as u}from"./index-139c70d3.js";const f="_skeleton_vtlsh_1",m="_detail_vtlsh_12",p="_container_vtlsh_20",a={skeleton:f,detail:m,container:p},y=i({name:"music-list",setup(){const n=l(),t=d({isLoading:!0,isProductLoading:!1,product:[{state:!1,name:"五线谱",type:e.staff,base64:""},{state:!1,name:"首调",type:e.firstTone,base64:""},{state:!1,name:"固定调",type:e.fixedTone,base64:""}]});r(()=>{window.appName="colexiu",c.xmlUrl=n.xmlUrl,t.isLoading=!1});const o=async()=>{console.log("渲染完成")};return()=>s("div",{class:a.detail},[s("div",{id:"scrollContainer",class:[a.container,"hideCursor"]},[!t.isLoading&&s(u,{onRendered:o},null)])])}});export{y as default};

+ 1 - 1
dist/js/index-22bb3984.js → dist/js/index-4ef6f5b9.js

@@ -1 +1 @@
-import{c as l,d as i,j as e,bx as v,n as r,D as s,bM as w,s as m,q as A,t as u,A as P,P as $}from"./index-557da405.js";const[g,y]=l("skeleton-title"),p={round:Boolean,titleWidth:r};var T=i({name:g,props:p,setup(t){return()=>e("h3",{class:y([{round:t.round}]),style:{width:v(t.titleWidth)}},null)}});const b=s(T);var z=b;const[B,D]=l("skeleton-avatar"),N={avatarSize:r,avatarShape:m("round")};var R=i({name:B,props:N,setup(t){return()=>e("div",{class:D([t.avatarShape]),style:w(t.avatarSize)},null)}});const F=s(R);var I=F;const d="100%",L={round:Boolean,rowWidth:{type:r,default:d}},[U,C]=l("skeleton-paragraph");var E=i({name:U,props:L,setup(t){return()=>e("div",{class:C([{round:t.round}]),style:{width:t.rowWidth}},null)}});const H=s(E);var O=H;const[j,c]=l("skeleton"),q="60%",x={row:A(0),round:Boolean,title:Boolean,titleWidth:r,avatar:Boolean,avatarSize:r,avatarShape:m("round"),loading:u,animate:u,rowWidth:{type:[Number,String,Array],default:d}};var M=i({name:j,inheritAttrs:!1,props:x,setup(t,{slots:o,attrs:h}){const f=()=>{if(t.avatar)return e(I,{avatarShape:t.avatarShape,avatarSize:t.avatarSize},null)},S=()=>{if(t.title)return e(z,{round:t.round,titleWidth:t.titleWidth},null)},k=n=>{const{rowWidth:a}=t;return a===d&&n===+t.row-1?q:Array.isArray(a)?a[n]:a},W=()=>Array(+t.row).fill("").map((n,a)=>e(O,{key:a,round:t.round,rowWidth:v(k(a))},null)),_=()=>o.template?o.template():e($,null,[f(),e("div",{class:c("content")},[S(),W()])]);return()=>{var n;return t.loading?e("div",P({class:c({animate:t.animate,round:t.round})},h),[_()]):(n=o.default)==null?void 0:n.call(o)}}});const G=s(M);export{G as S};
+import{c as l,d as i,j as e,bx as v,n as r,D as s,bM as w,s as m,q as A,t as u,A as P,P as $}from"./index-139c70d3.js";const[g,y]=l("skeleton-title"),p={round:Boolean,titleWidth:r};var T=i({name:g,props:p,setup(t){return()=>e("h3",{class:y([{round:t.round}]),style:{width:v(t.titleWidth)}},null)}});const b=s(T);var z=b;const[B,D]=l("skeleton-avatar"),N={avatarSize:r,avatarShape:m("round")};var R=i({name:B,props:N,setup(t){return()=>e("div",{class:D([t.avatarShape]),style:w(t.avatarSize)},null)}});const F=s(R);var I=F;const d="100%",L={round:Boolean,rowWidth:{type:r,default:d}},[U,C]=l("skeleton-paragraph");var E=i({name:U,props:L,setup(t){return()=>e("div",{class:C([{round:t.round}]),style:{width:t.rowWidth}},null)}});const H=s(E);var O=H;const[j,c]=l("skeleton"),q="60%",x={row:A(0),round:Boolean,title:Boolean,titleWidth:r,avatar:Boolean,avatarSize:r,avatarShape:m("round"),loading:u,animate:u,rowWidth:{type:[Number,String,Array],default:d}};var M=i({name:j,inheritAttrs:!1,props:x,setup(t,{slots:o,attrs:h}){const f=()=>{if(t.avatar)return e(I,{avatarShape:t.avatarShape,avatarSize:t.avatarSize},null)},S=()=>{if(t.title)return e(z,{round:t.round,titleWidth:t.titleWidth},null)},k=n=>{const{rowWidth:a}=t;return a===d&&n===+t.row-1?q:Array.isArray(a)?a[n]:a},W=()=>Array(+t.row).fill("").map((n,a)=>e(O,{key:a,round:t.round,rowWidth:v(k(a))},null)),_=()=>o.template?o.template():e($,null,[f(),e("div",{class:c("content")},[S(),W()])]);return()=>{var n;return t.loading?e("div",P({class:c({animate:t.animate,round:t.round})},h),[_()]):(n=o.default)==null?void 0:n.call(o)}}});const G=s(M);export{G as S};

File diff suppressed because it is too large
+ 0 - 0
dist/js/index-7dad5569.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-890ff5f7.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-89f36e8b.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-b5659e41.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-de4e4bb8.js


+ 1 - 1
dist/js/index-legacy-6c2b033e.js → dist/js/index-legacy-21fcfe5f.js

@@ -1 +1 @@
-System.register(["./index-legacy-e9a839dc.js"],(function(e,t){"use strict";var i,n,a,o,r,s,d,l,c=document.createElement("style");return c.textContent="._skeleton_vtlsh_1{position:fixed;left:0;top:0;width:100vw;height:100vh;padding:.53333rem .8rem;background-color:#fff;z-index:1000;--van-skeleton-paragraph-height: .8rem}._detail_vtlsh_12{width:100vw;height:100vh;overflow:hidden;overflow-y:auto;--header-height: 1.65333rem;background:var(--container-background)}._detail_vtlsh_12 ._container_vtlsh_20{margin:0 .26667rem;border-radius:.26667rem}._detail_vtlsh_12 #musicAndSelection{overflow:initial!important;height:initial!important;max-height:initial!important}\n",document.head.appendChild(c),{setters:[e=>{i=e.d,n=e.F,a=e.W,o=e.bY,r=e.M,s=e.V,d=e.j,l=e.aT}],execute:function(){const t="_detail_vtlsh_12",c="_container_vtlsh_20";e("default",i({name:"music-list",setup(){const e=n(),i=a({isLoading:!0,isProductLoading:!1,product:[{state:!1,name:"五线谱",type:o.staff,base64:""},{state:!1,name:"首调",type:o.firstTone,base64:""},{state:!1,name:"固定调",type:o.fixedTone,base64:""}]});r((()=>{window.appName="colexiu",s.xmlUrl=e.xmlUrl,i.isLoading=!1}));const h=async()=>{console.log("渲染完成")};return()=>d("div",{class:t},[d("div",{id:"scrollContainer",class:[c,"hideCursor"]},[!i.isLoading&&d(l,{onRendered:h},null)])])}}))}}}));
+System.register(["./index-legacy-e352db17.js"],(function(e,t){"use strict";var i,n,a,o,r,s,d,l,c=document.createElement("style");return c.textContent="._skeleton_vtlsh_1{position:fixed;left:0;top:0;width:100vw;height:100vh;padding:.53333rem .8rem;background-color:#fff;z-index:1000;--van-skeleton-paragraph-height: .8rem}._detail_vtlsh_12{width:100vw;height:100vh;overflow:hidden;overflow-y:auto;--header-height: 1.65333rem;background:var(--container-background)}._detail_vtlsh_12 ._container_vtlsh_20{margin:0 .26667rem;border-radius:.26667rem}._detail_vtlsh_12 #musicAndSelection{overflow:initial!important;height:initial!important;max-height:initial!important}\n",document.head.appendChild(c),{setters:[e=>{i=e.d,n=e.F,a=e.W,o=e.bY,r=e.M,s=e.V,d=e.j,l=e.aT}],execute:function(){const t="_detail_vtlsh_12",c="_container_vtlsh_20";e("default",i({name:"music-list",setup(){const e=n(),i=a({isLoading:!0,isProductLoading:!1,product:[{state:!1,name:"五线谱",type:o.staff,base64:""},{state:!1,name:"首调",type:o.firstTone,base64:""},{state:!1,name:"固定调",type:o.fixedTone,base64:""}]});r((()=>{window.appName="colexiu",s.xmlUrl=e.xmlUrl,i.isLoading=!1}));const h=async()=>{console.log("渲染完成")};return()=>d("div",{class:t},[d("div",{id:"scrollContainer",class:[c,"hideCursor"]},[!i.isLoading&&d(l,{onRendered:h},null)])])}}))}}}));

File diff suppressed because it is too large
+ 0 - 0
dist/js/index-legacy-46433986.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-legacy-6756c292.js


+ 1 - 1
dist/js/index-legacy-aa2c56ab.js → dist/js/index-legacy-68f9fc7c.js

@@ -1 +1 @@
-System.register(["./index-legacy-e9a839dc.js"],(function(t,a){"use strict";var r,e,n,l,o,i,s,u,d,p,v,h;return{setters:[t=>{r=t.c,e=t.d,n=t.j,l=t.bx,o=t.n,i=t.D,s=t.bM,u=t.s,d=t.q,p=t.t,v=t.A,h=t.P}],execute:function(){const[a,c]=r("skeleton-title"),S={round:Boolean,titleWidth:o};var m=e({name:a,props:S,setup:t=>()=>n("h3",{class:c([{round:t.round}]),style:{width:l(t.titleWidth)}},null)}),y=i(m);const[w,W]=r("skeleton-avatar"),f={avatarSize:o,avatarShape:u("round")};var g=e({name:w,props:f,setup:t=>()=>n("div",{class:W([t.avatarShape]),style:s(t.avatarSize)},null)}),A=i(g);const k="100%",z={round:Boolean,rowWidth:{type:o,default:k}},[B,b]=r("skeleton-paragraph");var x=e({name:B,props:z,setup:t=>()=>n("div",{class:b([{round:t.round}]),style:{width:t.rowWidth}},null)}),j=i(x);const[q,D]=r("skeleton"),M={row:d(0),round:Boolean,title:Boolean,titleWidth:o,avatar:Boolean,avatarSize:o,avatarShape:u("round"),loading:p,animate:p,rowWidth:{type:[Number,String,Array],default:k}};var N=e({name:q,inheritAttrs:!1,props:M,setup(t,{slots:a,attrs:r}){const e=()=>{if(t.avatar)return n(A,{avatarShape:t.avatarShape,avatarSize:t.avatarSize},null)},o=()=>{if(t.title)return n(y,{round:t.round,titleWidth:t.titleWidth},null)},i=a=>{const{rowWidth:r}=t;return r===k&&a===+t.row-1?"60%":Array.isArray(r)?r[a]:r};return()=>{var s;return t.loading?n("div",v({class:D({animate:t.animate,round:t.round})},r),[a.template?a.template():n(h,null,[e(),n("div",{class:D("content")},[o(),Array(+t.row).fill("").map(((a,r)=>n(j,{key:r,round:t.round,rowWidth:l(i(r))},null)))])])]):null==(s=a.default)?void 0:s.call(a)}}});t("S",i(N))}}}));
+System.register(["./index-legacy-e352db17.js"],(function(t,a){"use strict";var r,e,n,l,o,i,s,u,d,p,v,h;return{setters:[t=>{r=t.c,e=t.d,n=t.j,l=t.bx,o=t.n,i=t.D,s=t.bM,u=t.s,d=t.q,p=t.t,v=t.A,h=t.P}],execute:function(){const[a,c]=r("skeleton-title"),S={round:Boolean,titleWidth:o};var m=e({name:a,props:S,setup:t=>()=>n("h3",{class:c([{round:t.round}]),style:{width:l(t.titleWidth)}},null)}),y=i(m);const[w,W]=r("skeleton-avatar"),f={avatarSize:o,avatarShape:u("round")};var g=e({name:w,props:f,setup:t=>()=>n("div",{class:W([t.avatarShape]),style:s(t.avatarSize)},null)}),A=i(g);const k="100%",z={round:Boolean,rowWidth:{type:o,default:k}},[B,b]=r("skeleton-paragraph");var x=e({name:B,props:z,setup:t=>()=>n("div",{class:b([{round:t.round}]),style:{width:t.rowWidth}},null)}),j=i(x);const[q,D]=r("skeleton"),M={row:d(0),round:Boolean,title:Boolean,titleWidth:o,avatar:Boolean,avatarSize:o,avatarShape:u("round"),loading:p,animate:p,rowWidth:{type:[Number,String,Array],default:k}};var N=e({name:q,inheritAttrs:!1,props:M,setup(t,{slots:a,attrs:r}){const e=()=>{if(t.avatar)return n(A,{avatarShape:t.avatarShape,avatarSize:t.avatarSize},null)},o=()=>{if(t.title)return n(y,{round:t.round,titleWidth:t.titleWidth},null)},i=a=>{const{rowWidth:r}=t;return r===k&&a===+t.row-1?"60%":Array.isArray(r)?r[a]:r};return()=>{var s;return t.loading?n("div",v({class:D({animate:t.animate,round:t.round})},r),[a.template?a.template():n(h,null,[e(),n("div",{class:D("content")},[o(),Array(+t.row).fill("").map(((a,r)=>n(j,{key:r,round:t.round,rowWidth:l(i(r))},null)))])])]):null==(s=a.default)?void 0:s.call(a)}}});t("S",i(N))}}}));

File diff suppressed because it is too large
+ 0 - 0
dist/js/index-legacy-7787e22d.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-legacy-93c90b23.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-legacy-c4f2a05f.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-legacy-e352db17.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/index-legacy-e9a0a46a.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/instrument-b316f97b.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/instrument-legacy-b016555e.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/modeView-7e57fec5.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/modeView-legacy-9a73f1b8.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/orchestra-a130c006.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/orchestra-legacy-5c5fd267.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/polyfills-bdbb13e0.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/report-share-cd5a973e.js


File diff suppressed because it is too large
+ 0 - 0
dist/js/report-share-legacy-223752da.js


+ 8 - 8
dist/orchestra.html

@@ -2,7 +2,7 @@
 <html lang="en">
 
 <head>
-  <script type="module" crossorigin src="./js/polyfills-6b4fae76.js"></script>
+  <script type="module" crossorigin src="./js/polyfills-bdbb13e0.js"></script>
 
   <meta charset="UTF-8" />
   <!-- <link rel="icon" type="image/svg+xml" href="/vite.svg" /> -->
@@ -41,12 +41,12 @@
       transition: opacity .3s;
     }
   </style>
-  <script type="module" crossorigin src="./js/orchestra-784c6644.js"></script>
-  <link rel="modulepreload" crossorigin href="./js/index-557da405.js">
-  <link rel="modulepreload" crossorigin href="./js/index-82ec78ed.js">
-  <link rel="modulepreload" crossorigin href="./js/index-7f5c97b1.js">
-  <link rel="modulepreload" crossorigin href="./js/index-e50e863f.js">
-  <link rel="modulepreload" crossorigin href="./js/index-22bb3984.js">
+  <script type="module" crossorigin src="./js/orchestra-a130c006.js"></script>
+  <link rel="modulepreload" crossorigin href="./js/index-139c70d3.js">
+  <link rel="modulepreload" crossorigin href="./js/index-204e8585.js">
+  <link rel="modulepreload" crossorigin href="./js/index-890ff5f7.js">
+  <link rel="modulepreload" crossorigin href="./js/index-7dad5569.js">
+  <link rel="modulepreload" crossorigin href="./js/index-4ef6f5b9.js">
   <link rel="stylesheet" href="./css/index-1ec513a0.css">
   <link rel="stylesheet" href="./css/index-85f95688.css">
   <link rel="stylesheet" href="./css/orchestra-8bc1a9c0.css">
@@ -71,7 +71,7 @@
   
   <script nomodule>!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",(function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()}),!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script>
   <script nomodule crossorigin id="vite-legacy-polyfill" src="./js/polyfills-legacy-1d2158fb.js"></script>
-  <script nomodule crossorigin id="vite-legacy-entry" data-src="./js/orchestra-legacy-9065e9a9.js">System.import(document.getElementById('vite-legacy-entry').getAttribute('data-src'))</script>
+  <script nomodule crossorigin id="vite-legacy-entry" data-src="./js/orchestra-legacy-5c5fd267.js">System.import(document.getElementById('vite-legacy-entry').getAttribute('data-src'))</script>
 </body>
 
 </html>

+ 5 - 5
dist/report-share.html

@@ -2,7 +2,7 @@
 <html lang="en">
 
 <head>
-  <script type="module" crossorigin src="./js/polyfills-6b4fae76.js"></script>
+  <script type="module" crossorigin src="./js/polyfills-bdbb13e0.js"></script>
 
   <meta charset="UTF-8" />
   <!-- <link rel="icon" type="image/svg+xml" href="/vite.svg" /> -->
@@ -25,10 +25,10 @@
       transition: opacity .3s;
     }
   </style>
-  <script type="module" crossorigin src="./js/report-share-4ae43dec.js"></script>
-  <link rel="modulepreload" crossorigin href="./js/index-557da405.js">
+  <script type="module" crossorigin src="./js/report-share-cd5a973e.js"></script>
+  <link rel="modulepreload" crossorigin href="./js/index-139c70d3.js">
   <link rel="modulepreload" crossorigin href="./js/plyr.min-c8c2777b.js">
-  <link rel="modulepreload" crossorigin href="./js/index-22bb3984.js">
+  <link rel="modulepreload" crossorigin href="./js/index-4ef6f5b9.js">
   <link rel="stylesheet" href="./css/index-1ec513a0.css">
   <link rel="stylesheet" href="./css/plyr-ad8ef5ae.css">
   <link rel="stylesheet" href="./css/report-share-0f4c3151.css">
@@ -53,7 +53,7 @@
   
   <script nomodule>!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",(function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()}),!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script>
   <script nomodule crossorigin id="vite-legacy-polyfill" src="./js/polyfills-legacy-1d2158fb.js"></script>
-  <script nomodule crossorigin id="vite-legacy-entry" data-src="./js/report-share-legacy-1716c7eb.js">System.import(document.getElementById('vite-legacy-entry').getAttribute('data-src'))</script>
+  <script nomodule crossorigin id="vite-legacy-entry" data-src="./js/report-share-legacy-223752da.js">System.import(document.getElementById('vite-legacy-entry').getAttribute('data-src'))</script>
 </body>
 
 </html>

+ 472 - 207
src/constant/instruments.ts

@@ -1,209 +1,436 @@
-const instruments: any = {
-	'Acoustic Grand Piano': '大钢琴',
-	'Bright Acoustic Piano': '明亮的钢琴',
-	'Electric Grand Piano': '电钢琴',
-	'Rhodes Piano': '柔和的电钢琴',
-	'Chorused Piano': '加合唱效果的电钢琴',
-	Harpsichord: '羽管键琴',
-	Clavichord: '科拉维科特琴',
-	Celesta: '钢片琴',
-	Glockenspiel: '钢片琴',
-	'Music box': '八音盒',
-	Vibraphone: '颤音琴',
-	Marimba: '马林巴',
-	Xylophone: '木琴',
-	'Tubular Bells': '管钟',
-	Dulcimer: '大扬琴',
-	'Hammond Organ': '击杆风琴',
-	'Percussive Organ': '打击式风琴',
-	'Rock Organ': '摇滚风琴',
-	'Church Organ': '教堂风琴',
-	'Reed Organ': '簧管风琴',
-	Accordian: '手风琴',
-	Harmonica: '口琴',
-	'Tango Accordian': '探戈手风琴',
-	'Acoustic Guitar': '钢弦吉他',
-	'Electric Guitar': '闷音电吉他',
-	'Overdriven Guitar': '加驱动效果的电吉他',
-	'Distortion Guitar': '加失真效果的电吉他',
-	'Guitar Harmonics': '吉他和音',
-	'Acoustic Bass': '大贝司',
-	'Electric Bass': '电贝司',
-	'Fretless Bass': '无品贝司',
-	'Slap Bass': '掌击',
-	'Synth Bass': '电子合成',
-	Violin: '小提琴',
-	Viola: '中提琴',
-	Cello: '大提琴',
-	Contrabass: '低音大提琴',
-	'Tremolo Strings': '弦乐群颤音音色',
-	'Pizzicato Strings': '弦乐群拨弦音色',
-	'Orchestral Harp': '竖琴',
-	Timpani: '定音鼓',
-	'String Ensemble': '弦乐合奏音色',
-	'Synth Strings': '合成弦乐合奏音色',
-	'Choir Aahs': '人声合唱',
-	'Voice Oohs': '人声',
-	'Synth Voice': '合成人声',
-	'Orchestra Hit': '管弦乐敲击齐奏',
-	Trumpet: '小号',
-	Trombone: '长号',
-	Tuba: '大号',
-	'Muted Trumpet': '加弱音器小号',
-	'French Horn': '法国号',
-	'Brass Section': '铜管组',
-	'Synth Brass': '合成铜管音色',
-	'Soprano Sax': '高音萨克斯管',
-	'Alto Sax': '中音萨克斯管',
-	'Tenor Sax': '次中音萨克斯管',
-	'Baritone Sax': '低音萨克斯管',
-	Oboe: '双簧管',
-	'English Horn': '英国管',
-	Bassoon: '巴松',
-	'Soprano Saxophone': '高音萨克斯管',
-	'Alto Saxophone': '中音萨克斯管',
-	'Tenor Saxophone': '次中音萨克斯管',
-	'Baritone Saxophone': '低音萨克斯管',
-	Piccolo: '短笛',
-	Flute: '长笛',
-	Recorder: '竖笛',
-	'Soprano Recorder': '高音竖笛',
-	'Pan Flute': '排箫',
-	'Bottle Blow': '瓶木管',
-	Whistle: '口哨声',
-	Ocarina: '陶笛',
-	Lead: '合成主音',
-	'Lead lead': '合成主音',
-	'Pad age': '合成音色',
-	Pad: '合成音色',
-	FX: '合成效果  科幻',
-	Sitar: '西塔尔',
-	Banjo: '班卓琴',
-	Shamisen: '三昧线',
-	Koto: '十三弦筝',
-	Kalimba: '卡林巴',
-	Bagpipe: '风笛',
-	Fiddle: '民族提琴',
-	Shanai: '山奈',
-	'Tinkle Bell': '叮当铃',
-	Agogos: '阿戈戈铃',
-	'Steel Drums': '钢鼓',
-	'Taiko Drum': '太鼓',
-	'Melodic Toms': '嗵嗵鼓',
-	'Synth Drums': '合成鼓',
-	'Reverse Cymbals': '反向镲',
-	'Agogo Bells': '阿戈戈铃',
-	'Taiko Drums': '太鼓',
-	Bongos: '邦戈鼓',
-	'Bongo Bell': '邦戈铃',
-	Congas: '康加鼓',
-	Guiro: '刮壶',
-	'Guitar Fret Noise': '吉他换把杂音',
-	'Breath Noise': '呼吸声',
-	Seashore: '海浪声',
-	'Bird Tweet': '鸟鸣',
-	'Telephone Ring': '电话铃',
-	Helicopter: '直升机',
-	Applause: '鼓掌声',
-	Gunshot: '枪声',
-	'Acoustic Bass Drum': '大鼓',
-	'Bass Drum': '大鼓',
-	'Side Drum': '小鼓鼓边',
-	'Acoustic Snare': '小鼓',
-	'Hand Claps': '拍手',
-	'Electric Snare': '小鼓',
-	'Low Floor Tom': '低音嗵鼓',
-	'Closed Hi-Hat': '闭合踩镲',
-	'High Floor Tom': '高音落地嗵鼓',
-	'Pedal Hi-Hat': '脚踏踩镲',
-	'Low Tom': '低音嗵鼓',
-	'Open Hi-Hat': '开音踩镲',
-	'Low-Mid Tom': '中低音嗵鼓',
-	'Hi Mid Tom': '高音鼓',
-	'Crash Cymbals': '对镲',
-	'High Tom': '高音嗵鼓',
-	'Ride Cymbals': '叮叮镲',
-	'Chinese Cymbals': '中国镲',
-	'Ride Bell': '圆铃',
-	Tambourine: '铃鼓',
-	'Splash Cymbal': '溅音镲',
-	Cowbell: '牛铃',
-	'Crash Cymbal': '强音钹',
-	'Vibra-Slap': '颤音器',
-	'Ride Cymbal': '打点钹',
-	'Hi Bongo': '高音邦戈鼓',
-	'Low Bongo': '低音邦戈鼓',
-	'Mute Hi Conga': '弱音高音康加鼓',
-	'Open Hi Conga': '强音高音康加鼓',
-	'Low Conga': '低音康加鼓',
-	'High Timbale': '高音天巴鼓',
-	'Low Timbale': '低音天巴鼓',
-	'High Agogo': '高音阿戈戈铃',
-	'Low Agogo': '低音阿戈戈铃',
-	Cabasa: '卡巴萨',
-	Maracas: '沙锤',
-	'Short Whistle': '短口哨',
-	'Long Whistle': '长口哨',
-	'Short Guiro': '短刮壶',
-	'Long Guiro': '长刮壶',
-	Claves: '响棒',
-	'Hi Wood Block': '高音木鱼',
-	'Low Wood Block': '低音木鱼',
-	'Mute Triangle': '弱音三角铁',
-	'Open Triangle': '强音三角铁',
-	'Drum Set': '架子鼓',
-	'Hulusi flute': '葫芦丝',
-	Melodica: '口风琴',
-	'Snare Drum': '小军鼓',
-	'Horn in F': '圆号',
-	'Horns in F': '圆号',
-	Triangle: '三角铁',
-	Vibrato: '颤音琴',
-	'Suspend Cymbals': '吊镲',
-	'Suspended Cymbals': '吊镲',
-	'Tom-Toms': '嗵嗵鼓',
-	Bell: '铃铛',
-	Bells: '铃铛',
-	'Alto Clarinet': '中音单簧管',
-	'Bass Clarinet': '低音单簧管',
-	Clarinet: '单簧管',
-	Cornet: '短号',
-	Euphonium: '上低音号',
-	'crash cymbals': '对镲',
-	Castanets: '响板',
-	Shaker: '沙锤',
-	'Mark tree': '音树',
-	Chimes: '管钟',
-	'Mark Tree': '音树',
-	'Tom-toms': '嗵嗵鼓',
-	'Hi-Hat': '踩镲',
-	'Sleigh Bells': '雪橇铃',
-	Flexatone: '弹音器',
-	'Brake drum': '闸鼓',
-	Gong: '锣',
-	'concert tom': '音乐会嗵嗵鼓',
-	'brake drum': '车轮鼓',
-	'finger cymbal': '指钹',
-	'ride cymbal': '叮叮镲',
-	'Concert Toms': '音乐会嗵嗵鼓',
-	Vibraslap: '弹音器',
-	'Wood Blocks': '木鱼',
-	'Temple Blocks': '木鱼',
-	'Wood Block': '木鱼',
-	'Field Drum': '军鼓',
-	'Quad-Toms': '筒鼓',
-	Quads: '筒鼓',
-	'Drums set': '架子鼓',
-	'High Bongo': '邦戈',
-	Timbales: '天巴鼓',
-	'rain stick': '雨棒',
-	'String Bass': '弦乐低音',
-	'Floor Tom': '侧嗵鼓',
-	'Brake Drum': '闸鼓',
-	'Tam-tam': '大锣',
-	Cymbal: '镲',
-	Cymbals: '镲'
-};
+// const instruments: any = {
+// 	'Acoustic Grand Piano': '大钢琴',
+// 	'Bright Acoustic Piano': '明亮的钢琴',
+// 	'Electric Grand Piano': '电钢琴',
+// 	'Rhodes Piano': '柔和的电钢琴',
+// 	'Chorused Piano': '加合唱效果的电钢琴',
+// 	Harpsichord: '羽管键琴',
+// 	Clavichord: '科拉维科特琴',
+// 	Celesta: '钢片琴',
+// 	Glockenspiel: '钢片琴',
+// 	'Music box': '八音盒',
+// 	Vibraphone: '颤音琴',
+// 	Marimba: '马林巴',
+// 	Xylophone: '木琴',
+// 	'Tubular Bells': '管钟',
+// 	Dulcimer: '大扬琴',
+// 	'Hammond Organ': '击杆风琴',
+// 	'Percussive Organ': '打击式风琴',
+// 	'Rock Organ': '摇滚风琴',
+// 	'Church Organ': '教堂风琴',
+// 	'Reed Organ': '簧管风琴',
+// 	Accordian: '手风琴',
+// 	Harmonica: '口琴',
+// 	'Tango Accordian': '探戈手风琴',
+// 	'Acoustic Guitar': '钢弦吉他',
+// 	'Electric Guitar': '闷音电吉他',
+// 	'Overdriven Guitar': '加驱动效果的电吉他',
+// 	'Distortion Guitar': '加失真效果的电吉他',
+// 	'Guitar Harmonics': '吉他和音',
+// 	'Acoustic Bass': '大贝司',
+// 	'Electric Bass': '电贝司',
+// 	'Fretless Bass': '无品贝司',
+// 	'Slap Bass': '掌击',
+// 	'Synth Bass': '电子合成',
+// 	Violin: '小提琴',
+// 	Viola: '中提琴',
+// 	Cello: '大提琴',
+// 	Contrabass: '低音大提琴',
+// 	'Tremolo Strings': '弦乐群颤音音色',
+// 	'Pizzicato Strings': '弦乐群拨弦音色',
+// 	'Orchestral Harp': '竖琴',
+// 	Timpani: '定音鼓',
+// 	'String Ensemble': '弦乐合奏音色',
+// 	'Synth Strings': '合成弦乐合奏音色',
+// 	'Choir Aahs': '人声合唱',
+// 	'Voice Oohs': '人声',
+// 	'Synth Voice': '合成人声',
+// 	'Orchestra Hit': '管弦乐敲击齐奏',
+// 	Trumpet: '小号',
+// 	Trombone: '长号',
+// 	Tuba: '大号',
+// 	'Muted Trumpet': '加弱音器小号',
+// 	'French Horn': '法国号',
+// 	'Brass Section': '铜管组',
+// 	'Synth Brass': '合成铜管音色',
+// 	'Soprano Sax': '高音萨克斯管',
+// 	'Alto Sax': '中音萨克斯管',
+// 	'Tenor Sax': '次中音萨克斯管',
+// 	'Baritone Sax': '低音萨克斯管',
+// 	Oboe: '双簧管',
+// 	'English Horn': '英国管',
+// 	Bassoon: '巴松',
+// 	'Soprano Saxophone': '高音萨克斯管',
+// 	'Alto Saxophone': '中音萨克斯管',
+// 	'Tenor Saxophone': '次中音萨克斯管',
+// 	'Baritone Saxophone': '低音萨克斯管',
+// 	Piccolo: '短笛',
+// 	Flute: '长笛',
+// 	Recorder: '竖笛',
+// 	'Soprano Recorder': '高音竖笛',
+// 	'Pan Flute': '排箫',
+// 	'Bottle Blow': '瓶木管',
+// 	Whistle: '口哨声',
+// 	Ocarina: '陶笛',
+// 	Lead: '合成主音',
+// 	'Lead lead': '合成主音',
+// 	'Pad age': '合成音色',
+// 	Pad: '合成音色',
+// 	FX: '合成效果  科幻',
+// 	Sitar: '西塔尔',
+// 	Banjo: '班卓琴',
+// 	Shamisen: '三昧线',
+// 	Koto: '十三弦筝',
+// 	Kalimba: '卡林巴',
+// 	Bagpipe: '风笛',
+// 	Fiddle: '民族提琴',
+// 	Shanai: '山奈',
+// 	'Tinkle Bell': '叮当铃',
+// 	Agogos: '阿戈戈铃',
+// 	'Steel Drums': '钢鼓',
+// 	'Taiko Drum': '太鼓',
+// 	'Melodic Toms': '嗵嗵鼓',
+// 	'Synth Drums': '合成鼓',
+// 	'Reverse Cymbals': '反向镲',
+// 	'Agogo Bells': '阿戈戈铃',
+// 	'Taiko Drums': '太鼓',
+// 	Bongos: '邦戈鼓',
+// 	'Bongo Bell': '邦戈铃',
+// 	Congas: '康加鼓',
+// 	Guiro: '刮壶',
+// 	'Guitar Fret Noise': '吉他换把杂音',
+// 	'Breath Noise': '呼吸声',
+// 	Seashore: '海浪声',
+// 	'Bird Tweet': '鸟鸣',
+// 	'Telephone Ring': '电话铃',
+// 	Helicopter: '直升机',
+// 	Applause: '鼓掌声',
+// 	Gunshot: '枪声',
+// 	'Acoustic Bass Drum': '大鼓',
+// 	'Bass Drum': '大鼓',
+// 	'Side Drum': '小鼓鼓边',
+// 	'Acoustic Snare': '小鼓',
+// 	'Hand Claps': '拍手',
+// 	'Electric Snare': '小鼓',
+// 	'Low Floor Tom': '低音嗵鼓',
+// 	'Closed Hi-Hat': '闭合踩镲',
+// 	'High Floor Tom': '高音落地嗵鼓',
+// 	'Pedal Hi-Hat': '脚踏踩镲',
+// 	'Low Tom': '低音嗵鼓',
+// 	'Open Hi-Hat': '开音踩镲',
+// 	'Low-Mid Tom': '中低音嗵鼓',
+// 	'Hi Mid Tom': '高音鼓',
+// 	'Crash Cymbals': '对镲',
+// 	'High Tom': '高音嗵鼓',
+// 	'Ride Cymbals': '叮叮镲',
+// 	'Chinese Cymbals': '中国镲',
+// 	'Ride Bell': '圆铃',
+// 	Tambourine: '铃鼓',
+// 	'Splash Cymbal': '溅音镲',
+// 	Cowbell: '牛铃',
+// 	'Crash Cymbal': '强音钹',
+// 	'Vibra-Slap': '颤音器',
+// 	'Ride Cymbal': '打点钹',
+// 	'Hi Bongo': '高音邦戈鼓',
+// 	'Low Bongo': '低音邦戈鼓',
+// 	'Mute Hi Conga': '弱音高音康加鼓',
+// 	'Open Hi Conga': '强音高音康加鼓',
+// 	'Low Conga': '低音康加鼓',
+// 	'High Timbale': '高音天巴鼓',
+// 	'Low Timbale': '低音天巴鼓',
+// 	'High Agogo': '高音阿戈戈铃',
+// 	'Low Agogo': '低音阿戈戈铃',
+// 	Cabasa: '卡巴萨',
+// 	Maracas: '沙锤',
+// 	'Short Whistle': '短口哨',
+// 	'Long Whistle': '长口哨',
+// 	'Short Guiro': '短刮壶',
+// 	'Long Guiro': '长刮壶',
+// 	Claves: '响棒',
+// 	'Hi Wood Block': '高音木鱼',
+// 	'Low Wood Block': '低音木鱼',
+// 	'Mute Triangle': '弱音三角铁',
+// 	'Open Triangle': '强音三角铁',
+// 	'Drum Set': '架子鼓',
+// 	'Hulusi flute': '葫芦丝',
+// 	Melodica: '口风琴',
+// 	'Snare Drum': '小军鼓',
+// 	'Horn in F': '圆号',
+// 	'Horns in F': '圆号',
+// 	Triangle: '三角铁',
+// 	Vibrato: '颤音琴',
+// 	'Suspend Cymbals': '吊镲',
+// 	'Suspended Cymbals': '吊镲',
+// 	'Tom-Toms': '嗵嗵鼓',
+// 	Bell: '铃铛',
+// 	Bells: '铃铛',
+// 	'Alto Clarinet': '中音单簧管',
+// 	'Bass Clarinet': '低音单簧管',
+// 	Clarinet: '单簧管',
+// 	Cornet: '短号',
+// 	Euphonium: '上低音号',
+// 	'crash cymbals': '对镲',
+// 	Castanets: '响板',
+// 	Shaker: '沙锤',
+// 	'Mark tree': '音树',
+// 	Chimes: '管钟',
+// 	'Mark Tree': '音树',
+// 	'Tom-toms': '嗵嗵鼓',
+// 	'Hi-Hat': '踩镲',
+// 	'Sleigh Bells': '雪橇铃',
+// 	Flexatone: '弹音器',
+// 	'Brake drum': '闸鼓',
+// 	Gong: '锣',
+// 	'concert tom': '音乐会嗵嗵鼓',
+// 	'brake drum': '车轮鼓',
+// 	'finger cymbal': '指钹',
+// 	'ride cymbal': '叮叮镲',
+// 	'Concert Toms': '音乐会嗵嗵鼓',
+// 	Vibraslap: '弹音器',
+// 	'Wood Blocks': '木鱼',
+// 	'Temple Blocks': '木鱼',
+// 	'Wood Block': '木鱼',
+// 	'Field Drum': '军鼓',
+// 	'Quad-Toms': '筒鼓',
+// 	Quads: '筒鼓',
+// 	'Drums set': '架子鼓',
+// 	'High Bongo': '邦戈',
+// 	Timbales: '天巴鼓',
+// 	'rain stick': '雨棒',
+// 	'String Bass': '弦乐低音',
+// 	'Floor Tom': '侧嗵鼓',
+// 	'Brake Drum': '闸鼓',
+// 	'Tam-tam': '大锣',
+// 	Cymbal: '镲',
+// 	Cymbals: '镲'
+// };
+
+// 乐器code码
+export const musicalInstrumentCodeInfo = [
+	{
+	  name: '长笛',
+	  code: 'Flute',
+	  id: 1
+	},
+	{
+	  name: '短笛',
+	  code: 'Piccolo',
+	  id: 2
+	},
+	{
+	  name: '单簧管',
+	  code: 'Clarinet',
+	  id: 3
+	},
+	{
+	  name: '低音单簧管',
+	  code: 'Bass Clarinet',
+	  id: 4
+	},
+	{
+	  name: '中音萨克斯',
+	  code: 'Alto Saxophone',
+	  id: 5
+	},
+	{
+	  name: '次中音萨克斯',
+	  code: 'Tenor Saxophone',
+	  id: 6
+	},
+	{
+	  name: '高音萨克斯',
+	  code: 'Soprano Saxophone',
+	  id: 7
+	},
+	{
+	  name: '上低音萨克斯',
+	  code: 'Baritone Saxophone',
+	  id: 8
+	},
+	{
+	  name: '双簧管',
+	  code: 'Oboe',
+	  id: 9
+	},
+	{
+	  name: '大管',
+	  code: 'Bassoon',
+	  id: 10
+	},
+	{
+	  name: '小号',
+	  code: 'Trumpet',
+	  id: 11
+	},
+	{
+	  name: '圆号',
+	  code: 'Horn',
+	  id: 12
+	},
+	{
+	  name: '长号',
+	  code: 'Trombone',
+	  id: 13
+	},
+	{
+	  name: '上低音号',
+	  code: 'Baritone',
+	  id: 14
+	},
+	{
+	  name: '次中音号',
+	  code: 'Euphonium',
+	  id: 15
+	},
+	{
+	  name: '大号',
+	  code: 'Tuba',
+	  id: 16
+	},
+	{
+	  name: '钢琴',
+	  code: 'Piano',
+	  id: 17
+	},
+	{
+	  name: '电钢琴',
+	  code: 'Electronical Piano',
+	  id: 18
+	},
+	{
+	  name: '钢片琴',
+	  code: 'Glockenspiel',
+	  id: 19
+	},
+	{
+	  name: '小提琴',
+	  code: 'Violin',
+	  id: 20
+	},
+	{
+	  name: '中提琴',
+	  code: 'Viola',
+	  id: 21
+	},
+	{
+	  name: '大提琴',
+	  code: 'Violoncello',
+	  id: 22
+	},
+	{
+	  name: '低音提琴',
+	  code: 'Contrabass',
+	  id: 23
+	},
+	{
+	  name: '架子鼓',
+	  code: 'Drum Set',
+	  id: 24
+	},
+	{
+	  name: '小鼓',
+	  code: 'Snare Drum',
+	  id: 25
+	},
+	{
+	  name: '马林巴',
+	  code: 'Marimba',
+	  id: 26
+	},
+	{
+	  name: '颤音琴',
+	  code: 'Vibraphone',
+	  id: 27
+	},
+	{
+	  name: '钟琴',
+	  code: 'Chimes',
+	  id: 28
+	},
+	{
+	  name: '木琴',
+	  code: 'Xylophone',
+	  id: 29
+	},
+	{
+	  name: '管钟',
+	  code: 'Tubular Bells',
+	  id: 30
+	},
+	{
+	  name: '定音鼓',
+	  code: 'Timpani',
+	  id: 31
+	},
+	{
+	  name: '键盘',
+	  code: 'Mallets',
+	  id: 32
+	},
+	{
+	  name: '排箫',
+	  code: 'Panpipes',
+	  id: 33
+	},
+	{
+	  name: '陶笛',
+	  code: 'Ocarina',
+	  id: 34
+	},
+	{
+	  name: '陶笛',
+	  code: 'Alto Ocarina',
+	  id: 34
+	},
+	{
+	  name: '葫芦丝',
+	  code: 'Woodwind',
+	  id: 35
+	},
+	{
+	  name: '葫芦丝',
+	  code: 'Hulusi',
+	  id: 35
+	},
+	{
+	  name: '口风琴',
+	  code: 'Nai',
+	  id: 36
+	},
+	{
+	  name: '口风琴',
+	  code: 'Melodica',
+	  id: 36
+	},
+	{
+	  name: '德式竖笛',
+	  code: 'Tenor Recorder',
+	  id: 37
+	},
+	{
+	  name: '德式竖笛',
+	  code: 'German Recorder',
+	  id: 37
+	},
+	{
+	  name: '英式竖笛',
+	  code: 'Baroque Recorder',
+	  id: 38
+	},
+	{
+	  name: '高音陶笛',
+	  code: 'Whistling',
+	  id: 39
+	},
+	{
+	  name: '高音陶笛',
+	  code: 'Soprano Ocarina',
+	  id: 39
+	},
+]
+
+export let instruments: any = {}
+
 /** 获取分轨名称 */
 export const getInstrumentName = (name = '') => {
   name = name.toLocaleLowerCase().replace(/ /g, '')
@@ -274,4 +501,42 @@ export const sortMusical = (name: string, index: number) => {
 		break;
 	}
 	return sortId
-  }
+  }
+
+
+export const fixInstrumentNameCode = (trackId: string | number) => {
+	let code: any;
+	const trackName = instruments[trackId] || ''
+	if (trackName.includes('长笛')) {
+		code = 2
+	} else if (trackName.includes('单簧管')) {
+		code = 4
+	} else if (trackName.includes('萨克斯')) {
+		code = 5
+	} else if (trackName.includes('小号')) {
+		code = 12
+	} else if (trackName.includes('圆号')) {
+		code = 13
+	} else if (trackName.includes('长号')) {
+		code = 14
+	} else if (trackName.includes('上低音号')) {
+		code = 15
+	} else if (trackName.includes('大号')) {
+		code = 17
+	} else if (trackName.includes('德式竖笛')) {
+		code = 'piccolo'
+	} else if (trackName.includes('英式竖笛')) {
+		code = 'baroque-recorder'
+	} else if (trackName.includes('葫芦丝')) {
+		code = 'hulusi-flute'
+	} else if (trackName.includes('排箫')) {
+		code = 'pan-flute'
+	} else if (trackName.includes('高音陶笛')) {
+		code = 'whistling'
+	} else if (trackName.includes('陶笛')) {
+		code = 'ocarina'
+	} else if (trackName.includes('口风琴')) {
+		code = 'melodica'
+	}
+	return code;
+}

+ 1 - 1
src/page-instrument/evaluat-model/index.tsx

@@ -3,7 +3,7 @@ import { connectWebsocket, evaluatingData, handleEndBegin, handleStartBegin, han
 import Earphone from "./earphone";
 import styles from "./index.module.less";
 import SoundEffect from "./sound-effect";
-import state, { handleRessetState, resetPlaybackToStart, musicalInstrumentCodeInfo, clearSelection, initSetPlayRate, resetBaseRate } from "/src/state";
+import state, { handleRessetState, resetPlaybackToStart, clearSelection, initSetPlayRate, resetBaseRate } from "/src/state";
 import { storeData } from "/src/store";
 import { browser } from "/src/utils";
 import { getNoteByMeasuresSlursStart } from "/src/helpers/formateMusic";

+ 43 - 229
src/state.ts

@@ -11,7 +11,7 @@ import { toggleFollow } from "./view/follow-practice";
 import { browser, setStorageSpeed, setGlobalData } from "./utils";
 import { api_cloudGetMediaStatus, api_createMusicPlayer, api_cloudChangeSpeed, api_cloudSuspend, api_cloudSetCurrentTime, api_cloudDestroy } from "./helpers/communication";
 import { verifyCanRepeat, getDuration, xmlAddPartName } from "./helpers/formateMusic";
-import { getMusicSheetDetail } from "./utils/baseApi"
+import { getMusicSheetDetail, getInstrumentCode } from "./utils/baseApi"
 import { getQuery } from "/src/utils/queryString";
 import { followData, skipNotePractice } from "/src/view/follow-practice/index"
 import { changeSongSourceByBeat } from "/src/view/audio-list"
@@ -23,6 +23,7 @@ import { headTopData } from "/src/page-instrument/header-top/index";
 import { api_lessonTrainingTrainingStudentDetail } from "/src/page-instrument/api"
 import { undoData, moveData } from "/src/view/plugins/move-music-score"
 import { speedBeatTo, unitImgs } from "/src/helpers/beatConfig"
+import { musicalInstrumentCodeInfo, instruments, fixInstrumentNameCode } from "/src/constant/instruments";
 
 const query: any = getQuery();
 
@@ -59,230 +60,6 @@ export type ISonges = {
  */
 const classids = [1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 30, 31, 35, 36, 38, 108, 150, 151, 152, 153, 154, 155, 156, 157, 158, 178, 179, 180, 181, 182]; // 大雅金唐, 竖笛教程, 声部训练展开的分类ID
 
-// 乐器code码
-export const musicalInstrumentCodeInfo = [
-  {
-    name: '长笛',
-    code: 'Flute',
-    id: 1
-  },
-  {
-    name: '短笛',
-    code: 'Piccolo',
-    id: 2
-  },
-  {
-    name: '单簧管',
-    code: 'Clarinet',
-    id: 3
-  },
-  {
-    name: '低音单簧管',
-    code: 'Bass Clarinet',
-    id: 4
-  },
-  {
-    name: '中音萨克斯',
-    code: 'Alto Saxophone',
-    id: 5
-  },
-  {
-    name: '次中音萨克斯',
-    code: 'Tenor Saxophone',
-    id: 6
-  },
-  {
-    name: '高音萨克斯',
-    code: 'Soprano Saxophone',
-    id: 7
-  },
-  {
-    name: '上低音萨克斯',
-    code: 'Baritone Saxophone',
-    id: 8
-  },
-  {
-    name: '双簧管',
-    code: 'Oboe',
-    id: 9
-  },
-  {
-    name: '大管',
-    code: 'Bassoon',
-    id: 10
-  },
-  {
-    name: '小号',
-    code: 'Trumpet',
-    id: 11
-  },
-  {
-    name: '圆号',
-    code: 'Horn',
-    id: 12
-  },
-  {
-    name: '长号',
-    code: 'Trombone',
-    id: 13
-  },
-  {
-    name: '上低音号',
-    code: 'Baritone',
-    id: 14
-  },
-  {
-    name: '次中音号',
-    code: 'Euphonium',
-    id: 15
-  },
-  {
-    name: '大号',
-    code: 'Tuba',
-    id: 16
-  },
-  {
-    name: '钢琴',
-    code: 'Piano',
-    id: 17
-  },
-  {
-    name: '电钢琴',
-    code: 'Electronical Piano',
-    id: 18
-  },
-  {
-    name: '钢片琴',
-    code: 'Glockenspiel',
-    id: 19
-  },
-  {
-    name: '小提琴',
-    code: 'Violin',
-    id: 20
-  },
-  {
-    name: '中提琴',
-    code: 'Viola',
-    id: 21
-  },
-  {
-    name: '大提琴',
-    code: 'Violoncello',
-    id: 22
-  },
-  {
-    name: '低音提琴',
-    code: 'Contrabass',
-    id: 23
-  },
-  {
-    name: '架子鼓',
-    code: 'Drum Set',
-    id: 24
-  },
-  {
-    name: '小鼓',
-    code: 'Snare Drum',
-    id: 25
-  },
-  {
-    name: '马林巴',
-    code: 'Marimba',
-    id: 26
-  },
-  {
-    name: '颤音琴',
-    code: 'Vibraphone',
-    id: 27
-  },
-  {
-    name: '钟琴',
-    code: 'Chimes',
-    id: 28
-  },
-  {
-    name: '木琴',
-    code: 'Xylophone',
-    id: 29
-  },
-  {
-    name: '管钟',
-    code: 'Tubular Bells',
-    id: 30
-  },
-  {
-    name: '定音鼓',
-    code: 'Timpani',
-    id: 31
-  },
-  {
-    name: '键盘',
-    code: 'Mallets',
-    id: 32
-  },
-  {
-    name: '排箫',
-    code: 'Panpipes',
-    id: 33
-  },
-  {
-    name: '陶笛',
-    code: 'Ocarina',
-    id: 34
-  },
-  {
-    name: '陶笛',
-    code: 'Alto Ocarina',
-    id: 34
-  },
-  {
-    name: '葫芦丝',
-    code: 'Woodwind',
-    id: 35
-  },
-  {
-    name: '葫芦丝',
-    code: 'Hulusi',
-    id: 35
-  },
-  {
-    name: '口风琴',
-    code: 'Nai',
-    id: 36
-  },
-  {
-    name: '口风琴',
-    code: 'Melodica',
-    id: 36
-  },
-  {
-    name: '德式竖笛',
-    code: 'Tenor Recorder',
-    id: 37
-  },
-  {
-    name: '德式竖笛',
-    code: 'German Recorder',
-    id: 37
-  },
-  {
-    name: '英式竖笛',
-    code: 'Baroque Recorder',
-    id: 38
-  },
-  {
-    name: '高音陶笛',
-    code: 'Whistling',
-    id: 39
-  },
-  {
-    name: '高音陶笛',
-    code: 'Soprano Ocarina',
-    id: 39
-  },
-]
-
 const state = reactive({
   /** 来源 : PC , app */
   platform: "" as IPlatform,
@@ -1420,8 +1197,26 @@ export const getMusicDetail = async (id: string, type?: string) => {
   }
 };
 
+// 获取后台配置的声轨编码
+const initInstrumentCode = async () => {
+  const res = await getInstrumentCode();
+  if (res?.code === 200 && res.data?.length) {
+    for (let item of res.data) {
+      const codes = item.code.split(',') || [item.code]
+      codes.forEach((code: any) => {
+        instruments[code] = item.name
+      })
+    }
+  }
+  // console.log('声轨codes',instruments)
+}
 
 const getMusicInfo = async (res: any) => {
+  try {
+    await initInstrumentCode()
+  } catch (error) {
+    // console.log(error)
+  }
   // 是否支持总谱
   state.isScoreRender = res.data?.isScoreRender
   // 是否默认显示总谱
@@ -1555,14 +1350,14 @@ function initMusicSource(data: any, tracks: string[], partIndex: number, workRec
           // 当选择多个分轨时候
           state.combinePartIndexs.map( partI => {
             const musicSheetSound = musicSheetSoundList.find((item:any)=>{
-              return item.track?.toLowerCase().trim() === tracks[partI]?.toLowerCase().trim()
+              return item.track?.toLowerCase().trim() === tracks[partI]?.toLowerCase().trim() && item.audioPlayType === "PLAY"
             })
             musicSheetSound?.audioFileUrl && (audioData.combineMusics[partI] = musicSheetSound.audioFileUrl)
           })
         }else{
           tracks.map((itemTrack:any, partI:number) => {
             const musicSheetSound = musicSheetSoundList.find((item:any)=>{
-              return item.track?.toLowerCase().trim() === itemTrack?.toLowerCase().trim()
+              return item.track?.toLowerCase().trim() === itemTrack?.toLowerCase().trim() && item.audioPlayType === "PLAY"
             })
             musicSheetSound?.audioFileUrl && (audioData.combineMusics[partI] = musicSheetSound.audioFileUrl)
           })
@@ -1738,7 +1533,9 @@ const setState = (data: any, index: number) => {
   if (state.isSimplePage) {
     state.isCombineRender = false;
   }
-  setCustom(state.isCombineRender ? data.musicSheetSoundList?.length : 0);
+  // 多分轨合并显示的曲子,有可能没有原音文件,minCombineNum的最小值至少为2
+  const minCombineNum = data.musicSheetSoundList?.length ? Math.max(data.musicSheetSoundList?.length, 2) : 2;
+  setCustom(state.isCombineRender ? minCombineNum : 0);
   // 解析扩展字段
   if (data.extConfigJson) {
     try {
@@ -1805,7 +1602,23 @@ const setState = (data: any, index: number) => {
    * 获取指法code
    */
   // const code = state.isConcert ? matchVoicePart(state.trackId, "CONCERT") : matchVoicePart(state.musicalCodeId, "SINGLE");
-  const code = matchVoicePart(state.trackId, "CONCERT")
+  
+  // 如果是midi的曲子,midi的曲子没有musicSheetSoundList原音列表,指法需要通过musicalInstruments字段判断
+  if (data.musicSheetType === "SINGLE" && data.playMode === 'MIDI' && data.musicalInstruments?.length) {
+    const currentInstrumentId = query.instrumentId || storeData.user?.instrumentId;
+    let midiTrackId = null
+    if (currentInstrumentId) {
+      midiTrackId = data.musicalInstruments.find((item: any) => item.id == currentInstrumentId)?.code?.split(',')?.[0]
+    } else {
+      midiTrackId = data.musicalInstruments[0]?.code?.split(',')?.[0]
+    }
+    state.trackId = midiTrackId || state.trackId
+  }
+
+  let code = matchVoicePart(state.trackId, "CONCERT")
+  if (code == 1 || !code) {
+    code = fixInstrumentNameCode(state.trackId)
+  }
   state.fingeringInfo = subjectFingering(code);
   console.log("🚀 ~ state.fingeringInfo:", code, state.fingeringInfo, state.trackId, state.track);
   state.musicalCodeId = state.fingeringInfo?.id || 0
@@ -2271,6 +2084,7 @@ export const checkMoveNoSave = async () => {
 
 /** 刷新谱面 */
 export const refreshMusicSvg = () => {
+  (window as any).DYhideTrackTune = false;
   moveData.noteCoords = []
   moveData.modelList = []
   clearSelection();

+ 6 - 0
src/utils/baseApi.ts

@@ -19,4 +19,10 @@ export const creatMusicSheetImg = (data: any) => {
     isContentCenter: true, // 内容平台
     data
   });
+};
+
+/** 获取总控平台乐器编码 */
+export const getInstrumentCode = () => {
+  const url = `/musicSheet/instrumentCode`;
+  return request.get(url);
 };

+ 2 - 1
src/view/fingering/fingering-relationships.ts

@@ -325,7 +325,8 @@ const relationships = {
 		30: [1, 5, 6],
 		31: [4, 5, 3],
 		32: [4, 2, 3],
-		33: [4, 2, 6],
+		// 33: [4, 2, 6],
+		33: [1, 5, 3],
 		34: [1, 2, 3],
 		35: [4, 5, 6],
 		36: [4, 2, 6],

+ 2 - 2
src/view/fingering/index.tsx

@@ -18,7 +18,7 @@ export default defineComponent({
       // 葫芦丝的指法,云教练页面和听音练习页面,展示的不一样,需要区分
       const source = state.fingeringInfo.name === 'hulusi-flute' ? 'musicDetail' : '';
       fingerData.subject = await getFingeringConfig(state.fingeringInfo.name, source);
-      console.log("🚀 ~ fingerData.subject:", fingerData.subject);
+      console.log("🚀 ~ fingerData.subject:", fingerData.subject,state.fingeringInfo.name);
     };
     onBeforeMount(() => {
       getFingeringData();
@@ -51,7 +51,7 @@ export default defineComponent({
       doubeClick
     })
     return () => {
-      // console.log("音高", realKey.value);
+      // console.log("音符指法音高", realKey.value);
       const relationship = fingerData.subject?.relationship?.[realKey.value] || [];
       const rs: number[] = Array.isArray(relationship[1]) ? relationship[fingerData.relationshipIndex] : relationship;
       const canTizhi = Array.isArray(relationship[1]);

+ 3 - 1
src/view/music-score/index.tsx

@@ -69,6 +69,7 @@ export default defineComponent({
 		},		
 	},
 	setup(props, { emit, slots, expose }) {
+		(window as any).DYhideTrackTune = false;
 		const query: any = getQuery();
 		/** 设置 曲谱模式,五线谱还是简谱 */
 		const setRenderType = () => {
@@ -276,7 +277,8 @@ export default defineComponent({
 			>
 				{slots.default?.()}
 				{props.showSelection && musicData.showSelection && !state.isEvaluatReport &&!state.isSimplePage && state.musicRendered && <Selection />}
-				{props.showSelection && musicData.showSelection && state.isCombineRender &&!state.isSimplePage && !state.isPreView && state.musicRendered && <CombineAudio></CombineAudio> }
+				{/* 目前只有演奏模式下有 */}
+				{props.showSelection && musicData.showSelection && state.isCombineRender &&!state.isSimplePage && !state.isPreView && state.musicRendered && state.playType === "play" && <CombineAudio></CombineAudio> }
 			</div>
 		);
 	},

+ 7 - 4
src/view/rhythm/index.tsx

@@ -77,10 +77,13 @@ export default defineComponent({
             const element = document.querySelector(".rhythmBox-scale-element") as HTMLElement | null
             if (element) {
                const playBtnEl = document.querySelector("#studnetT-7") as HTMLElement | null
-               const playBtnElClac =
-                  playBtnEl?.getBoundingClientRect()?.[state.platform === IPlatform.PC && state.musicScoreBtnDirection === "left" ? "y" : "x"]
-
                const screenWidth = document.documentElement.clientWidth
+               let playBtnElClac =
+                  playBtnEl?.getBoundingClientRect()?.x || 0
+               // 当在左边的时候计算 右边的距离   
+               if(playBtnElClac > 0 && state.platform === IPlatform.PC && state.musicScoreBtnDirection === "left"){
+                  playBtnElClac = screenWidth - playBtnElClac - (playBtnEl?.getBoundingClientRect()?.width || 0)
+               }   
                const originalWidth = element.offsetWidth
                // 比较差值,需要计算播放按钮的位置
                let distanceWidth = screenWidth
@@ -88,7 +91,7 @@ export default defineComponent({
                   distanceWidth = screenWidth - (screenWidth - playBtnElClac) * 2
                }
                // 保留2位小数
-               const scale = distanceWidth < originalWidth ? Math.floor((distanceWidth / originalWidth) * 100) / 100 : 1
+               const scale = (distanceWidth < originalWidth && distanceWidth > 0) ? Math.floor((distanceWidth / originalWidth) * 100) / 100 : 1
                element.style.transform = `translate(-50%, -50%) scale(${scale})`
             }
          }

File diff suppressed because it is too large
+ 0 - 0
stats.html


+ 2 - 2
vite.config.ts

@@ -76,8 +76,8 @@ export default defineConfig({
         // target: "https://kt.colexiu.com",
         // target: "https://test.lexiaoya.cn",
         // target: "https://kt.colexiu.com",
-        // target: "https://test.resource.colexiu.com", // 内容平台开发环境,内容平台开发,需在url链接上加上isCbs=true
-        target: "https://test.kt.colexiu.com",
+        target: "https://test.resource.colexiu.com", // 内容平台开发环境,内容平台开发,需在url链接上加上isCbs=true
+        // target: "https://dev.kt.colexiu.com",
         // target: "https://mec.colexiu.com",
         changeOrigin: true,
         rewrite: (path) => path.replace(/^\/instrument/, ""),

Some files were not shown because too many files changed in this diff