Browse Source

节拍类型 根据当前谱面的节拍变化处理

黄琪勇 8 months ago
parent
commit
89cce2017a
1 changed files with 7 additions and 7 deletions
  1. 7 7
      src/helpers/metronome.ts

+ 7 - 7
src/helpers/metronome.ts

@@ -370,6 +370,7 @@ class Metronome {
 						measureNumberIndex: measureListIndex,
 						CompoundTempo: note?.noteElement?.sourceMeasure?.CompoundTempo || "",
 						numerator: note?.noteElement?.sourceMeasure?.ActiveTimeSignature?.numerator || 0,
+						denominator: note?.noteElement?.sourceMeasure?.ActiveTimeSignature?.denominator || 0,
 						start: startTime,
 						end: noteEndTime,
 						time: noteEndTime - startTime,
@@ -405,13 +406,12 @@ class Metronome {
 			}
 		}))
 		try {
-			const Numerator = state.osmd?.Sheet?.SheetPlaybackSetting?.Rhythm?.Numerator || 4
 			for (let i = 0; i < measures.length; i++) {
 				const measure = measures[i];
 				// 87拍和45拍要根据小节返回的CompoundTempo特殊处理
-				const beatTypeArr = getBeatTypeArr(measure.CompoundTempo)
+				const beatTypeArr = getBeatTypeArr(measure.numerator, measure.denominator, measure.CompoundTempo)
 				const CompoundTempoArr = beatTypeArr.map((beatType:number) => {
-					return Math.abs(beatType*Numerator)
+					return Math.abs(beatType*measure.numerator)
 				})
 				if(i===0){
 					metronomeData.firstBeatTypeArr = beatTypeArr
@@ -497,13 +497,13 @@ class Metronome {
 }
 
 /** 获取节拍类型数组 */
-export function getBeatTypeArr(CompoundTempo?:string){
+export function getBeatTypeArr(numerator?:number, denominator?:number, CompoundTempo?:string){
 	const speedBeatUnit = state.speedBeatUnit
-	const Numerator = state.osmd?.Sheet?.SheetPlaybackSetting?.Rhythm?.Numerator || 4
-	const denominator = state.osmd?.Sheet?.SheetPlaybackSetting?.Rhythm?.Denominator || 4
+	const Numerator = numerator || state.osmd?.Sheet?.SheetPlaybackSetting?.Rhythm?.Numerator || 4
+	const Denominator = denominator || state.osmd?.Sheet?.SheetPlaybackSetting?.Rhythm?.Denominator || 4
 	let loopArr = []
 	// 规则 负数代表重声,正数代表轻声
-	switch (`${Numerator}/${denominator}`) {
+	switch (`${Numerator}/${Denominator}`) {
 		case "2/2":
 			loopArr = [-1/2, 1/2]
 			break;