Bladeren bron

管乐团选段模式评测

liushengqiang 1 jaar geleden
bovenliggende
commit
9b890e1320

+ 19 - 7
orchestra.html

@@ -9,24 +9,36 @@
   <title>管乐团云教练</title>
   <!-- <link rel="icon" href="/favicon.ico" /> -->
   <script src="/flexible.js" charset="UTF-8"></script>
+  <script src="/helpers/lottie.min.js" charset="UTF-8"></script>
   <style>
     #loading {
       position: fixed;
-      left: 50%;
+      z-index: 100;
       top: 50%;
+      left: 50%;
+      width: 100Px;
+      height: 100Px;
       transform: translate(-50%, -50%);
-      display: none;
-    }
-
-    #loading.show {
-      display: block;
+      pointer-events: none;
+      transition: opacity .3s;
     }
   </style>
 </head>
 
 <body>
   <div id="app"></div>
-  <img id="loading" class="show" src="/loading.svg" alt="loading" />
+  <div id="loading"></div>
+  <script>
+    lottie.loadAnimation({
+      container: document.getElementById('loading'),
+      renderer: 'svg',
+      width: '30px',
+      height: '30px',
+      loop: true,
+      autoplay: true,
+      path: '/loading.json'
+    });
+  </script>
   <script type="module" src="/src/page-orchestra/main.ts"></script>
 </body>
 

File diff suppressed because it is too large
+ 0 - 0
public/helpers/lottie.min.js


File diff suppressed because it is too large
+ 0 - 0
public/loading.json


+ 2 - 1
src/page-colexiu/App.tsx

