|
@@ -32,7 +32,7 @@ export const getFixTime = (speed: number) => {
|
|
|
const duration: any = getDuration(state.osmd as unknown as OpenSheetMusicDisplay);
|
|
|
let numerator = duration.numerator || 0;
|
|
|
let denominator = duration.denominator || 4;
|
|
|
- const beatUnit = duration.beatUnit || "quarter";
|
|
|
+ const beatUnit = "quarter";
|
|
|
// if (state.repeatedBeats) {
|
|
|
// // 音频制作问题仅2拍不重复
|
|
|
// numerator = numerator === 2 ? 4 : numerator;
|
|
@@ -149,9 +149,9 @@ export const getDuration = (osmd?: OpenSheetMusicDisplay): Duration => {
|
|
|
const { Duration, TempoInBPM, ActiveTimeSignature, TempoExpressions } = osmd.GraphicSheet.MeasureList[0][0]?.parentSourceMeasure;
|
|
|
if (Duration) {
|
|
|
let beatUnit = "quarter";
|
|
|
- for (const item of TempoExpressions) {
|
|
|
- beatUnit = item.InstantaneousTempo.beatUnit || "quarter";
|
|
|
- }
|
|
|
+ // for (const item of TempoExpressions) {
|
|
|
+ // beatUnit = item.InstantaneousTempo.beatUnit || "quarter";
|
|
|
+ // }
|
|
|
const duration = formatDuration(ActiveTimeSignature, Duration) as unknown as FractionDefault;
|
|
|
return {
|
|
|
...duration,
|
|
@@ -238,11 +238,6 @@ export function formatBeatUnit(beatUnit: string) {
|
|
|
return multiple;
|
|
|
}
|
|
|
|
|
|
-/** 根据音符单位,速度,几几拍计算正确的时间 */
|
|
|
-export function getTimeByBeatUnit(beatUnit: string, bpm: number, denominator: number) {
|
|
|
- return (denominator / formatBeatUnit(beatUnit)) * bpm;
|
|
|
-}
|
|
|
-
|
|
|
export type CustomInfo = {
|
|
|
showSpeed: boolean;
|
|
|
parsedXML: string;
|
|
@@ -1002,14 +997,14 @@ export const formateTimes = (osmd: OpenSheetMusicDisplay) => {
|
|
|
preMeasureNumber = note?.sourceMeasure?.MeasureNumberXML
|
|
|
allMeasures.push(note.sourceMeasure);
|
|
|
}
|
|
|
- if (si === 0 && state.isSpecialBookCategory) {
|
|
|
- for (const expression of (note.sourceMeasure as SourceMeasure)?.TempoExpressions) {
|
|
|
- if (expression?.InstantaneousTempo?.beatUnit) {
|
|
|
- // 取最后一个有效的tempo
|
|
|
- beatUnit = expression.InstantaneousTempo.beatUnit;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+ // if (si === 0 && state.isSpecialBookCategory) {
|
|
|
+ // for (const expression of (note.sourceMeasure as SourceMeasure)?.TempoExpressions) {
|
|
|
+ // if (expression?.InstantaneousTempo?.beatUnit) {
|
|
|
+ // // 取最后一个有效的tempo
|
|
|
+ // beatUnit = expression.InstantaneousTempo.beatUnit;
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // }
|
|
|
// 判断是否是同一小节
|
|
|
if (staveIndex == note.sourceMeasure?.MeasureNumberXML && i !== 0) {
|
|
|
staveNoteIndex++
|
|
@@ -1117,7 +1112,6 @@ export const formateTimes = (osmd: OpenSheetMusicDisplay) => {
|
|
|
xmlMp3BeatFixTime = getFixTime(beatSpeed)
|
|
|
// console.log("fixtime:", fixtime, '速度:', beatSpeed, "state.isSpecialBookCategory:", state.isSpecialBookCategory, 'state.isOpenMetronome:', state.isOpenMetronome);
|
|
|
}
|
|
|
- // console.log(getTimeByBeatUnit(beatUnit, measureSpeed, iterator.currentMeasure.activeTimeSignature.Denominator))
|
|
|
let gradualLength = 0;
|
|
|
let speed = (state.isSpecialBookCategory ? measureSpeed : baseSpeed) || 1;
|
|
|
gradualChange = iterator.currentMeasure.speedInfo || gradualChange;
|
|
@@ -1157,34 +1151,6 @@ export const formateTimes = (osmd: OpenSheetMusicDisplay) => {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- } else if (state.appName === "GYM" && gradualChange && gradualSpeed && (gradualChange.startXmlNoteIndex === si || gradualChangeIndex > 0)) {
|
|
|
- const startSpeed = gradualSpeed[0] - (gradualSpeed[1] - gradualSpeed[0]);
|
|
|
- const { resetXmlNoteIndex, endXmlNoteIndex } = gradualChange;
|
|
|
- const noteDiff = endXmlNoteIndex;
|
|
|
- let stepSpeed = (gradualSpeed[gradualSpeed.length - 1] - startSpeed) / noteDiff;
|
|
|
- stepSpeed = note.DotsXml ? stepSpeed / 1.5 : stepSpeed;
|
|
|
- if (gradualChangeIndex < noteDiff) {
|
|
|
- const tempSpeed = Math.ceil(speed + stepSpeed * gradualChangeIndex);
|
|
|
- let tmpSpeed = getTimeByBeatUnit(beatUnit, tempSpeed, iterator.currentMeasure.activeTimeSignature.Denominator);
|
|
|
- const maxLength = (wholeValue + numerator / denominator) * vDenominator * (60 / tmpSpeed);
|
|
|
- // speed += stepSpeeds.reduce((a, b) => a + b, 0)
|
|
|
- speed += Math.ceil(stepSpeed * (gradualChangeIndex + 1));
|
|
|
- tmpSpeed = getTimeByBeatUnit(beatUnit, speed, iterator.currentMeasure.activeTimeSignature.Denominator);
|
|
|
- const minLength = (wholeValue + numerator / denominator) * vDenominator * (60 / tmpSpeed);
|
|
|
- gradualLength = (maxLength + minLength) / 2;
|
|
|
- } else if (resetXmlNoteIndex > gradualChangeIndex) {
|
|
|
- speed = allNotes[i - 1]?.speed;
|
|
|
- }
|
|
|
- beatSpeed =
|
|
|
- (state.isSpecialBookCategory ? getTimeByBeatUnit(beatUnit, speed, iterator.currentMeasure.activeTimeSignature.Denominator) : baseSpeed) || 1;
|
|
|
- const isEnd = !(gradualChangeIndex < noteDiff) && !(resetXmlNoteIndex > gradualChangeIndex);
|
|
|
- gradualChangeIndex++;
|
|
|
- if (isEnd) {
|
|
|
- gradualChangeIndex = 0;
|
|
|
- gradualChange = undefined;
|
|
|
- gradualSpeed = undefined;
|
|
|
- stepSpeeds = [];
|
|
|
- }
|
|
|
}
|
|
|
const _noteLength = NoteRealValue;
|
|
|
// 当前音符的持续时长,当前音符的RealValue值*拍数*(60/后台设置的基准速度)
|