|
@@ -14,7 +14,7 @@ import {
|
|
|
OpenSheetMusicDisplay,
|
|
|
} from "/osmd-extended/src";
|
|
|
import { GradualChange, speedInfo } from "./calcSpeed";
|
|
|
-import { beatUnitTo } from "/src/helpers/beatConfig"
|
|
|
+import { beatUnitTo, speedBeatTo } from "/src/helpers/beatConfig"
|
|
|
|
|
|
const browserInfo = browser();
|
|
|
dayjs.extend(duration);
|
|
@@ -975,15 +975,19 @@ export const formateTimes = (osmd: OpenSheetMusicDisplay) => {
|
|
|
}
|
|
|
note.maxNoteNum = maxNoteNum;
|
|
|
note.trackIndex = minIndex;
|
|
|
- currentRealTempo = iterator.currentMeasure.tempoExpressions.length ? iterator.currentMeasure.tempoExpressions.find((item: any) => item?.InstantaneousTempo?.isMetronomeMark) || currentRealTempo : currentRealTempo;
|
|
|
-
|
|
|
+ currentRealTempo = iterator.currentMeasure.tempoExpressions.length ? iterator.currentMeasure.tempoExpressions.find((item: any) => item?.InstantaneousTempo?.isMetronomeMark)?.InstantaneousTempo || currentRealTempo : currentRealTempo;
|
|
|
+ const { beatUnit="quarter", dotted=false, tempoInBpm } = currentRealTempo
|
|
|
+ const speedBeatUnit = beatUnitTo(beatUnit, dotted)
|
|
|
_notes.push({
|
|
|
note,
|
|
|
iterator: { ...iterator },
|
|
|
currentTime,
|
|
|
isDouble,
|
|
|
isMutileSubject,
|
|
|
- measuresTempoInBPM: note?.sourceMeasure?.tempoInBPM,
|
|
|
+ // measuresTempoInBPM: note?.sourceMeasure?.tempoInBPM,
|
|
|
+ // 转换成1/4拍的速度
|
|
|
+ measuresTempoInBPM: speedBeatTo({unit: speedBeatUnit || "1/4",speed: tempoInBpm || 0}, `1/4`),
|
|
|
+ speedBeatUnit, // 当前谱面小节的速度对应的是几分音符
|
|
|
currentRealTempo
|
|
|
});
|
|
|
}
|
|
@@ -1002,7 +1006,7 @@ export const formateTimes = (osmd: OpenSheetMusicDisplay) => {
|
|
|
console.log('变速曲子',hasVaryingSpeed, _notes)
|
|
|
let noteIds: any = [];
|
|
|
// let voicesBBox: any = null;
|
|
|
- for (let { note, iterator, currentTime, isDouble, isMutileSubject } of _notes) {
|
|
|
+ for (let { note, iterator, currentTime, isDouble, isMutileSubject, speedBeatUnit, measuresTempoInBPM } of _notes) {
|
|
|
if (note) {
|
|
|
if (preMeasureNumber != note?.sourceMeasure?.MeasureNumberXML) {
|
|
|
si = 0
|
|
@@ -1110,11 +1114,13 @@ export const formateTimes = (osmd: OpenSheetMusicDisplay) => {
|
|
|
|
|
|
let beatSpeed = 0;
|
|
|
// 速度不能为0 此处的速度应该是按照设置的速度而不是校准后的速度,否则mp3速度不对
|
|
|
- if (measureSpeed !== baseSpeed && !hasVaryingSpeed) {
|
|
|
- beatSpeed = baseSpeed || measureSpeed || 100
|
|
|
- } else {
|
|
|
- beatSpeed = (state.isSpecialBookCategory ? measureSpeed : baseSpeed) || 1;
|
|
|
- }
|
|
|
+ // if (measureSpeed !== baseSpeed && !hasVaryingSpeed) {
|
|
|
+ // beatSpeed = baseSpeed || measureSpeed || 100
|
|
|
+ // } else {
|
|
|
+ // beatSpeed = (state.isSpecialBookCategory ? measureSpeed : baseSpeed) || 1;
|
|
|
+ // }
|
|
|
+ // 计算音符时值,使用转换成1/4的速度计算
|
|
|
+ beatSpeed = measuresTempoInBPM;
|
|
|
// let beatSpeed = measureSpeed || baseSpeed
|
|
|
// 如果有节拍器,需要将节拍器的时间算出来
|
|
|
if (i === 0) {
|
|
@@ -1392,7 +1398,8 @@ export const formateTimes = (osmd: OpenSheetMusicDisplay) => {
|
|
|
firstVerticalMeasure: activeVerticalMeasureList[0],
|
|
|
noteLength: 1,
|
|
|
//osdmContext: osmd,
|
|
|
- speedbeatUnit: beatUnit,
|
|
|
+ // speedbeatUnit: beatUnit,
|
|
|
+ speedBeatUnit, // 当前谱面小节的速度对应的是几分音符
|
|
|
multipleRestMeasures: multipleRestMeasures, // 当前合并小节的索引,从1开始到当前的totalMultipleRestMeasures结束,
|
|
|
totalMultipleRestMeasures, // 当前小节总的合并小节数
|
|
|
measureSpeed, // 小节速度
|