Просмотр исходного кода

feat: 多个分轨多遍歌词没有repeat标记时,每个分轨都负责一个repeat

TIANYONG 10 месяцев назад
Родитель
Сommit
1feb1877f3
1 измененных файлов с 18 добавлено и 12 удалено
  1. 18 12
      src/helpers/formateMusic.ts

+ 18 - 12
src/helpers/formateMusic.ts

@@ -1552,20 +1552,26 @@ const customizationXml = (xmlParse: any) => {
 	 * 妙极客xml,多遍歌词循环的曲目,如果没有repeat标签,需要加上repeat标签
 	 * */
 	if (maxLyricNum > 1) {
-		const hasRepeat = xmlParse.querySelectorAll('repeat').length > 0
+		const hasRepeat = xmlParse.querySelectorAll('repeat').length > 0;
 		if (!hasRepeat) {
-			const lastMeasure = measures.last();
-			if (lastMeasure.getElementsByTagName('barline').length) {
-				const barlineDom = lastMeasure.getElementsByTagName('barline')[0]
-				barlineDom.innerHTML = barlineDom.innerHTML + `<repeat direction="backward" />`;
-			} else {
-				lastMeasure.innerHTML = lastMeasure.innerHTML + `
-				<barline location="right">
-					<bar-style>light-heavy</bar-style>
-					<repeat direction="backward" />
-				</barline>`
+			const parts = xmlParse.querySelectorAll('score-partwise>part')
+			if (parts.length > 1) {
+				for (const part of parts) {
+					const currentMeasures = part.querySelectorAll('measure').length ? Array.from(part.querySelectorAll('measure')) : [];
+					const lastMeasure: any = currentMeasures.last();
+					if (lastMeasure?.getElementsByTagName('barline').length) {
+						const barlineDom = lastMeasure?.getElementsByTagName('barline')[0]
+						barlineDom.innerHTML = barlineDom.innerHTML + `<repeat direction="backward" />`;
+					} else {
+						lastMeasure.innerHTML = lastMeasure.innerHTML + `
+						<barline location="right">
+							<bar-style>light-heavy</bar-style>
+							<repeat direction="backward" />
+						</barline>`
+					}
+					// console.log(lastMeasure)
+				}
 			}
-			// console.log(lastMeasure)
 		}
 	}
 }