Browse Source

Merge branch '2023-9-6_调整合成' into online

liushengqiang 1 year ago
parent
commit
f029145d34

+ 8 - 0
src/helpers/communication.ts

@@ -294,3 +294,11 @@ export const api_cloudAccompanyMessage = (audioFileUrl: string) => {
 		},
 	});
 };
+
+/** 合成音频传伴奏弹窗 */
+export const api_openAdjustRecording = (content: any) => {
+	postMessage({
+		api: "openAdjustRecording",
+		content,
+	});
+};

+ 7 - 2
src/page-instrument/evaluat-model/index.tsx

@@ -17,7 +17,7 @@ import { getNoteByMeasuresSlursStart } from "/src/helpers/formateMusic";
 import { Icon, Popup, showToast } from "vant";
 import EvaluatResult from "./evaluat-result";
 import EvaluatAudio from "./evaluat-audio";
-import { api_getDeviceDelay, api_proxyServiceMessage, api_videoUpdate, getEarphone } from "/src/helpers/communication";
+import { api_getDeviceDelay, api_openAdjustRecording, api_proxyServiceMessage, api_videoUpdate, getEarphone } from "/src/helpers/communication";
 import EvaluatShare from "./evaluat-share";
 import { Vue3Lottie } from "vue3-lottie";
 import startData from "./data/start.json";
