|
@@ -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;
|