Selaa lähdekoodia

Merge branch 'feature-tianyong-newVersion' into ktyq-test-new

TIANYONG 6 kuukautta sitten
vanhempi
commit
e7e696e030
2 muutettua tiedostoa jossa 19 lisäystä ja 2 poistoa
  1. 16 0
      src/helpers/formateMusic.ts
  2. 3 2
      src/state.ts

+ 16 - 0
src/helpers/formateMusic.ts

@@ -616,6 +616,22 @@ export const formatZoom = (num = 1) => {
 	return num * state.zoom;
 };
 
+/** 妙极客多分轨的曲子,可能没有part-name标签,需要手动加上该标签 */
+export const xmlAddPartName = (xml: string) => {
+	if (!xml) return "";
+	const xmlParse = new DOMParser().parseFromString(xml, "text/xml");
+	const scoreParts = Array.from(xmlParse.getElementsByTagName("score-part"));
+	for (const scorePart of scoreParts) {
+		if (scorePart.getElementsByTagName("part-name").length === 0) {
+			const name = scorePart.getAttribute("id") || "";
+			const newPartName = `<part-name>${name}</part-name>`
+			// scorePart.prepend(newPartName);
+			scorePart.innerHTML = newPartName + scorePart.innerHTML;
+		}
+	}
+	return new XMLSerializer().serializeToString(xmlParse);
+}
+
 /** 格式化曲谱
  * 1.全休止符的小节,没有音符默认加个全休止符
  */

+ 3 - 2
src/state.ts

@@ -10,7 +10,7 @@ import { audioListStart, getAudioCurrentTime, getAudioDuration, setAudioCurrentT
 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 } from "./helpers/formateMusic";
+import { verifyCanRepeat, getDuration, xmlAddPartName } from "./helpers/formateMusic";
 import { getMusicSheetDetail } from "./utils/baseApi"
 import { getQuery } from "/src/utils/queryString";
 import { followData, skipNotePractice } from "/src/view/follow-practice/index"
@@ -1339,7 +1339,8 @@ const getMusicInfo = async (res: any) => {
   state.defaultScoreRender = res.data?.defaultScoreRender
   const partIndex = query["part-index"] ? parseInt(query["part-index"]) : -1 // -1为partIndex没有值的时候
   /* 获取声轨列表 */
-  const xmlString = await fetch(res.data.xmlFileUrl).then((response) => response.text());
+  let xmlString = await fetch(res.data.xmlFileUrl).then((response) => response.text());
+  xmlString = xmlAddPartName(xmlString);
   downloadXmlStr.value = xmlString //给musice-score 赋值xmlString 以免加载2次
   const tracks = xmlToTracks(xmlString) //获取声轨列表
   // 设置音源  track 为当前的声轨 index为当前的