@@ -187,7 +187,12 @@ export default defineComponent({
 		const handleEvaluatResult = (type: "practise" | "tryagain" | "look" | "share" | "update") => {
 			if (type === "update") {
 				// 上传云端
-				evaluatModel.evaluatUpdateAudio = true;
+				// evaluatModel.evaluatUpdateAudio = true;
+				api_openAdjustRecording({
+					recordId: evaluatingData.resultData?.recordIdStr || evaluatingData.resultData?.recordId,
+					title: state.examSongName || '曲谱演奏',
+					coverImg: state.coverImg,
+				});
 				return;
 			} else if (type === "share") {
 				// 分享

+ 34 - 33
src/page-instrument/view-detail/index.tsx

@@ -114,39 +114,40 @@ export default defineComponent({
       detailData.isLoading = false;
     };
 
-    const setState = (data: any, index: number) => {
-      state.appName = "COLEXIU";
-      state.detailId = data.id;
-      state.xmlUrl = data.xmlFileUrl;
-      state.partIndex = index;
-      state.subjectId = data.musicSubject;
-      state.categoriesId = data.categoriesId;
-      state.categoriesName = data.musicTagNames;
-      state.enableEvaluation = data.canEvaluate ? true : false;
-      state.examSongId = data.id + "";
-      state.examSongName = data.musicSheetName;
-      // 解析扩展字段
-      if (data.extConfigJson) {
-        try {
-          state.extConfigJson = JSON.parse(data.extConfigJson as string);
-        } catch (error) {
-          console.error("解析扩展字段错误:", error);
-        }
-      }
-      state.isOpenMetronome = data.mp3Type === "MP3_METRONOME" ? true : false;
-      // 曲子包含节拍器,就不开启节拍器
-      state.needTick = data.mp3Type === "MP3_METRONOME" ? false : true;
-      state.isShowFingering = data.showFingering ? true : false;
-      state.music = data.music;
-      state.accompany = data.accompany;
-      state.midiUrl = data.midiUrl;
-      state.parentCategoriesId = data.musicTag;
-      state.musicSheetCategoriesId = data.musicSheetCategoriesId;
-      state.playMode = data.audioType === "MP3" ? "MP3" : "MIDI";
-      state.originSpeed = state.speed = data.playSpeed;
-      const track = data.code || data.track;
-      state.track = track ? track.replace(/ /g, "").toLocaleLowerCase() : "";
-      state.enableNotation = data.notation ? true : false;
+		const setState = (data: any, index: number) => {
+			state.appName = "COLEXIU";
+			state.detailId = data.id;
+			state.xmlUrl = data.xmlFileUrl;
+			state.partIndex = index;
+			state.subjectId = data.musicSubject;
+			state.categoriesId = data.categoriesId;
+			state.categoriesName = data.musicTagNames;
+			state.enableEvaluation = data.canEvaluate ? true : false;
+			state.examSongId = data.id + "";
+			state.examSongName = data.musicSheetName;
+			state.coverImg = data.titleImg ?? "";
+			// 解析扩展字段
+			if (data.extConfigJson) {
+				try {
+					state.extConfigJson = JSON.parse(data.extConfigJson as string);
+				} catch (error) {
+					console.error("解析扩展字段错误:", error);
+				}
+			}
+			state.isOpenMetronome = data.mp3Type === "MP3_METRONOME" ? true : false;
+			// 曲子包含节拍器,就不开启节拍器
+			state.needTick = data.mp3Type === "MP3_METRONOME" ? false : true;
+			state.isShowFingering = data.showFingering ? true : false;
+			state.music = data.music;
+			state.accompany = data.accompany;
+			state.midiUrl = data.midiUrl;
+			state.parentCategoriesId = data.musicTag;
+			state.musicSheetCategoriesId = data.musicSheetCategoriesId;
+			state.playMode = data.audioType === "MP3" ? "MP3" : "MIDI";
+			state.originSpeed = state.speed = data.playSpeed;
+			const track = data.code || data.track;
+			state.track = track ? track.replace(/ /g, "").toLocaleLowerCase() : "";
+			state.enableNotation = data.notation ? true : false;
 
       // console.log("🚀 ~ state.subjectId:", state.subjectId, state.track as any , state.subjectId)
       // 是否打击乐

+ 1 - 1
src/page-instrument/view-evaluat-report/component/share-top/index.tsx

@@ -52,7 +52,7 @@ export default defineComponent({
 		// 资源类型
 		const mediaType = computed((): "audio" | "video" => {
 			const subfix = (scoreData.value.videoFilePath || "").split(".").pop();
-			if (subfix === "wav" || subfix === "mp3") {
+			if (subfix === "wav" || subfix === "mp3" || subfix === "m4a") {
 				return "audio";
 			}
 			return "video";

+ 141 - 141
src/state.ts

@@ -35,147 +35,147 @@ export enum IPlatform {
 }
 
 const state = reactive({
-  /** 来源 : PC , app */
-  platform: "" as IPlatform,
-  /** 课堂乐器老师端上课菜单状态 */
-  attendHideMenu: false,
-  appName: "" as "GYM" | "COLEXIU",
-  musicRenderType: EnumMusicRenderType.staff as EnumMusicRenderType,
-  /**曲谱是否渲染完成 */
-  musicRendered: false,
-  /** 当前曲谱数据ID, 和曲谱ID不一致 */
-  detailId: "",
-  /** 曲谱资源URL */
-  xmlUrl: "",
-  /** 声部ID */
-  subjectId: 0 as number,
-  /** 分类ID */
-  categoriesId: 0,
-  /** 分类名称 */
-  categoriesName: "",
-  /** 是否支持评测 */
-  enableEvaluation: true,
-  /** 是否支持转谱 */
-  enableNotation: false,
-  /** 曲谱ID */
-  examSongId: "",
-  /** 曲谱名称 */
-  examSongName: "",
-  /** 扩展字段 */
-  extConfigJson: {} as any,
-  /** 扩展样式字段 */
-  extStyleConfigJson: {} as any,
-  /** 是否开启节拍器 */
-  isOpenMetronome: false,
-  /** 是否显示指法 */
-  isShowFingering: false,
-  /** 原音 */
-  music: "",
-  /** 伴奏 */
-  accompany: "",
-  /** midiURL */
-  midiUrl: "",
-  /** 父分ID */
-  parentCategoriesId: 0,
-  /** 分类ID */
-  musicSheetCategoriesId: 0,
-  /** 资源类型: mp3 | midi */
-  playMode: "MP3" as "MP3" | "MIDI",
-  /** 设置的速度 */
-  speed: 0,
-  /** 曲谱音频正常的速度 */
-  originSpeed: 0,
-  /** 分轨名称 */
-  track: "",
-  /** 当前显示声部索引 */
-  partIndex: 0,
-  /** 是否需要节拍器 */
-  needTick: false,
-  /** 曲谱实例 */
-  osmd: null as unknown as OpenSheetMusicDisplay,
-  /**是否是特殊乐谱类型, 主要针对管乐迷  */
-  isSpecialBookCategory: false,
-  /** 播放状态 */
-  playState: "paused" as IAudioState,
-  /** 播放结束状态 */
-  playEnd: false,
-  /** 播放那个: 原音,伴奏 */
-  playSource: "music" as IPlayState,
-  /** 播放进度 */
-  playProgress: 0,
-  /** 激活的note index */
-  activeNoteIndex: 0,
-  /** 激活的小节 */
-  activeMeasureIndex: 0,
-  /** 选段状态 */
-  sectionStatus: false,
-  /** 选段数据 */
-  section: [] as any[],
-  /** 选段背景 */
-  sectionBoundingBoxs: [] as any[],
-  /** 开启选段预备 */
-  isOpenPrepare: false,
-  /** 选段预备 */
-  sectionFirst: null as any,
-  /** 音符数据 */
-  times: [] as any[],
-  /** 播放模式 */
-  modeType: "practise" as "practise" | "follow" | "evaluating",
-  /** 设置 */
-  setting: {
-    /** 效音提醒 */
-    soundEffect: true,
-    /** 护眼模式 */
-    eyeProtection: false,
-    /** 摄像头 */
-    camera: false,
-    /** 摄像头透明度 */
-    cameraOpacity: 70,
-    /** 循环播放 */
-    repeatAutoPlay: true,
-    /** 显示指法 */
-    displayFingering: true,
-    /** 显示光标 */
-    displayCursor: true,
-    /** 频率 */
-    frequency: 442,
-    /** 评测难度 */
-    evaluationDifficulty: "ADVANCED" as IDifficulty,
-    /** 保存到相册 */
-    saveToAlbum: false,
-    /** 开启伴奏 */
-    enableAccompaniment: true,
-    /** 反应时间 */
-    reactionTimeMs: 0,
-  },
-  /** 节拍器的时间 */
-  fixtime: 0,
-  /** 指法信息 */
-  fingeringInfo: {} as IFingering,
-  /** 滚动容器的ID */
-  scrollContainer: "musicAndSelection",
-  /** 是否是打击乐 */
-  isPercussion: false,
-  /** 是否重复节拍器的时间 */
-  repeatedBeats: 0,
-  /**当前曲谱中所有声部名字 */
-  partListNames: [] as string[],
-  /** 渐变速度信息 */
-  gradual: [] as GradualNote[],
-  /** 渐变速度版本 */
-  gradualVersion: GradualVersion.BASE as GradualVersion,
-  /** 渐变时间信息 */
-  gradualTimes: null as GradualTimes,
-  /** 单声部多声轨 */
-  multitrack: 0,
-  /** 缩放 */
-  zoom: 0.8,
-  /** 渲染曲谱比例 */
-  musicZoom: 1,
-  /** 练习,评测是否是选段模式 */
-  isSelectMeasureMode: false,
-  /** 是否是评分显示 */
-  isReport: false,
+	/** 来源 : PC , app */
+	platform: "" as IPlatform,
+	appName: "" as "GYM" | "COLEXIU",
+	musicRenderType: EnumMusicRenderType.staff as EnumMusicRenderType,
+	/**曲谱是否渲染完成 */
+	musicRendered: false,
+	/** 当前曲谱数据ID, 和曲谱ID不一致 */
+	detailId: "",
+	/** 曲谱资源URL */
+	xmlUrl: "",
+	/** 声部ID */
+	subjectId: 0 as number,
+	/** 分类ID */
+	categoriesId: 0,
+	/** 分类名称 */
+	categoriesName: "",
+	/** 是否支持评测 */
+	enableEvaluation: true,
+	/** 是否支持转谱 */
+	enableNotation: false,
+	/** 曲谱ID */
+	examSongId: "",
+	/** 曲谱名称 */
+	examSongName: "",
+	/** 曲谱封面 */
+	coverImg: '',
+	/** 扩展字段 */
+	extConfigJson: {} as any,
+	/** 扩展样式字段 */
+	extStyleConfigJson: {} as any,
+	/** 是否开启节拍器 */
+	isOpenMetronome: false,
+	/** 是否显示指法 */
+	isShowFingering: false,
+	/** 原音 */
+	music: "",
+	/** 伴奏 */
+	accompany: "",
+	/** midiURL */
+	midiUrl: "",
+	/** 父分ID */
+	parentCategoriesId: 0,
+	/** 分类ID */
+	musicSheetCategoriesId: 0,
+	/** 资源类型: mp3 | midi */
+	playMode: "MP3" as "MP3" | "MIDI",
+	/** 设置的速度 */
+	speed: 0,
+	/** 曲谱音频正常的速度 */
+	originSpeed: 0,
+	/** 分轨名称 */
+	track: "",
+	/** 当前显示声部索引 */
+	partIndex: 0,
+	/** 是否需要节拍器 */
+	needTick: false,
+	/** 曲谱实例 */
+	osmd: null as unknown as OpenSheetMusicDisplay,
+	/**是否是特殊乐谱类型, 主要针对管乐迷  */
+	isSpecialBookCategory: false,
+	/** 播放状态 */
+	playState: "paused" as IAudioState,
+	/** 播放结束状态 */
+	playEnd: false,
+	/** 播放那个: 原音,伴奏 */
+	playSource: "music" as IPlayState,
+	/** 播放进度 */
+	playProgress: 0,
+	/** 激活的note index */
+	activeNoteIndex: 0,
+	/** 激活的小节 */
+	activeMeasureIndex: 0,
+	/** 选段状态 */
+	sectionStatus: false,
+	/** 选段数据 */
+	section: [] as any[],
+	/** 选段背景 */
+	sectionBoundingBoxs: [] as any[],
+	/** 开启选段预备 */
+	isOpenPrepare: false,
+	/** 选段预备 */
+	sectionFirst: null as any,
+	/** 音符数据 */
+	times: [] as any[],
+	/** 播放模式 */
+	modeType: "practise" as "practise" | "follow" | "evaluating",
+	/** 设置 */
+	setting: {
+		/** 效音提醒 */
+		soundEffect: true,
+		/** 护眼模式 */
+		eyeProtection: false,
+		/** 摄像头 */
+		camera: false,
+		/** 摄像头透明度 */
+		cameraOpacity: 70,
+		/** 循环播放 */
+		repeatAutoPlay: true,
+		/** 显示指法 */
+		displayFingering: true,
+		/** 显示光标 */
+		displayCursor: true,
+		/** 频率 */
+		frequency: 442,
+		/** 评测难度 */
+		evaluationDifficulty: "ADVANCED" as IDifficulty,
+		/** 保存到相册 */
+		saveToAlbum: false,
+		/** 开启伴奏 */
+		enableAccompaniment: true,
+		/** 反应时间 */
+		reactionTimeMs: 0,
+	},
+	/** 节拍器的时间 */
+	fixtime: 0,
+	/** 指法信息 */
+	fingeringInfo: {} as IFingering,
+	/** 滚动容器的ID */
+	scrollContainer: "musicAndSelection",
+	/** 是否是打击乐 */
+	isPercussion: false,
+	/** 是否重复节拍器的时间 */
+	repeatedBeats: 0,
+	/**当前曲谱中所有声部名字 */
+	partListNames: [] as string[],
+	/** 渐变速度信息 */
+	gradual: [] as GradualNote[],
+	/** 渐变速度版本 */
+	gradualVersion: GradualVersion.BASE as GradualVersion,
+	/** 渐变时间信息 */
+	gradualTimes: null as GradualTimes,
+	/** 单声部多声轨 */
+	multitrack: 0,
+	/** 缩放 */
+	zoom: 0.8,
+	/** 渲染曲谱比例 */
+	musicZoom: 1,
+	/** 练习,评测是否是选段模式 */
+	isSelectMeasureMode: false,
+	/** 是否是评分显示 */
+	isReport: false,
 });
 const browserInfo = browser();
 let offset_duration = 0;

+ 6 - 0
src/view/evaluating/index.tsx

@@ -264,6 +264,12 @@ export const handleStartBegin = async () => {
 	}
 	//开始录音
 	await api_startRecording();
+
+	// 如果开启了摄像头, 开启录制视频
+	if (state.setting.camera && state.setting.saveToAlbum) {
+		console.log("开始录制视频");
+		api_startCapture();
+	}
 };
 
 /** 播放音乐 */