|  | @@ -787,6 +787,32 @@ export const formatXML = (xml: string, xmlUrl?: string): string => {
 | 
	
		
			
				|  |  |  };
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +/** 处理fine标记播放逻辑 */
 | 
	
		
			
				|  |  | +export const filterNoteByFine = (notes: any[]) => {
 | 
	
		
			
				|  |  | +	let filterNotes: any[] = [];
 | 
	
		
			
				|  |  | +	for (let idx = 0; idx < notes.length; idx++) {
 | 
	
		
			
				|  |  | +		const note = notes[idx]?.note;
 | 
	
		
			
				|  |  | +		const nextNote = notes[idx+1]?.note
 | 
	
		
			
				|  |  | +		const isFine = note.sourceMeasure.lastRepetitionInstructions?.findIndex((repeat: any) => repeat.type == 6) >= 0;
 | 
	
		
			
				|  |  | +		if (isFine) {
 | 
	
		
			
				|  |  | +			// 判断当前的fine音符是否是最后一遍循环
 | 
	
		
			
				|  |  | +			const rightIds = notes.slice(idx).map((right: any) => right.note?.NoteToGraphicalNoteObjectId)
 | 
	
		
			
				|  |  | +			let isLast = 0;
 | 
	
		
			
				|  |  | +			rightIds.forEach((num: any) => num === note.NoteToGraphicalNoteObjectId && (isLast+=1) )
 | 
	
		
			
				|  |  | +			// console.log(isLast,'last',rightIds,note.NoteToGraphicalNoteObjectId)
 | 
	
		
			
				|  |  | +			if (note?.sourceMeasure?.MeasureNumberXML !== nextNote?.sourceMeasure?.MeasureNumberXML && isLast == 1) {
 | 
	
		
			
				|  |  | +				filterNotes.push(notes[idx])
 | 
	
		
			
				|  |  | +				break;
 | 
	
		
			
				|  |  | +			} else {
 | 
	
		
			
				|  |  | +				filterNotes.push(notes[idx])
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +		} else {
 | 
	
		
			
				|  |  | +			filterNotes.push(notes[idx])
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	return filterNotes
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  /** 获取所有音符的时值,以及格式化音符 */
 | 
	
		
			
				|  |  |  export const formateTimes = (osmd: OpenSheetMusicDisplay) => {
 | 
	
		
			
				|  |  |  	const customNoteRealValue = customData.customNoteRealValue;
 | 
	
	
		
			
				|  | @@ -852,7 +878,7 @@ export const formateTimes = (osmd: OpenSheetMusicDisplay) => {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	let preNoteMeasureNumber: any = null; // 上一个小节的number值
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	const _notes = [] as any[];
 | 
	
		
			
				|  |  | +	let _notes = [] as any[];
 | 
	
		
			
				|  |  |  	if (state.gradualTimes) {
 | 
	
		
			
				|  |  |  		console.log("后台设置的渐慢小节时间", state.gradual, state.gradualTimes);
 | 
	
		
			
				|  |  |  	}
 | 
	
	
		
			
				|  | @@ -985,6 +1011,8 @@ export const formateTimes = (osmd: OpenSheetMusicDisplay) => {
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  	// 是否是变速的曲子
 | 
	
		
			
				|  |  |  	const hasVaryingSpeed = _notes.some((item: any) => item.measuresTempoInBPM !== _notes[0].measuresTempoInBPM)
 | 
	
		
			
				|  |  | +	// 循环时,遇到fine标记,最后一遍,需要立即结束
 | 
	
		
			
				|  |  | +	_notes = filterNoteByFine(_notes)
 | 
	
		
			
				|  |  |  	console.log('变速曲子',hasVaryingSpeed, _notes)
 | 
	
		
			
				|  |  |  	let noteIds: any = [];
 | 
	
		
			
				|  |  |  	// let voicesBBox: any = null;
 |