Browse Source

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

TIANYONG 5 months ago
parent
commit
0685ef489e
3 changed files with 18 additions and 7 deletions
  1. 15 4
      src/helpers/formateMusic.ts
  2. 1 1
      src/state.ts
  3. 2 2
      src/view/plugins/move-music-score/index.tsx

+ 15 - 4
src/helpers/formateMusic.ts

@@ -715,7 +715,8 @@ export const formatXML = (xml: string, xmlUrl?: string): string => {
 	let beats = -1;
 	let beatType = -1;
 	// 前面小节的拍子
-	let preBeats = -1;
+	let preBeats: number = 4;
+	let preBeatType: number = 4;
 	// 小节中如果没有节点默认为休止符
 	for (const measure of measures) {
 		if (beats === -1 && measure.getElementsByTagName("beats").length) {
@@ -727,6 +728,11 @@ export const formatXML = (xml: string, xmlUrl?: string): string => {
 		if (speed === -1 && measure.getElementsByTagName('per-minute').length) {
 		  speed = Number(measure.getElementsByTagName('per-minute')[0]?.textContent)
 		}
+		// 当前小节的拍数
+		const currentBeats = measure.getElementsByTagName("beats").length ? measure.getElementsByTagName("beats")[0]?.textContent : preBeats;
+		const currentBeatType = measure.getElementsByTagName("beat-type").length ? measure.getElementsByTagName("beat-type")[0]?.textContent : preBeatType;
+		preBeats = Number(currentBeats);
+		preBeatType = Number(currentBeatType);
 		const divisions = parseInt(measure.getElementsByTagName("divisions")[0]?.textContent || "256");
 		// 如果note节点里面有space节点,并且没有duration节点,代表这是一个空白节点,需要删除
 		if (measure.getElementsByTagName("note").length && state.isEvxml) {
@@ -775,19 +781,24 @@ export const formatXML = (xml: string, xmlUrl?: string): string => {
         </note>`;
 		}
 		// if (state.musicRenderType !== 'staff') {
-		// 	transferJianNote(measure, divisions, beats)
+		// 	transferJianNote(measure, divisions, preBeats, preBeatType)
 		// }
 	}
 	return new XMLSerializer().serializeToString(xmlParse);
 };
 
 /** 转换简谱的全休止符和二分休止符 */
-export const transferJianNote = (measure: any, divisions: number, beats: number) => {
+export const transferJianNote = (measure: any, divisions: number, preBeats: number, preBeatType: number) => {
+	const multipleXs = preBeatType / 4;
 	const notes = measure.getElementsByTagName("note")
 	for (const note of notes) {
 		const noteType = note.getElementsByTagName("type")?.[0]?.textContent || '';
 		if (noteType === 'whole' || noteType === 'half') {
-			const maxNumber = noteType === 'half' ? 2 : beats
+			const maxNumber = noteType === 'half' ? 2 : preBeats / multipleXs;
+			if (!Number.isInteger(maxNumber)) {
+				return;
+			}
+			// console.log('几个1/4音符',maxNumber)
 			let quarterNoteNumber = 1;
 			while (quarterNoteNumber <= maxNumber) {
 				const newnote = document.createElement('note');

+ 1 - 1
src/state.ts

@@ -1713,7 +1713,7 @@ const setState = (data: any, index: number) => {
   // 如果是PC端,放大曲谱
   state.platform = query.platform?.toLocaleUpperCase() || "";
   if (state.platform === IPlatform.PC) {
-    state.zoom = query.zoom || 1.5;
+    state.zoom = query.zoom || state.zoom;
     state.enableEvaluation = false;
   }
   /**

+ 2 - 2
src/view/plugins/move-music-score/index.tsx

@@ -365,8 +365,8 @@ async function setModelPostion(item: any, x: number, y: number, repeatEdit?: boo
 				tsY = targetY - original.y;
 				// console.log('距离',tsX,tsY,x,y,moveData.zoom)
 				if (state.platform === IPlatform.PC) {
-					tsX = tsX / 1.5
-					tsY = tsY / 1.8
+					// tsX = tsX / 1.5
+					// tsY = tsY / 1.8
 				}
 				g && g.setAttribute("transform", `translate(${tsX / moveData.zoom}, ${tsY / moveData.zoom})`);
 				el && (el.style.transform = `translate(${tsX}px, ${tsY}px)`);