@@ -37,7 +37,8 @@ export default defineComponent({
 			setBehaviorId(getRandomKey())
 		});
 		onMounted(() => {
-			document.getElementById("loading")!.className = "";
+			const _loading = document.getElementById("loading")
+			_loading && (document.body.removeChild(_loading))
 		})
 
 		const inited = computed(() => {

+ 2 - 1
src/page-gym/App.tsx

@@ -38,7 +38,8 @@ export default defineComponent({
 			setCampId(query.campId)
 		});
 		onMounted(() => {
-			document.getElementById("loading")!.className = "";
+			const _loading = document.getElementById("loading")
+			_loading && (document.body.removeChild(_loading))
 		})
 
 		const inited = computed(() => {

+ 2 - 1
src/page-orchestra/App.tsx

@@ -37,7 +37,8 @@ export default defineComponent({
 			setBehaviorId(getRandomKey())
 		});
 		onMounted(() => {
-			document.getElementById("loading")!.className = "";
+			const _loading = document.getElementById("loading")
+			_loading && (document.body.removeChild(_loading))
 		})
 
 		const inited = computed(() => {

+ 1 - 1
src/page-orchestra/api.ts

@@ -20,5 +20,5 @@ export const sysMusicScoreAccompanimentQueryPage = (sysMusicScoreId: string) =>
 
 /** 记录训练时长 */
 export const musicPracticeRecordSave = (data: any) => {
-	return request.post("/musicPracticeRecord/save", { data });
+	return request.post("/musicPracticeRecord/save", {requestType: 'form',  data });
 };

+ 110 - 104
src/page-orchestra/custom-plugins/unitTest/index.tsx

@@ -1,113 +1,119 @@
-import { defineComponent, onMounted, reactive, ref } from 'vue'
-import { useOriginSearch } from '../uses'
-import request from '/src/helpers/request'
-import SettingState from '/src/pages/detail/setting-state'
-import runtime, { changeSpeed } from '/src/pages/detail/runtime'
-import state from '/src/pages/detail/state'
-import { Toast } from 'vant'
-import { userInfo } from '../App'
-import { browser } from '/src/helpers/utils'
+import { defineComponent, onMounted, reactive, ref } from "vue";
+import { getQuery } from "/src/utils/queryString";
+import request from "/src/utils/request";
+import { storeData } from "/src/store";
+import state, { handleSetSpeed, hanldeDirectSelection } from "/src/state";
+import { handleCloseModeMode } from "../../header-top";
+import { handleStartEvaluat } from "/src/view/evaluating";
 
 interface IquestionExtendsInfo {
-  /** 评测难度 */
-  difficulty?: 'ONE' | 'TWO' | 'THREE' | '1' | '2' | '3' | ''
-  /** 开始小节 */
-  start?: string | number
-  /** 结束小节 */
-  end?: string | number
-  /** 速度 */
-  speed?: number
+	/** 评测难度 */
+	difficulty?: "ONE" | "TWO" | "THREE" | "1" | "2" | "3" | "";
+	/** 开始小节 */
+	start?: string | number;
+	/** 结束小节 */
+	end?: string | number;
+	/** 速度 */
+	speed?: number;
 }
 const difficultyData: { [_: string]: any } = {
-  ONE: 'BEGINNER',
-  TWO: 'ADVANCED',
-  THREE: 'PERFORMER',
-  '1': 'BEGINNER',
-  '2': 'ADVANCED',
-  '3': 'PERFORMER',
-}
+	ONE: "BEGINNER",
+	TWO: "ADVANCED",
+	THREE: "PERFORMER",
+	"1": "BEGINNER",
+	"2": "ADVANCED",
+	"3": "PERFORMER",
+};
 
 export const unitTestData = reactive({
-  /** 是否是选段模式 */
-  isSelectMeasureMode: false,
-})
+	/** 是否是选段模式 */
+	isSelectMeasureMode: false,
+});
 
 export default defineComponent({
-  name: 'unitTest',
-  setup() {
-    const questionExtendsInfo = ref<IquestionExtendsInfo>({difficulty: ''})
-    /**
-     * 如果是课后训练或者单元测验,获取数据
-     * @param xml 获取的xml数据
-     * @returns 格式化的xml数据
-     */
-    const getUnitData = async () => {
-      const search = useOriginSearch()
-      if (!search.questionId) return ''
-      
-      try {
-        const res: any = await request.get(`/examinationQuestion/detail?examinationQuestionId=${search.questionId}`)
-        questionExtendsInfo.value = JSON.parse(res?.data?.questionExtendsInfo) || {}
-        questionExtendsInfo.value.start = Number(questionExtendsInfo.value.start)
-        questionExtendsInfo.value.end = Number(questionExtendsInfo.value.end)
-      } catch (error) {
-        console.error('解析单元测验曲谱题目失败', error)
-      }
-      setSection()
-    }
-    
-    const getlessonTrainingData = async () => {
-      const search = useOriginSearch()
-      if (!search.lessonTrainingId) return
-      try {
-        const res: any = await request.post(`/studentLessonTraining/trainingRecord/${search.courseScheduleId}?userId=${userInfo.id}`)
-        if (Array.isArray(res?.data?.trainings)){
-          const train = res.data.trainings.find((n: any) => n.materialId == search.materialId)
-          const info = JSON.parse(train.trainingContent)
-          // console.log("🚀 ~ info", info)
-          questionExtendsInfo.value.start = Number(info.startSection)
-          questionExtendsInfo.value.end = Number(info.endSection)
-          questionExtendsInfo.value.speed = isNaN(info.speed) ? 0 : Number(info.speed)
-        }
-      } catch (error) {
-        console.error('解析课后训练曲谱题目失败', error)
-      }
-      setSection()
-    }
+	name: "unitTest",
+	setup() {
+		const questionExtendsInfo = ref<IquestionExtendsInfo>({ difficulty: "" });
+    /** 隐藏评测功能 */
+		const handleHide = (list: string[]) => {
+			const ids = list;
+			for (let i = 0; i < ids.length; i++) {
+				const speedBtn = document.getElementById(ids[i]);
+				if (speedBtn) {
+					speedBtn.style.pointerEvents = "none";
+					if (ids[i] != "selectionBox") {
+						speedBtn.style.opacity = ".7";
+					}
+				}
+			}
+		};
+		/**
+		 * 如果是课后训练或者单元测验,获取数据
+		 * @param xml 获取的xml数据
+		 * @returns 格式化的xml数据
+		 */
+		const getUnitData = async () => {
+			const search = getQuery();
+			if (!search.questionId) return "";
+      handleHide(["tips-step-0", "tips-step-2", "selectionBox"])
+      handleStartEvaluat();
+      handleCloseModeMode()
+			try {
+				const res: any = await request.get(`/examinationQuestion/detail?examinationQuestionId=${search.questionId}`);
+				questionExtendsInfo.value = JSON.parse(res?.data?.questionExtendsInfo) || {};
+				questionExtendsInfo.value.start = Number(questionExtendsInfo.value.start);
+				questionExtendsInfo.value.end = Number(questionExtendsInfo.value.end);
+			} catch (error) {
+				console.error("解析单元测验曲谱题目失败", error);
+			}
+			setSection();
+		};
+
+		const getlessonTrainingData = async () => {
+			const search = getQuery();
+			if (!search.lessonTrainingId) return;
+      handleHide([ "tips-step-2", "selectionBox"])
+			try {
+				const res: any = await request.post(`/studentLessonTraining/trainingRecord/${search.courseScheduleId}?userId=${storeData.user?.id}`);
+				if (Array.isArray(res?.data?.trainings)) {
+					const train = res.data.trainings.find((n: any) => n.materialId == search.materialId);
+					const info = JSON.parse(train.trainingContent);
+					// console.log("🚀 ~ info", info)
+					questionExtendsInfo.value.start = Number(info.startSection);
+					questionExtendsInfo.value.end = Number(info.endSection);
+					questionExtendsInfo.value.speed = isNaN(info.speed) ? 0 : Number(info.speed);
+				}
+			} catch (error) {
+				console.error("解析课后训练曲谱题目失败", error);
+			}
+			setSection();
+		};
 
-    /**设置小节 */
-    const setSection = () => {
-      const startNotes = state.times.filter(
-        (n: any) => n.noteElement.sourceMeasure.MeasureNumberXML == questionExtendsInfo.value.start
-      )
-      const endNotes = state.times.filter(
-        (n: any) => n.noteElement.sourceMeasure.MeasureNumberXML == questionExtendsInfo.value.end
-      )
-      const startNote = startNotes[0]
-      const endNote = endNotes[endNotes.length - 1]
-      //   console.log('🚀 ~ activeNote', startNote, endNote, questionExtendsInfo.value.end)
-      if (startNote && endNote) {
-        unitTestData.isSelectMeasureMode = true
-        // 设置小节
-        state.sectionStatus = true
-        state.section = [startNote, endNote]
-        // 设置评测难度
-        if (difficultyData[questionExtendsInfo.value.difficulty!]) {
-          SettingState.eva.difficulty = difficultyData[questionExtendsInfo.value.difficulty!]
-        }
-        //设置速度
-        if (questionExtendsInfo.value.speed) {
-          changeSpeed(questionExtendsInfo.value.speed)
-        }
-      }
-    }
-    onMounted(() => {
-      const browserInfo = browser()
-      //如果不是学生端直接return
-      if (!browserInfo.isStudent) return
-      getUnitData()
-      getlessonTrainingData()
-    })
-    return () => ''
-  },
-})
+		/**设置小节 */
+		const setSection = () => {
+			const startNotes = state.times.filter((n: any) => n.MeasureNumberXML == questionExtendsInfo.value.start);
+			const endNotes = state.times.filter((n: any) => n.MeasureNumberXML == questionExtendsInfo.value.end);
+			const startNote = startNotes[0];
+			const endNote = endNotes[endNotes.length - 1];
+			  // console.log('🚀 ~ activeNote', startNote, endNote, questionExtendsInfo.value.end)
+			if (startNote && endNote) {
+				state.isSelectMeasureMode = true;
+				// 设置小节
+				hanldeDirectSelection([startNote, endNote])
+				// 设置评测难度
+				if (difficultyData[questionExtendsInfo.value.difficulty!]) {
+					state.setting.evaluationDifficulty = difficultyData[questionExtendsInfo.value.difficulty!];
+				}
+				//设置速度
+				if (questionExtendsInfo.value.speed) {
+					handleSetSpeed(questionExtendsInfo.value.speed);
+				}
+			}
+		};
+		onMounted(() => {
+			getUnitData();
+			getlessonTrainingData();
+		});
+		return () => "";
+	},
+});

+ 3 - 0
src/page-orchestra/detail/index.tsx

@@ -23,6 +23,7 @@ import Tick, { handleInitTick } from "/src/view/tick";
 import FollowPractice from "/src/view/follow-practice";
 import FollowModel from "../follow-model";
 import RecordingTime from "../custom-plugins/recording-time";
+import UnitTest from "../custom-plugins/unitTest";
 
 export default defineComponent({
 	name: "music-list",
@@ -266,6 +267,8 @@ export default defineComponent({
 							<MeasureSpeed />
 							{/* 统计训练时长 */}
 							{storeData.platformType === 'STUDENT' && <RecordingTime />}
+							{/* 单元测验 和 课后训练 */}
+							{storeData.platformType === 'STUDENT' && <UnitTest />}
 						</>
 					)}
 				</div>

+ 19 - 10
src/page-orchestra/evaluat-model/index.tsx

@@ -38,13 +38,6 @@ export default defineComponent({
 			isSaveVideo: state.setting.camera && state.setting.saveToAlbum,
 			shareMode: false,
 		});
-		/**
-		 * 木管(长笛 萨克斯 单簧管)乐器一级的2、3、6测评要放原音音频
-		 * 铜管乐器一级的1a,1b,5,6测评要放原音音频
-		 */
-		const getMusicMode = () => {
-			return "music";
-		};
 		const browserInfo = browser();
 		/** 是否是节奏练习 */
 		const isRhythmicExercises = () => {
@@ -67,17 +60,33 @@ export default defineComponent({
 
 		/** 生成评测曲谱数据 */
 		const formatTimes = () => {
+			let starTime = 0
 			let ListenMode = false;
 			let dontEvaluatingMode = false;
 			let skip = false;
 			const datas = [];
+			let times = state.times
+			/** 如果为选段模式,评测 */
+			if (state.isSelectMeasureMode) {
+				const startIndex = state.times.findIndex(
+				  (n: any) => n.noteId == state.section[0].noteId
+				)
+				const endIndex = state.times.findIndex(
+				  (n: any) => n.noteId == state.section[1].noteId
+				)
+				times = state.times.filter((n: any, index: number) => {
+				  return index >= startIndex && index <= endIndex
+				})
+				starTime = times[0].sourceRelativeTime || times[0].relativeTime
+				// console.log("🚀 ~ times", times)
+			  }
 			for (let index = 0; index < state.times.length; index++) {
 				const item = state.times[index];
 				const note = getNoteByMeasuresSlursStart(item);
 				const rate = state.speed / state.originSpeed;
 				const difftime = item.difftime;
-				const start = difftime + (item.sourceRelativeTime || item.relativeTime);
-				const end = difftime + (item.sourceRelaEndtime || item.relaEndtime);
+				const start = difftime + (item.sourceRelativeTime || item.relativeTime) - starTime;
+				const end = difftime + (item.sourceRelaEndtime || item.relaEndtime) - starTime;
 				const isStaccato = note.noteElement.voiceEntry.isStaccato();
 				const noteRate = isStaccato ? 0.5 : 1;
 				if (note.formatLyricsEntries.contains("Play") || note.formatLyricsEntries.contains("Play...")) {
@@ -208,7 +217,7 @@ export default defineComponent({
 		return () => (
 			<div>
 				<Transition name="pop-center">
-					{evaluatingData.websocketState && !evaluatingData.startBegin && (
+					{!evaluatingData.websocketState && !evaluatingData.startBegin && (
 						<div class={styles.startBtn} onClick={handleStartBegin}>
 							<img src={iconEvaluat.evaluatingStart} />
 						</div>

+ 13 - 6
src/page-orchestra/header-top/index.tsx

@@ -20,14 +20,19 @@ import { handleNoEndExit } from "../custom-plugins/recording-time";
 export const headData = reactive({
 	speedShow: false,
 	musicTypeShow: false,
+	modeMode: true, // 模式弹框
 });
 
+/** 关闭模式选择 */
+export const handleCloseModeMode = (type = false) => {
+	headData.modeMode = type
+}
+
 export default defineComponent({
 	name: "header-top",
 	setup() {
 		const headerData = reactive({
 			settingMode: false,
-			modeMode: true, // 模式弹框
 		});
 		const headRef = ref();
 
@@ -42,7 +47,7 @@ export default defineComponent({
 			} else if (value === "follow") {
 				toggleFollow();
 			}
-			headerData.modeMode = false;
+			headData.modeMode = false;
 		};
 		const disabledList = ["evaluating"];
 
@@ -78,12 +83,13 @@ export default defineComponent({
 				</div>
 				<Title text={state.examSongName} rightView={false} />
 
-				<div class={styles.headRight} style={{ display: headerData.modeMode ? "none" : "" }}>
+				<div class={styles.headRight} style={{ display: headData.modeMode ? "none" : "" }}>
 					<div
+						id="tips-step-0"
 						class={styles.btn}
 						onClick={() => {
 							handleRessetState();
-							headerData.modeMode = true;
+							headData.modeMode = true;
 						}}
 					>
 						<img class={styles.iconBtn} src={icons.modelType} />
@@ -100,7 +106,7 @@ export default defineComponent({
 						<img class={styles.iconBtn} src={state.playSource === "music" ? icons.music : icons.accompaniment} />
 						<span>{state.playSource === "music" ? "原声" : "伴奏"}</span>
 					</div>
-					<div class={[styles.btn, disabledList.includes(state.modeType) && styles.disable]} id="tips-step-4" onClick={() => handleChangeSection()}>
+					<div class={[styles.btn, disabledList.includes(state.modeType) && styles.disable]} id="tips-step-3" onClick={() => handleChangeSection()}>
 						<img class={styles.iconBtn} src={state.section.length === 0 ? icons.section : state.section.length === 1 ? icons.section1 : icons.section2} />
 						<span>选段</span>
 					</div>
@@ -188,6 +194,7 @@ export default defineComponent({
 						<div class={styles.btnWrap}>
 							<img class={styles.iconBtn} src={state.playState === "paused" ? icons.play : icons.pause} />
 							<Circle
+								style={{display: state.playState === "paused" ? 'none' : ''}}
 								class={styles.progress}
 								stroke-width={80}
 								currentRate={state.playProgress}
@@ -209,7 +216,7 @@ export default defineComponent({
 				<Popup teleport="body" defaultStyle={false} v-model:show={headerData.settingMode}>
 					<Settting onClose={() => (headerData.settingMode = false)} />
 				</Popup>
-				<Popup teleport="body" position="bottom" closeOnClickOverlay={false} overlay={false} defaultStyle={false} v-model:show={headerData.modeMode}>
+				<Popup teleport="body" position="bottom" closeOnClickOverlay={false} overlay={false} defaultStyle={false} v-model:show={headData.modeMode}>
 					<ModeTypeMode onClose={(value) => handleChangeModeType(value)} />
 				</Popup>
 			</div>

+ 1 - 1
src/page-orchestra/main.ts

@@ -14,7 +14,7 @@ import "./theme.css";
 	const u = navigator.userAgent;
 	setStoreData({
 		isApp: u.includes("ORCHESTRAAPPI") || u.includes("ORCHESTRAAPPA"),
-		platformApi: u.includes("ORCHESTRATEACHER") ? "/api-teacher" : u.includes("ORCHESTRASTUDENT") ? "/api-student" : "/api-backend",
+		platformApi: u.includes("ORCHESTRATEACHER") ? "/api-teacher" : "/api-student",// u.includes("ORCHESTRASTUDENT") ? "/api-student" : "/api-backend",
 		platformType: u.includes("ORCHESTRATEACHER") ? "TEACHER" : "STUDENT",
 		proxy: import.meta.env.DEV ? "/orchestra" : ""
 	});

+ 31 - 5
src/state.ts

@@ -144,6 +144,8 @@ const state = reactive({
 	multitrack: 0,
 	/** 缩放 */
 	zoom: 0.8,
+	/** 练习,评测是否是选段模式 */
+	isSelectMeasureMode: false
 });
 /** 音频加载完成 */
 export const onLoadedmetadata = (evt: Event) => {
@@ -169,7 +171,11 @@ export const onPlay = () => {
 	state.playEnd = false
 	setStep();
 	if (state.modeType === "evaluating") {
-		const currentTime = getAudioCurrentTime();
+		let currentTime = getAudioCurrentTime();
+		// 选段评测模式
+		if (state.isSelectMeasureMode) {
+			currentTime = currentTime - state.section[0].time
+		  }
 		sendEvaluatingOffsetTime(currentTime);
 	}
 };
@@ -184,6 +190,7 @@ export const onEnded = () => {
 	}
 	// 重复自动播放如果为开启,自动开始播放, 且是练习模式
 	if (state.setting.repeatAutoPlay && state.modeType === "practise") {
+		skipNotePlay(0, true)
 		scrollViewNote();
 		setTimeout(() => {
 			togglePlay("play");
@@ -203,7 +210,7 @@ const handlePlaying = (_item?: any) => {
 	if (item) {
 		// 选段状态下
 		if (state.sectionStatus && state.section.length === 2) {
-			let startItemIndex = state.section[0].index;
+			let startItemIndex = state.section[0].i;
 			let startXmlIndex = state.section[0].MeasureNumberXML;
 			// 开启预备拍
 			if (state.sectionFirst) {
@@ -211,8 +218,13 @@ const handlePlaying = (_item?: any) => {
 				startXmlIndex = state.sectionFirst.MeasureNumberXML;
 			}
 			if (item.MeasureNumberXML < startXmlIndex || item.MeasureNumberXML > state.section[1].MeasureNumberXML) {
-				// console.log('选段播放结束')
+				console.log('选段播放结束')
+				// 如果为选段评测模式
+				if (state.isSelectMeasureMode) {
+					onEnded()
+				}
 				skipNotePlay(startItemIndex);
+				
 				return;
 			}
 		}
@@ -241,6 +253,7 @@ export const skipNotePlay = (itemIndex: number, isStart = false) => {
  */
 export const togglePlay = async (playState?: "play" | "paused") => {
 	state.playState = playState ? playState : state.playState === "paused" ? "play" : "paused";
+	// 设置为开始播放时, 如果需要节拍,先播放节拍器
 	if (state.playState === "play" && state.needTick) {
 		const tickend = await handleStartTick();
 		// console.log("🚀 ~ tickend:", tickend)
@@ -250,8 +263,8 @@ export const togglePlay = async (playState?: "play" | "paused") => {
 			return false
 		};
 	}
+	// 如果选段没有结束, 直接开始播放,清空选段状态
 	if (state.playState == "play") {
-		// 如果没有选段结束开始播放,清空选段状态
 		if (state.sectionStatus && state.section.length < 2) {
 			clearSelection();
 		}
@@ -263,7 +276,6 @@ export const togglePlay = async (playState?: "play" | "paused") => {
 export const handleStopPlay = () => {
 	state.playState = "paused";
 	audioListStart(state.playState);
-	skipNotePlay(0, true);
 };
 
 /** 跳转到指定音符 */
@@ -387,6 +399,20 @@ export const handleSelection = (item: any) => {
 		state.sectionToast.message = "请选择结束小节";
 	}
 };
+/** 直接设置选段 */
+export const hanldeDirectSelection = (list: any[]) => {
+	if(!Array.isArray(list) || list.length !== 2) return
+	state.sectionStatus = true;
+	state.section = list.sort((a, b) => a.time - b.time);
+	let startItemINdex = state.section[0].i;
+	// 开启预备拍
+	if (state.isOpenPrepare) {
+		const startXmlIndex = state.section[0].MeasureNumberXML;
+		state.sectionFirst = state.times.find((n: any) => startXmlIndex - n.MeasureNumberXML === 1);
+		startItemINdex = state.sectionFirst ? state.sectionFirst.i : startItemINdex;
+	}
+	skipNotePlay(startItemINdex);
+}
 let offsetTop = 0;
 /**
  * 窗口内滚动到音符的区域

+ 1 - 0
src/store.ts

@@ -10,6 +10,7 @@ type IUser = {
 	/** 头像 */
 	avatar?: string
 	memberRankSettingId?: number
+	id?: string | number
 };
 type IStatus = "init" | "login" | "logout" | "error";
 type IPlatformType = "STUDENT" | "TEACHER" | "WEB";

+ 3 - 0
src/view/music-score/index.module.less

@@ -13,5 +13,8 @@
             transform: scale(var(--music-zoom));
             transform-origin: left top;
         }
+        svg{
+            overflow: visible;
+        }
     }
 }

+ 1 - 1
src/view/music-score/index.tsx

@@ -73,7 +73,7 @@ export default defineComponent({
 
 			// osmd.EngravingRules.CompactMode = true // 紧凑模式
 			osmd.EngravingRules.PageRightMargin = 2;
-			osmd.EngravingRules.PageTopMargin = 2;
+			osmd.EngravingRules.PageTopMargin = 3;
 			osmd.EngravingRules.PageLeftMargin = 2;
 			osmd.EngravingRules.PageBottomMargin = 2;
 			osmd.EngravingRules.DYMusicScoreType = state.musicRenderType === 'staff' ? 'staff' : 'jianpu'

Some files were not shown because too many files changed in this diff