|
@@ -740,6 +740,9 @@ export const formateTimes = (osmd: OpenSheetMusicDisplay) => {
|
|
|
const voiceEntries = iterator.CurrentVoiceEntries?.[0] ? [iterator.CurrentVoiceEntries?.[0]] : [];
|
|
|
|
|
|
let currentVoiceEntries: any[] = [];
|
|
|
+ // 多分轨,当前小节最大音符数量
|
|
|
+ let maxNoteNum = 0;
|
|
|
+ iterator.currentMeasure.verticalMeasureList.forEach((item: any) => maxNoteNum = Math.max(maxNoteNum, item?.staffEntries?.length || 0))
|
|
|
// 单声部多声轨
|
|
|
if (state.multitrack > 0) {
|
|
|
currentVoiceEntries = [...iterator.CurrentVoiceEntries];
|
|
@@ -801,6 +804,7 @@ export const formateTimes = (osmd: OpenSheetMusicDisplay) => {
|
|
|
if (state.multitrack > 0 && currentTime > note.length.realValue) {
|
|
|
currentTime = note.length.realValue;
|
|
|
}
|
|
|
+ note.maxNoteNum = maxNoteNum
|
|
|
_notes.push({
|
|
|
note,
|
|
|
iterator: { ...iterator },
|
|
@@ -1068,6 +1072,7 @@ export const formateTimes = (osmd: OpenSheetMusicDisplay) => {
|
|
|
speedbeatUnit: beatUnit,
|
|
|
multipleRestMeasures: multipleRestMeasures,
|
|
|
measureSpeed, // 小节速度
|
|
|
+ maxNoteNum: note.maxNoteNum, // 当前小节音符最多的分轨的音符数量
|
|
|
};
|
|
|
nodeDetail.realKey = formatRealKey(note.halfTone - fixedKey * 12, nodeDetail);
|
|
|
nodeDetail.duration = nodeDetail.endtime - nodeDetail.time;
|
|
@@ -1078,11 +1083,16 @@ export const formateTimes = (osmd: OpenSheetMusicDisplay) => {
|
|
|
// console.log(note.sourceMeasure.MeasureNumberXML, note.sourceMeasure.verticalSourceStaffEntryContainers.length)
|
|
|
// console.log('👀看看endtime', nodeDetail.duration, relaEndtime, fixtime, i)
|
|
|
tickables = tickables.filter((tickable: any) => tickable.attrs?.type !== "GhostNote")
|
|
|
- nodeDetail.noteLength = tickables.length || 1;
|
|
|
+ const maxNum = (state.isCombineRender && note.maxNoteNum) ? note.maxNoteNum : tickables.length;
|
|
|
+ nodeDetail.noteLength = maxNum || 1;
|
|
|
allNotes.push(nodeDetail);
|
|
|
allNoteId.push(nodeDetail.id);
|
|
|
measures.push(nodeDetail);
|
|
|
- if (si < tickables.length - 1) {
|
|
|
+ /**
|
|
|
+ * bug: #9877
|
|
|
+ * 多分轨合并展示的曲子,不同分轨,同一小节音符的数量可能不能,不能只通过tickables的长度判断该小节的音符数量
|
|
|
+ */
|
|
|
+ if (si < maxNum - 1) {
|
|
|
si++;
|
|
|
} else {
|
|
|
si = 0;
|