Kaynağa Gözat

feat: 支持和弦评测、练习记录增加sourceTime

TIANYONG 2 ay önce
ebeveyn
işleme
a39e3d1427

+ 1 - 1
osmd-extended

@@ -1 +1 @@
-Subproject commit d38f84a71bd007582ff14d17c5cb247c3978dc9a
+Subproject commit 1e308b9bd9ebd3d912ed8d4566e10f48dc712523

+ 12 - 1
src/helpers/formateMusic.ts

@@ -1450,7 +1450,8 @@ export const formateTimes = (osmd: OpenSheetMusicDisplay) => {
 				xmlMp3BeatFixTime,  //xml上节拍器的时间
 				notBeatFixtime: state.isOpenMetronome ? fixtime - xmlMp3BeatFixTime : fixtime, // 不含节拍器的fixtime值 唱名用
 				notBeatTime: state.isEvxml && evNoteStartTime ? retain(evNoteStartTime) : retain(relativeTime + (state.isOpenMetronome ? fixtime - xmlMp3BeatFixTime : fixtime)), // 不含节拍器的 音符开始时间
-				notBeatEndTime: state.isEvxml && evNoteEndTime ? retain(evNoteEndTime) : retain(relaEndtime + (state.isOpenMetronome ? fixtime - xmlMp3BeatFixTime : fixtime)) // 不含节拍器的 音符结束时间
+				notBeatEndTime: state.isEvxml && evNoteEndTime ? retain(evNoteEndTime) : retain(relaEndtime + (state.isOpenMetronome ? fixtime - xmlMp3BeatFixTime : fixtime)), // 不含节拍器的 音符结束时间
+				frequencyList: [note?.pitch?.frequency || -1], // 如果是和弦音符,需要添加多个音符的频率,用于评测
 			};
 			// console.log(i,'当前的小节',nodeDetail.MeasureNumberXML,totalMultipleRestMeasures,multipleRestMeasures)
 			// 如果是妙极客的曲子,并且第二遍循环播放需要等待时间,并且是第二遍循环的第一个小节的第一个音符
@@ -1461,6 +1462,16 @@ export const formateTimes = (osmd: OpenSheetMusicDisplay) => {
 			// 	relativeTime = relativeTime + state.secondEvXmlBeginTime;
 			// }
 			// if (state.isEvxml && nodeDetail.repeatIdx && nodeDetail.i > 0 && nodeDetail.MeasureNumberXML === 1 && nodeDetail.noteId === 0) {
+
+			// 如果是和弦音符,需要添加多个音符的频率,用于评测
+			if (note.voiceEntry.notes.length > 1) {
+				note.voiceEntry.notes.forEach((cnote: any) => {
+					if (cnote?.IsChordNote && cnote?.pitch?.frequency) {
+						nodeDetail.frequencyList.push(cnote.pitch.frequency)
+					}
+				})
+			}			
+
 			const firstRepeatNodeId = allNotes.find((item: any) => item.MeasureNumberXML === state.timegapRepeatMeasureIndex)?.noteId || 0;
 			if (state.isEvxml && nodeDetail.repeatIdx && nodeDetail.i > 0 && nodeDetail.MeasureNumberXML === state.timegapRepeatMeasureIndex && nodeDetail.noteId === firstRepeatNodeId) {
 				const currentWaitTime = state.evXmlBeginArr[nodeDetail.repeatIdx] || 0;

+ 2 - 0
src/page-instrument/custom-plugins/recording-time/index.tsx

@@ -4,6 +4,7 @@ import { api_musicPracticeRecordSave } from "../../api";
 import { browser, getBehaviorId, getCampId } from "/src/utils";
 import { getQuery } from "/src/utils/queryString";
 import { storeData } from "/src/store";
+import { getAudioDuration } from "/src/view/audio-list";
 
 const recordData = reactive({
 	starTime: 0,
@@ -25,6 +26,7 @@ const handleRecord = () => {
 		playTime: totalTime,
 		deviceType: browser().android ? "ANDROID" : "IOS",
 		behaviorId: getBehaviorId(),
+		sourceTime: getAudioDuration(), // 音频时长
 	};
 	api_musicPracticeRecordSave(body);
 };

+ 1 - 0
src/page-instrument/evaluat-model/index.tsx

@@ -277,6 +277,7 @@ export default defineComponent({
           // isOrnament: !!note?.voiceEntry?.ornamentContainer,
           isTenutoSound,
           isStaccato: item?.voiceEntry?.isStaccato ? true : false, // 是否是重音
+          frequencyList: item.frequencyList, // 如果是和弦音符,需要添加多个音符的频率,用于评测
         };
         datas.push(data);
       }

+ 2 - 0
src/view/follow-practice/index.tsx

@@ -11,6 +11,7 @@ import { OpenSheetMusicDisplay } from "/osmd-extended/src";
 import { browser, getBehaviorId } from "/src/utils";
 import { api_musicPracticeRecordSave } from "../../page-instrument/api";
 import { getQuery } from "/src/utils/queryString";
+import { getAudioDuration } from "/src/view/audio-list";
 
 const query: any = getQuery();
 
@@ -41,6 +42,7 @@ const handleRecord = (total: number) => {
 		playTime: totalTime,
 		deviceType: browser().android ? "ANDROID" : "IOS",
 		behaviorId: getBehaviorId(),
+		sourceTime: getAudioDuration(), // 音频时长
 	};
 	api_musicPracticeRecordSave(body);
 };