Browse Source

Merge branch 'hqyDevNewVersion' of http://git.dayaedu.com/liushengqiang/music-score into ktyq-test-new

黄琪勇 6 months ago
parent
commit
4ef5613fd8
5 changed files with 47 additions and 44 deletions
  1. 1 3
      src/helpers/formateMusic.ts
  2. 11 4
      src/helpers/metronome.ts
  3. 2 2
      src/state.ts
  4. 15 15
      src/view/audio-list/index.tsx
  5. 18 20
      src/view/music-score/index.tsx

+ 1 - 3
src/helpers/formateMusic.ts

@@ -1681,13 +1681,11 @@ const analyzeEvxml = (xmlParse: any, xmlUrl?: string) => {
 	const xmlNum2 = xmlParse.getElementsByTagName("timegap")[0]?.getElementsByTagName("values")[0]?.getElementsByTagName("item")[1]?.getAttribute('num');
 	const denNum2 = xmlParse.getElementsByTagName("timegap")[0]?.getElementsByTagName("values")[0]?.getElementsByTagName("item")[1]?.getAttribute('den');
 	const timeGaps: any = xmlParse.getElementsByTagName("timegap")?.length ? Array.from(xmlParse.getElementsByTagName("timegap")?.[0]?.getElementsByTagName("values")?.[0]?.getElementsByTagName("item")) : [];
+	state.xmlHasTimes = !!xmlParse.getElementsByTagName("times")?.length
 	// 第一个音符的起始时间
 	const firstMeasure = xmlParse.getElementsByTagName("measure")[0];
 	if (firstMeasure) {
 		const firstNoteBeginTime = firstMeasure.getElementsByTagName("times")[0]?.getElementsByTagName("time")[0]?.getAttribute('begin');
-		if (firstNoteBeginTime) {
-			state.xmlHasTimes = true;
-		}
 		state.evXmlBeginTime = firstNoteBeginTime ? firstNoteBeginTime / 1000 : xmlNum ? 60 / state.originSpeed * xmlNum * 4/denNum : 0;
 		state.secondEvXmlBeginTime = firstNoteBeginTime ? 0 : xmlNum2 ? 60 / state.originSpeed * xmlNum2 * 4/denNum2 : 0;
 		const hasTimeGap = state.xmlHasTimeGap = xmlParse.getElementsByTagName("timegap").length > 0;

+ 11 - 4
src/helpers/metronome.ts

@@ -186,16 +186,16 @@ class Metronome {
 			if(state.playType === "play" && state.playSource === "music" && audioDataState.songCollection.beatSongEle){
 				return
 			}			
-			if(state.playType === "play" && state.playSource === "background" && audioDataState.songCollection.betaBackgroundEle){
+			if(state.playType === "play" && state.playSource === "background" && audioDataState.songCollection.beatBackgroundEle){
 				return
 			}			
-			if(state.playType === "sing" && state.playSource === "music" && audioDataState.songCollection.betaFanSongEle){
+			if(state.playType === "sing" && state.playSource === "music" && audioDataState.songCollection.beatFanSongEle){
 				return
 			}			
-			if(state.playType === "sing" && state.playSource === "background" && audioDataState.songCollection.betaBanSongEle){
+			if(state.playType === "sing" && state.playSource === "background" && audioDataState.songCollection.beatBanSongEle){
 				return
 			}			
-			if(state.playType === "sing" && state.playSource === "mingSong" && audioDataState.songCollection.betaMingSongEle){
+			if(state.playType === "sing" && state.playSource === "mingSong" && audioDataState.songCollection.beatMingSongEle){
 				return
 			}			
 		}
@@ -355,6 +355,13 @@ class Metronome {
 
 		let metroList: number[] = [];
 		const metroMeasure: any[] = [];
+		console.log("节拍器 每一小节时间:", measures)
+		console.log("节拍器 间隔:", measures.map(item => {
+			return {
+				time: item.time,
+				measureNumberXML: item.measureNumberXML
+			}
+		}))
 		// 4.按照拍数将时长平均分配
 		console.log("节拍器 每一小节时间:", measures)
 		console.log("节拍器 间隔:", measures.map(item => {

+ 2 - 2
src/state.ts

@@ -14,7 +14,7 @@ import { verifyCanRepeat, getDuration, xmlAddPartName } from "./helpers/formateM
 import { getMusicSheetDetail } from "./utils/baseApi"
 import { getQuery } from "/src/utils/queryString";
 import { followData, skipNotePractice } from "/src/view/follow-practice/index"
-import { changeSongSourceByBate } from "/src/view/audio-list"
+import { changeSongSourceByBeat } from "/src/view/audio-list"
 import { moveSmoothAnimation, smoothAnimationState, moveSmoothAnimationByPlayTime, moveTranslateXNum, destroySmoothAnimation, calcClientWidth } from "/src/page-instrument/view-detail/smoothAnimation"
 import { storeData } from "/src/store";
 import { downloadXmlStr } from "./view/music-score"
@@ -815,7 +815,7 @@ export const togglePlay = async (playState: "play" | "paused", isForceCLoseToast
   // 播放之前  当为评测模式和不为MIDI时候按  是否禁用节拍器  切换音源
   if (playState === 'play' && state.modeType === "practise" && state.playMode !== "MIDI") {
     console.log("设置音源")
-    changeSongSourceByBate(metronomeData.disable)
+    changeSongSourceByBeat(metronomeData.disable)
   }
   // midi播放
   if (state.isAppPlay) {

+ 15 - 15
src/view/audio-list/index.tsx

@@ -26,10 +26,10 @@ export const audioData = reactive({
 		banSongEle: null as HTMLAudioElement | null,
 		mingSongEle: null as HTMLAudioElement | null,
 		beatSongEle: null as HTMLAudioElement | null,
-		betaBackgroundEle: null as HTMLAudioElement | null,
-		betaFanSongEle: null as HTMLAudioElement | null,
-		betaBanSongEle: null as HTMLAudioElement | null,
-		betaMingSongEle: null as HTMLAudioElement | null
+		beatBackgroundEle: null as HTMLAudioElement | null,
+		beatFanSongEle: null as HTMLAudioElement | null,
+		beatBanSongEle: null as HTMLAudioElement | null,
+		beatMingSongEle: null as HTMLAudioElement | null
 	},
 	midiRender: false,
 	progress: 0, // midi播放进度(单位:秒)
@@ -150,10 +150,10 @@ export const toggleMutePlayAudio = (source: IPlayState, muted: boolean) => {
 };
 
 /** 切换节拍器音源 */
-export const changeSongSourceByBate = (isDisBate:boolean) => {
+export const changeSongSourceByBeat = (isDisBeat:boolean) => {
 	const currentTime = getAudioCurrentTime()
-	// isDisBate 为true 切换到不带节拍的,为false 切换到带节拍的
-	if (isDisBate) {
+	// isDisBeat 为true 切换到不带节拍的,为false 切换到带节拍的
+	if (isDisBeat) {
 		if(state.playType === "play"){
 			audioData.songEle = audioData.songCollection.songEle
 			audioData.backgroundEle = audioData.songCollection.backgroundEle
@@ -166,11 +166,11 @@ export const changeSongSourceByBate = (isDisBate:boolean) => {
 		// 没有节拍器资源的时候 用 不带节拍器的资源,防止播放不了
 		if(state.playType === "play"){
 			audioData.songEle = audioData.songCollection.beatSongEle || audioData.songCollection.songEle
-			audioData.backgroundEle = audioData.songCollection.betaBackgroundEle || audioData.songCollection.backgroundEle
+			audioData.backgroundEle = audioData.songCollection.beatBackgroundEle || audioData.songCollection.backgroundEle
 		} else {
-			audioData.songEle = audioData.songCollection.betaFanSongEle || audioData.songCollection.fanSongEle
-			audioData.backgroundEle = audioData.songCollection.betaBanSongEle || audioData.songCollection.banSongEle
-			audioData.mingSongEle = audioData.songCollection.betaMingSongEle || audioData.songCollection.mingSongEle
+			audioData.songEle = audioData.songCollection.beatFanSongEle || audioData.songCollection.fanSongEle
+			audioData.backgroundEle = audioData.songCollection.beatBanSongEle || audioData.songCollection.banSongEle
+			audioData.mingSongEle = audioData.songCollection.beatMingSongEle || audioData.songCollection.mingSongEle
 		}
 	}
 	// 设置进度
@@ -197,7 +197,7 @@ export const changeMingSongType = () =>{
 	if(mingSongEle&&mingSongGirlEle){
 		const mingSongType = audioData.mingSongType
 		audioData.songCollection.mingSongEle = mingSongType === 1 ? mingSongEle : mingSongGirlEle
-		audioData.songCollection.betaMingSongEle = mingSongType === 1 ? beatMingSongEle : beatMingSongGirlEle
+		audioData.songCollection.beatMingSongEle = mingSongType === 1 ? beatMingSongEle : beatMingSongGirlEle
 	}
 }
 export default defineComponent({
@@ -387,9 +387,9 @@ export default defineComponent({
 				const [beatMusic, beatAccompany, beatFanSong, beatBanSong, beatMingSong, beatMingSongGirl] = await loadBeatAudio()
 				Object.assign(audioData.songCollection, {
 					beatSongEle:beatMusic,
-					betaBackgroundEle:beatAccompany,
-					betaFanSongEle:beatFanSong,
-					betaBanSongEle:beatBanSong,
+					beatBackgroundEle:beatAccompany,
+					beatFanSongEle:beatFanSong,
+					beatBanSongEle:beatBanSong,
 					beatMingSongEle:beatMingSong
 				})
 				Object.assign(audioData.mingSongTypeCollection, {

+ 18 - 20
src/view/music-score/index.tsx

@@ -218,26 +218,24 @@ export default defineComponent({
 				selectionBox && container?.removeChild(selectionBox)
 				selectionBgBox && container?.removeChild(selectionBgBox)
 			}
-			// 有可能会有 其他地方的js执行 阻塞 这里下一帧再执行确保加载条出来
-			requestAnimationFrame(() =>{
-				isLoadingCss.value = true
-				requestAnimationFrame(async () => {
-					state.evXmlBeginArr = [];
-					state.vfmeasures = [];
-					musicData.showSelection = false;
-					state.osmd.clear();
-					musicData.isRenderLoading = true;
-					musicData.isRefreshLoading = true;
-					getContainerWidth();
-					//setRenderType();
-					await getXML();
-					await init();
-					musicData.isRenderLoading = false;
-					musicData.isRefreshLoading = false;
-					musicData.showSelection = true;
-					isLoadingCss.value = false
-				})
-			})
+			// 有可能会有 其他地方的js执行 阻塞 这里确保加载条出来
+			isLoadingCss.value = true
+			setTimeout(async () => {
+				state.evXmlBeginArr = [];
+				state.vfmeasures = [];
+				musicData.showSelection = false;
+				state.osmd.clear();
+				musicData.isRenderLoading = true;
+				musicData.isRefreshLoading = true;
+				getContainerWidth();
+				//setRenderType();
+				await getXML();
+				await init();
+				musicData.isRenderLoading = false;
+				musicData.isRefreshLoading = false;
+				musicData.showSelection = true;
+				isLoadingCss.value = false
+			}, 120);
 		}
 		expose({
 			refreshMusicScore,