Browse Source

feat: 增加timeInfo

TIANYONG 1 year ago
parent
commit
04c2f32df0
1 changed files with 14 additions and 4 deletions
  1. 14 4
      src/helpers/formateMusic.ts

+ 14 - 4
src/helpers/formateMusic.ts

@@ -837,7 +837,8 @@ export const formateTimes = (osmd: OpenSheetMusicDisplay) => {
 	}
 	// 是否是变速的曲子
 	const hasVaryingSpeed = _notes.some((item: any) => item.measuresTempoInBPM !== _notes[0].measuresTempoInBPM)
-	console.log('变速曲子',hasVaryingSpeed)
+	// console.log('变速曲子',hasVaryingSpeed, _notes)
+	let noteIds: any = [];
 	// let voicesBBox: any = null;
 	for (let { note, iterator, currentTime, isDouble, isMutileSubject } of _notes) {
 		if (note) {
@@ -1077,7 +1078,16 @@ export const formateTimes = (osmd: OpenSheetMusicDisplay) => {
 			// console.log(note.tie)
 			// console.log('👀看看endtime', duration, relaEndtime, fixtime, i)
 			// console.log('频率',note?.pitch?.frequency,i)
-
+			/**
+			 * evxml的曲子,如果曲谱xml中带有times信息,则音符时值优先取times中的值
+			 */
+			let evNoteStartTime = 0, evNoteEndTime = 0;
+			if (state.isEvxml && note?.noteTimeInfo?.length) {
+				const idx = noteIds.filter((item: any) => item === svgElement?.attrs.id)?.length || 0
+				evNoteStartTime = note?.noteTimeInfo[idx]?.begin
+				evNoteEndTime = note?.noteTimeInfo[idx]?.end
+			}
+			svgElement?.attrs.id && noteIds.push(svgElement?.attrs.id)
 			const nodeDetail = {
 				isStaccato: note.voiceEntry.isStaccato(),
 				isRestFlag: note.isRestFlag,
@@ -1105,8 +1115,8 @@ export const formateTimes = (osmd: OpenSheetMusicDisplay) => {
 				note: note.halfTone + 12, // see issue #224
 				fixtime, // 弱起补充的时间
 				relativeTime: retain(relativeTime),
-				time: retain(relativeTime + fixtime), // 开始播放的时间
-				endtime: retain(relaEndtime + fixtime), // 播放完成的时间
+				time: state.isEvxml && evNoteStartTime ? retain(evNoteStartTime) : retain(relativeTime + fixtime), // 开始播放的时间
+				endtime: state.isEvxml && evNoteEndTime ? retain(evNoteEndTime) : retain(relaEndtime + fixtime), // 播放完成的时间
 				relaEndtime: retain(relaEndtime),
 				realValue,
 				halfTone: note.halfTone,