Jelajahi Sumber

管乐迷特殊规则

liushengqiang 2 tahun lalu
induk
melakukan
2fc795c20c

+ 21 - 42
src/helpers/formateMusic.ts

@@ -1,6 +1,6 @@
 import dayjs from "dayjs";
 import duration from "dayjs/plugin/duration";
-import state from "../state";
+import state, { customData } from "/src/state";
 import { browser } from "../utils/index";
 import {
 	isSpecialMark,
@@ -27,11 +27,11 @@ export const getFixTime = (speed: number) => {
 	let numerator = duration.numerator || 0;
 	let denominator = duration.denominator || 4;
 	const beatUnit = duration.beatUnit || "quarter";
-	// if (state.repeatedBeats) {
-	// 	// 音频制作问题仅2拍不重复
-	// 	numerator = numerator === 2 ? 4 : numerator;
-	// }
-	// console.log('state.isOpenMetronome', state.isOpenMetronome)
+	if (state.repeatedBeats) {
+		// 音频制作问题仅2拍不重复
+		numerator = numerator === 2 ? 4 : numerator;
+	}
+	// console.log('diff', speed, duration, formatBeatUnit(beatUnit), denominator, numerator, (numerator / denominator))
 	return state.isOpenMetronome ? (60 / speed) * formatBeatUnit(beatUnit) * (numerator / denominator) : 0;
 };
 
@@ -350,7 +350,7 @@ export const isRepeatWord = (text: string): boolean => {
 
 export const onlyVisible = (xml: string, partIndex: number): string => {
 	if (!xml) return "";
-	const detailId = state.examSongId + '';
+	const detailId = state.examSongId + "";
 	const xmlParse = new DOMParser().parseFromString(xml, "text/xml");
 	const partList = xmlParse.getElementsByTagName("part-list")?.[0]?.getElementsByTagName("score-part") || [];
 	const partListNames = Array.from(partList).map((item) => item.getElementsByTagName("part-name")?.[0].textContent || "");
@@ -617,6 +617,8 @@ export const formatXML = (xml: string): string => {
 
 /** 获取所有音符的时值,以及格式化音符 */
 export const formateTimes = (osmd: OpenSheetMusicDisplay) => {
+	const customNoteRealValue = customData.customNoteRealValue;
+	const customNoteCurrentTime = customData.customNoteCurrentTime;
 	const detailId = state.examSongId + "";
 	const partIndex = state.partIndex + "";
 	let fixtime = browserInfo.huawei ? 0.08 : 0; //getFixTime()
@@ -650,9 +652,6 @@ export const formateTimes = (osmd: OpenSheetMusicDisplay) => {
 		return realKey;
 	};
 	if (!osmd.cursor) return [];
-	try {
-		// osmd.cursor.reset();
-	} catch (error) {}
 	const iterator: any = osmd.cursor.Iterator;
 	// console.log("🚀 ~ iterator:", iterator)
 	console.time("音符跑完时间");
@@ -664,7 +663,6 @@ export const formateTimes = (osmd: OpenSheetMusicDisplay) => {
 	/** 弱起时间 */
 	let difftime = 0;
 	let usetime = 0;
-	let useGradualTime = 0;
 	let relaMeasureLength = 0;
 	let beatUnit = "quarter";
 	let gradualSpeed;
@@ -697,10 +695,7 @@ export const formateTimes = (osmd: OpenSheetMusicDisplay) => {
 		let isDouble = false;
 		let isMutileSubject = false;
 
-		// console.log(iterator.currentMeasureIndex, [...iterator.currentVoiceEntries])
-		// iterator.currentMeasureIndex == 45 && console.log(currentTimeStamp, [...iterator.currentVoiceEntries])
 		if (currentVoiceEntries.length && !isSetNextNoteReal) {
-			// iterator.currentMeasureIndex == 15 &&  console.log(iterator.currentMeasureIndex, isSetNextNoteReal)
 			isDouble = true;
 			let voiceNotes = [...iterator.CurrentVoiceEntries].reduce((notes, n) => {
 				notes.push(...n.Notes);
@@ -708,15 +703,12 @@ export const formateTimes = (osmd: OpenSheetMusicDisplay) => {
 			}, [] as any);
 			voiceNotes = voiceNotes.sort((a: any, b: any) => a?.length?.realValue - b?.length?.realValue);
 			currentTime = voiceNotes?.[0]?.length?.realValue || 0;
-			// iterator.currentMeasureIndex == 15 && console.log("🚀 ~ currentTime:", currentTime)
 
 			if (state.multitrack > 0 && currentVoiceEntries.length === 2) {
 				const min = voiceNotes[0]?.length?.realValue || 0;
 				const max = voiceNotes[voiceNotes.length - 1]?.length?.realValue || 0;
 				differFrom = max - min;
 				isSetNextNoteReal = differFrom === 0 ? false : true;
-				// iterator.currentMeasureIndex == 15 &&  console.log("🚀 ~ differFrom:", differFrom, isSetNextNoteReal)
-				// console.log(iterator.currentMeasureIndex, min, max)
 			}
 		}
 		// 多声部上下音符没对齐,光标多走一拍
@@ -728,7 +720,6 @@ export const formateTimes = (osmd: OpenSheetMusicDisplay) => {
 			currentTime = differFrom;
 			isSetNextNoteReal = false;
 			differFrom = 0;
-			// iterator.currentMeasureIndex == 7 && console.log("🚀 ~ currentTime:",iterator.currentMeasure, currentTime)
 		}
 		currentTimes.push(iterator.currentTimeStamp.realValue - currentTimeStamp);
 		currentTimeStamp = iterator.currentTimeStamp.realValue;
@@ -751,7 +742,6 @@ export const formateTimes = (osmd: OpenSheetMusicDisplay) => {
 				currentTime = currentTime != 0 ? Math.min(ns?.[0]?.length?.realValue, currentTime) : ns?.[0]?.length?.realValue;
 			}
 			if (state.multitrack > 0 && currentTime > note.length.realValue) {
-				// console.log(iterator.currentMeasureIndex, currentTime , note.length.realValue)
 				currentTime = note.length.realValue;
 			}
 			_notes.push({
@@ -774,9 +764,7 @@ export const formateTimes = (osmd: OpenSheetMusicDisplay) => {
 				for (const expression of (note.sourceMeasure as SourceMeasure)?.TempoExpressions) {
 					if (expression?.InstantaneousTempo?.beatUnit) {
 						// 取最后一个有效的tempo
-						// activeInstantaneousTempo = expression.InstantaneousTempo
 						beatUnit = expression.InstantaneousTempo.beatUnit;
-						// beatUnit = expression.InstantaneousTempo.beatUnit
 					}
 				}
 			}
@@ -787,18 +775,16 @@ export const formateTimes = (osmd: OpenSheetMusicDisplay) => {
 			}
 
 			const activeVerticalMeasureList = [note.sourceMeasure.verticalMeasureList?.[0]] || [];
-			// console.log([...activeVerticalMeasureList])
 			const { realValue } = iterator.currentTimeStamp;
-			// console.log({...iterator}, i)
 			const { RealValue: vRealValue, Denominator: vDenominator } = formatDuration(
 				iterator.currentMeasure.activeTimeSignature,
 				iterator.currentMeasure.duration
 			);
 			let { wholeValue, numerator, denominator, realValue: NoteRealValue } = note.length;
-			// 管乐迷
-			// if (i === 0 && ["2670"].includes(detailId)) {
-			// 	NoteRealValue = 0.03125;
-			// }
+			if (customNoteRealValue[i]) {
+				// console.log(NoteRealValue, customNoteRealValue[i])
+				NoteRealValue = customNoteRealValue[i];
+			}
 			if (isDouble && currentTime > 0) {
 				if (currentTime != NoteRealValue) {
 					console.log(`小节 ${note.sourceMeasure.MeasureNumberXML} 替换: noteLength: ${NoteRealValue}, 最小: ${currentTime}`);
@@ -806,16 +792,13 @@ export const formateTimes = (osmd: OpenSheetMusicDisplay) => {
 				}
 			}
 			// note.sourceMeasure.MeasureNumberXML === 8 && console.error(`小节 ${note.sourceMeasure.MeasureNumberXML}`, NoteRealValue)
-			// 管乐迷
-			// if (["12667", "12673"].includes(detailId)) {
-			// 	if (isMutileSubject && currentTimes[i + 1] > 0 && NoteRealValue > currentTimes[i + 1]) {
-			// 		NoteRealValue = currentTimes[i + 1];
-			// 	}
-			// }
-			// if (["12673"].includes(detailId) && ["22"].includes(partIndex) && i == 208) {
-			// 	console.log(note.sourceMeasure.MeasureNumberXML, i);
-			// 	NoteRealValue = 0.125;
-			// }
+			// 管乐迷,按自定义按读取到的音符时值
+			if (customNoteCurrentTime) {
+				if (isMutileSubject && currentTimes[i + 1] > 0 && NoteRealValue > currentTimes[i + 1]) {
+					NoteRealValue = currentTimes[i + 1];
+				}
+			}
+
 			let relativeTime = usetime;
 			// 速度不能为0 此处的速度应该是按照设置的速度而不是校准后的速度,否则mp3速度不对
 			let beatSpeed = (state.isSpecialBookCategory ? measureSpeed : baseSpeed) || 1;
@@ -823,7 +806,7 @@ export const formateTimes = (osmd: OpenSheetMusicDisplay) => {
 			if (i === 0) {
 				fixtime += getFixTime(beatSpeed);
 				state.fixtime = fixtime;
-				console.log("🚀 ~ fixtime:", fixtime, beatSpeed);
+				console.log("🚀 ~ fixtime:", fixtime, beatSpeed, "state.isSpecialBookCategory", state.isSpecialBookCategory);
 			}
 			// console.log(getTimeByBeatUnit(beatUnit, measureSpeed, iterator.currentMeasure.activeTimeSignature.Denominator))
 			let gradualLength = 0;
@@ -845,9 +828,6 @@ export const formateTimes = (osmd: OpenSheetMusicDisplay) => {
 						(!nextItem || nextItem?.[0].measureIndex !== measureListIndex)
 					);
 				});
-				if (!withInRangeNote) {
-					useGradualTime = 0;
-				}
 				const [first, last] = withInRangeNote || [];
 				if (first && last) {
 					// 小节数量
@@ -865,7 +845,6 @@ export const formateTimes = (osmd: OpenSheetMusicDisplay) => {
 							const times = continuous - first.leftDuration / first.allDuration + last.leftDuration / last.allDuration;
 							const diff = dayjs(tranTime(endTime)).diff(dayjs(tranTime(startTime)), "millisecond");
 							gradualLength = ((NoteRealValue / vRealValue / times) * diff) / 1000;
-							useGradualTime += gradualLength;
 						}
 					}
 				}

+ 299 - 1
src/page-gym/custom-plugins/custom-gradual/index.tsx

@@ -1,4 +1,5 @@
-import state from "/src/state";
+import state, { customData } from "/src/state";
+import { setGlobalData } from "/src/utils";
 
 /** 设置自定义渐慢 */
 export const setCustomGradual = () => {
@@ -12,3 +13,300 @@ export const setCustomGradual = () => {
 		}
 	}
 };
+
+/** 设置自定义音符数据 */
+export const setCustomNoteRealValue = () => {
+	const detailId = state.examSongId + "";
+    const partIndex = state.partIndex + "";
+	if (["2670"].includes(detailId)) {
+		customData.customNoteRealValue = {
+			0: 0.03125,
+		};
+	}
+	if (["12673"].includes(detailId) && ['22'].includes(partIndex)) {
+		customData.customNoteRealValue = {
+			208: 0.125,
+		};
+	}
+};
+
+/**
+ * 曲谱渲染自定义逻辑
+ */
+export const handleSetCustomRender = () => {
+	const detailId = state.examSongId + "";
+	const partIndex = state.partIndex + "";
+	/** 不计算默认渐强渐弱位置的条件 start */
+	const noNeedList = [
+		{ id: "11977", part_index: "11" },
+		{ id: "11608", part_index: "2" },
+		{ id: "11608", part_index: "10" },
+		{ id: "11826", part_index: "5" },
+		{ id: "12305", part_index: "13" },
+		{ id: "12307", part_index: "2" },
+		{ id: "7929", part_index: "9" },
+		{ id: "12669", part_index: "0" },
+	];
+	const noNeedItem = noNeedList.find(({ id, part_index }) => {
+		return id == detailId && part_index == partIndex;
+	});
+	setGlobalData("noNeedContinuousDynamic", noNeedItem ? true : false);
+
+	const noNeedGraphicalList = [
+		{ id: "12307", part_index: "2" },
+		{ id: "7929", part_index: "9" },
+	];
+	const noNeedGraphicalItem = noNeedGraphicalList.find(({ id, part_index }) => {
+		return id == detailId && part_index == partIndex;
+	});
+	setGlobalData("noNeedGraphicalContinuousDynamic", noNeedGraphicalItem ? true : false);
+	/** 不计算默认渐强渐弱位置的条件 end */
+
+	/** 设置换行标准 */
+	const wrapList = [
+		{ id: "11609", part_index: "24", wrapNum: 4 },
+		{ id: "7472", part_index: "22", wrapNum: 4 },
+	];
+	const wrapItem = wrapList.find(({ id, part_index }) => {
+		return id == detailId && part_index == partIndex;
+	});
+	setGlobalData("wrapNum", wrapItem ? wrapItem.wrapNum : undefined);
+
+	/** 设置特定声部,换行规则(打击乐(小鼓+键盘) , 打击乐(小鼓)) */
+	if ([121, 23].includes(state.subjectId as number)) {
+		setGlobalData("wrapNum", 2);
+		state.zoom = 0.9;
+	}
+
+	/** 延音线方向问题 start */
+	const stavetieList = [{ id: "12644", part_index: "25", direction: 1 }];
+	const tieItem = stavetieList.find(({ id, part_index }) => {
+		return id == detailId && part_index == partIndex;
+	});
+	setGlobalData("tieDirection", tieItem ? tieItem.direction : undefined);
+	/** 延音线方向问题 end */
+
+	/** 打击乐多声部,双声部休止符重叠 start */
+	const productMeasure = (total: number, base: number) => {
+		const list = [];
+		for (let i = 0; i < total; i++) {
+			list.push(i + base);
+		}
+		return list;
+	};
+	const drumSetList = [
+		{ id: "12420", part_index: "21", measures: [...productMeasure(17, 9), 60] },
+		{ id: "6244", part_index: "15", measures: [6, 38, 46] },
+	];
+	const drumSetItem = drumSetList.find(({ id, part_index }) => {
+		return id == detailId && part_index == partIndex;
+	});
+	if (drumSetItem) {
+		setGlobalData("drumSetMeasures", drumSetItem.measures);
+	}
+	const graceList = [{ id: "3509", part_index: "16", direction: 1 }];
+	const graceItem = graceList.find(({ id, part_index }) => {
+		return id == detailId && part_index == partIndex;
+	});
+	if (graceItem) {
+		setGlobalData("graceCustom", { direction: graceItem.direction });
+	}
+	const bassDrumList = [
+		{ id: "3030", part_index: "17", line: 4 },
+		{ id: "12704", part_index: "23", line: 3 },
+	];
+	const bassDrumItem = bassDrumList.find(({ id, part_index }) => {
+		return id == detailId && part_index == partIndex;
+	});
+	if (bassDrumItem) {
+		setGlobalData("customBassDrum", bassDrumItem.line);
+	}
+	/** 打击乐多声部,双声部休止符重叠 end */
+
+	/** 符杆朝向 */
+	const stemDirectionList = [
+		{
+			id: "11654",
+			part_index: "16",
+			stemNotes: [
+				{ id: 124, direction: 0 },
+				{ id: 125, direction: 0 },
+				{ id: 126, direction: 0 },
+				{ id: 127, direction: 0 },
+				{ id: 128, direction: 0 },
+			],
+		},
+		{
+			id: "3581",
+			part_index: "4",
+			stemNotes: [{ id: 380, direction: 1 }],
+		},
+		{
+			id: "3470",
+			part_index: "0",
+			stemNotes: [
+				{ id: 36, direction: 1 },
+				{ id: 37, direction: 1 },
+			],
+		},
+		{
+			id: "3470",
+			part_index: "11",
+			stemNotes: [
+				{ id: 33, direction: 1 },
+				{ id: 56, direction: 1 },
+			],
+		},
+		{
+			id: "12644",
+			part_index: "22",
+			stemNotes: [
+				{ id: 22, direction: 1 },
+				{ id: 26, direction: 1 },
+				{ id: 135, direction: 1 },
+				{ id: 163, direction: 1 },
+				{ id: 199, direction: 1 },
+				{ id: 204, direction: 1 },
+				{ id: 206, direction: 1 },
+				{ id: 208, direction: 1 },
+				{ id: 210, direction: 1 },
+				{ id: 213, direction: 1 },
+			],
+		},
+		{
+			id: "12303",
+			part_index: "18",
+			stemNotes: [
+				{ id: 1, direction: 1 },
+				{ id: 4, direction: 1 },
+				{ id: 6, direction: 1 },
+				{ id: 9, direction: 1 },
+				{ id: 12, direction: 1 },
+				{ id: 14, direction: 1 },
+			],
+		},
+		{
+			id: "12669",
+			part_index: "24",
+			stemNotes: [
+				{ id: 65, direction: 1 },
+				{ id: 296, direction: 1 },
+				{ id: 298, direction: 1 },
+				{ id: 300, direction: 1 },
+				{ id: 338, direction: 1 },
+			],
+		},
+		{
+			id: "12420",
+			part_index: "21",
+			stemNotes: [
+				{ id: 614, direction: 0 },
+				{ id: 617, direction: 0 },
+				{ id: 619, direction: 0 },
+				{ id: 621, direction: 0 },
+			],
+		},
+		{
+			id: "12711",
+			part_index: "22",
+			stemNotes: [],
+		},
+		{
+			id: "12973",
+			part_index: "21",
+			stemNotes: [
+				{ id: 619, direction: 1 },
+				{ id: 622, direction: 1 },
+				{ id: 745, direction: 1 },
+			],
+		},
+	];
+	const stemDirectionItem = stemDirectionList.find(({ id, part_index }) => {
+		return id == detailId && part_index == partIndex;
+	});
+	if (stemDirectionItem) {
+		setGlobalData("stemDirectionNote", stemDirectionItem.stemNotes);
+	}
+
+	/** vfcure */
+	const vfcurveList = [
+		{
+			id: "12711",
+			part_index: "4",
+			vfcurve: [
+				{ MeasureNumberXML: 25, index: 1, bezierEndControlPt: { y: -2 } },
+				{ MeasureNumberXML: 33, index: 1, bezierEndControlPt: { y: -2 } },
+			],
+		},
+		{
+			id: "12059",
+			part_index: "0",
+			vfcurve: [
+				{ MeasureNumberXML: 15, bezierEndControlPt: { y: 2.8 }, bezierEndPt: { y: 1.1 } },
+				{ MeasureNumberXML: 16, bezierEndControlPt: { y: -1 } },
+				{ MeasureNumberXML: 19, index: 1, bezierEndControlPt: { y: 2 } },
+				{ MeasureNumberXML: 20, bezierEndControlPt: { y: -1 } },
+				{ MeasureNumberXML: 42, index: 1, bezierEndControlPt: { y: -1.5 }, bezierStartControlPt: { y: -1.5 } },
+				{ MeasureNumberXML: 46, index: 3, bezierEndControlPt: { y: -1.5 }, bezierStartControlPt: { y: -1.5 } },
+			],
+		},
+		{
+			id: "12668",
+			part_index: "11",
+			vfcurve: [{ MeasureNumberXML: 8, index: 2, bezierEndControlPt: { y: -3 }, bezierStartControlPt: { y: -3 }, bezierEndPt: { y: -1 } }],
+		},
+		{
+			id: "11976",
+			part_index: "0",
+			vfcurve: [
+				{ MeasureNumberXML: 14, index: 4, bezierEndControlPt: { y: -3 } },
+				{ MeasureNumberXML: 14, index: 1, bezierEndPt: { y: 1.5 }, bezierEndControlPt: { y: 1 } },
+			],
+		},
+	];
+	const vfcurveItem = vfcurveList.find(({ id, part_index }) => {
+		return id == detailId && part_index == partIndex;
+	});
+	if (vfcurveItem) {
+		setGlobalData("vfcurveItem", vfcurveItem.vfcurve);
+	}
+	/** drum set声部 重音 */
+	const customArtPositionList = [{ id: "12644", part_index: "25" }];
+	const customArtPositionItem = customArtPositionList.find(({ id, part_index }) => {
+		return id == detailId && part_index == partIndex;
+	});
+	if (customArtPositionItem) {
+		setGlobalData("customArtPosition", true);
+	}
+	/** 全声部声部 - & 全音符 */
+	const customTenutoList = [{ id: "12645", part_index: "5" }];
+	const customTenutoItem = customTenutoList.find(({ id, part_index }) => {
+		return id == detailId && part_index == partIndex;
+	});
+	if (customTenutoItem) {
+		setGlobalData("customTenutoItem", true);
+	}
+	/** 全声部声部 >  */
+	const customAccentList = [
+		{ id: "12711", part_index: "22" },
+		{ id: "12711", part_index: "25" },
+	];
+	const customAccentItem = customAccentList.find(({ id, part_index }) => {
+		return id == detailId && part_index == partIndex;
+	});
+	if (customAccentItem) {
+		setGlobalData("customAccentItem", true);
+	}
+	/** 全声部声部 +  */
+	const customLefthandpizzicatoList = [
+		{ id: "12711", part_index: "25" },
+		{ id: "7755", part_index: "10" },
+		{ id: "6226", part_index: "16" },
+	];
+	const customLefthandpizzicatoItem = customLefthandpizzicatoList.find(({ id, part_index }) => {
+		return id == detailId && part_index == partIndex;
+	});
+	if (customLefthandpizzicatoItem) {
+		setGlobalData("customLefthandpizzicatoItem", true);
+	}
+};

+ 8 - 6
src/page-gym/detail/index.tsx

@@ -25,7 +25,7 @@ import HomeWork from "../custom-plugins/HomeWork";
 import EvaluatingWork from "../custom-plugins/EvaluatingWork";
 import VipModel from "../custom-plugins/vip-verify";
 import GuidePage from "../custom-plugins/guide-page";
-import { setCustomGradual } from "../custom-plugins/custom-gradual";
+import { handleSetCustomRender, setCustomGradual, setCustomNoteRealValue } from "../custom-plugins/custom-gradual";
 import { getStorageSpeed, setGlobalData } from "/src/utils";
 
 //特殊教材分类id
@@ -96,10 +96,7 @@ export default defineComponent({
 		};
 		/** 获取分类数据 */
 		const getCategory = (res: any) => {
-			console.log("特殊曲谱分类ids:");
 			detailData.classList = res.data;
-			state.isSpecialBookCategory = !detailData.classList.includes(state.parentCategoriesId)
-			console.log(getIds(res.data).toString(), state.isSpecialBookCategory);
 		};
 
 		const setState = (data: any, index: number) => {
@@ -120,6 +117,7 @@ export default defineComponent({
 					console.error("解析扩展字段错误:", error);
 				}
 				state.gradualTimes = state.extConfigJson.gradualTimes
+				state.repeatedBeats = state.extConfigJson.repeatedBeats || 0
 			}
 			state.isOpenMetronome = !data.isOpenMetronome;
 			state.needTick = data.isOpenMetronome;
@@ -142,9 +140,12 @@ export default defineComponent({
 			state.fingeringInfo = subjectFingering(state.subjectId);
 
 			//小曲目 不需要计算音乐的节拍器
-			if (getIds(detailData.classList, [41]).toString().includes(data.parentCategoriesId)) {
+			if (getIds(detailData.classList, [41]).includes(data.parentCategoriesId)) {
 				state.isOpenMetronome = false;
 			}
+			// 设置是否特殊曲谱
+			state.isSpecialBookCategory = !getIds(detailData.classList).includes(state.parentCategoriesId)
+			// console.log('state.isSpecialBookCategory', state.isSpecialBookCategory, state.parentCategoriesId);
 		};
 
 		const setCustom = () => {
@@ -178,6 +179,7 @@ export default defineComponent({
 			state.musicRendered = true;
 			state.osmd = osmd;
 			setCustomGradual();
+			setCustomNoteRealValue();
 			state.times = formateTimes(osmd);
 			console.log("🚀 ~ state.times:", state.times);
 			try {
@@ -190,7 +192,7 @@ export default defineComponent({
 			if (storeSpeed){
 				handleSetSpeed(storeSpeed)
 			}
-			
+			handleSetCustomRender()
 		};
 		/** 指法配置 */
 		const fingerConfig = computed<any>(() => {

+ 7 - 0
src/state.ts

@@ -150,6 +150,13 @@ const state = reactive({
 	/** 是否是评分显示 */
 	isReport: false
 });
+/** 自定义数据 */
+export const customData = reactive({
+	/** 自定义音符时值 */
+	customNoteRealValue: [] as any,
+	/** 自定义音符按读取到的时值 */
+	customNoteCurrentTime: false
+})
 /** 音频加载完成 */
 export const onLoadedmetadata = (evt: Event) => {
 	// console.log(evt)