Browse Source

演奏模式 加唱名模式

黄琪勇 1 month ago
parent
commit
60334f8258

+ 1 - 1
src/helpers/metronome.ts

@@ -192,7 +192,7 @@ class Metronome {
 			if(state.playType === "sing" && state.playSource === "background" && audioDataState.songCollection.beatBanSongEle){
 				return
 			}			
-			if(state.playType === "sing" && state.playSource === "mingSong" && audioDataState.songCollection.beatMingSongEle){
+			if(state.playSource === "mingSong" && audioDataState.songCollection.beatMingSongEle){
 				return
 			}			
 		}

+ 44 - 70
src/page-instrument/header-top/index.tsx

@@ -159,40 +159,21 @@ function modeChangeHandleTimes(oldPlayType: "play" | "sing", oldPlaySource: IPla
   const playSource = state.playSource;
   const { notBeatFixtime, xmlMp3BeatFixTime, difftime } = state.times[0];
   const { isOpenMetronome, isSingOpenMetronome } = state;
-  // 演奏向演唱切
-  if (oldPlayType === "play" && playType === "sing") {
-    if (playSource === "mingSong") {
-      // 唱名文件也要加上弱起时间  他们制作曲子加了弱起时间  注意这修改了之后给总控平台的时值也需要改
-      state.fixtime = difftime;
-      state.times.map((item) => {
-        item.time = item.xmlNoteTime + difftime;
-        item.endtime = item.xmlNoteEndTime + difftime;
-        item.fixtime = difftime;
-      });
-      return true;
-    } else {
-      //演奏开了节拍器,演唱没开节拍器
-      if (isOpenMetronome && !isSingOpenMetronome) {
-        state.fixtime = notBeatFixtime;
-        state.times.map((item) => {
-          item.time = item.notBeatTime;
-          item.endtime = item.notBeatEndTime;
-          item.fixtime = notBeatFixtime;
-        });
-        return true;
-      } else if (!isOpenMetronome && isSingOpenMetronome) {
-        state.fixtime = notBeatFixtime + xmlMp3BeatFixTime;
-        state.times.map((item) => {
-          item.time = item.notBeatTime + xmlMp3BeatFixTime;
-          item.endtime = item.notBeatEndTime + xmlMp3BeatFixTime;
-          item.fixtime = notBeatFixtime + xmlMp3BeatFixTime;
-        });
-        return true;
-      }
-    }
-  } else if (oldPlayType === "sing" && playType === "play") {
-    // 演唱向演奏切
-    if (oldPlaySource === "mingSong") {
+  // 原声向伴奏和伴奏向原声不处理  范唱向伴唱和伴唱向范唱切不处理
+  if((oldPlaySource==="music"&&playSource==="background")||(oldPlaySource==="background"&&playSource==="music")){
+    return false
+  }
+  // 唱名到唱名时候不处理
+  if(oldPlaySource === "mingSong" && playSource === "mingSong"){
+    return false
+  }
+  // 原生伴奏向范唱伴唱,范唱伴唱向原生伴奏时候,isSingOpenMetronome和isOpenMetronome相等时候不处理
+  if(["music","background"].includes(oldPlaySource)&&["music","background"].includes(playSource)&&isOpenMetronome===isSingOpenMetronome){
+    return false
+  }
+  // 当切为 原生伴奏,或者范唱伴唱 时候
+  if(playSource==="music" || playSource ==="background"){
+    if(playType === "play"){
       // 有节拍器
       if (isOpenMetronome) {
         state.fixtime = notBeatFixtime + xmlMp3BeatFixTime;
@@ -212,37 +193,7 @@ function modeChangeHandleTimes(oldPlayType: "play" | "sing", oldPlaySource: IPla
         return true;
       }
     }
-    // 演奏开了节拍器,演唱没开节拍器
-    if (isOpenMetronome && !isSingOpenMetronome) {
-      state.fixtime = notBeatFixtime + xmlMp3BeatFixTime;
-      state.times.map((item) => {
-        item.time = item.notBeatTime + xmlMp3BeatFixTime;
-        item.endtime = item.notBeatEndTime + xmlMp3BeatFixTime;
-        item.fixtime = notBeatFixtime + xmlMp3BeatFixTime;
-      });
-      return true;
-    } else if (!isOpenMetronome && isSingOpenMetronome) {
-      state.fixtime = notBeatFixtime;
-      state.times.map((item) => {
-        item.time = item.notBeatTime;
-        item.endtime = item.notBeatEndTime;
-        item.fixtime = notBeatFixtime;
-      });
-      return true;
-    }
-  } else if (oldPlayType === "sing" && playType === "sing") {
-    // 演唱之间切换
-    // 切到唱名时候
-    if (playSource === "mingSong") {
-      // 唱名文件也要加上弱起时间  他们制作曲子加了弱起时间  注意这修改了之后给总控平台的时值也需要改
-      state.fixtime = difftime;
-      state.times.map((item) => {
-        item.time = item.xmlNoteTime + difftime;
-        item.endtime = item.xmlNoteEndTime + difftime;
-        item.fixtime = difftime;
-      });
-      return true;
-    } else if (oldPlaySource === "mingSong") {
+    if(playType==="sing"){
       // 有节拍器
       if (isSingOpenMetronome) {
         state.fixtime = notBeatFixtime + xmlMp3BeatFixTime;
@@ -263,6 +214,17 @@ function modeChangeHandleTimes(oldPlayType: "play" | "sing", oldPlaySource: IPla
       }
     }
   }
+  // 当切为唱名时候
+  if(playSource==="mingSong"){
+      // 唱名文件也要加上弱起时间  他们制作曲子加了弱起时间  注意这修改了之后给总控平台的时值也需要改
+      state.fixtime = difftime;
+      state.times.map((item) => {
+        item.time = item.xmlNoteTime + difftime;
+        item.endtime = item.xmlNoteEndTime + difftime;
+        item.fixtime = difftime;
+      });
+      return true;
+  }
   return false;
 }
 
@@ -385,8 +347,13 @@ export default defineComponent({
           return { display: true, disabled: true };
         }
         if (state.playType === "play") {
-          // 原声, 伴奏 少一个,就不能切换
-          if (state.music && state.accompany) return { display: true, disabled: false };
+          let index = 0;
+          state.music && index++;
+          state.accompany && index++;
+          state.mingSong && index++;
+          if (index > 1) {
+            return { display: true, disabled: false };
+          }
         } else {
           // 范唱
           let index = 0;
@@ -412,6 +379,7 @@ export default defineComponent({
         let index = 0;
         state.music && index++;
         state.accompany && index++;
+        state.mingSong && index++;
         let songIndex = 0;
         state.fanSong && songIndex++;
         state.banSong && songIndex++;
@@ -830,7 +798,7 @@ export default defineComponent({
                   state.playSource = state.fanSong ? "music" : state.banSong ? "background" : "mingSong";
                 } else {
                   state.playType = "play";
-                  state.playSource = state.music ? "music" : "background";
+                  state.playSource =  state.music ? "music" : state.accompany ? "background" : "mingSong";
                 }
                 isClickMode = true;
                 // 有指法并且显示指法的时候 切换到演唱模式 需要影藏指法
@@ -868,7 +836,13 @@ export default defineComponent({
                 const oldPlayType = state.playType;
                 const oldPlaySource = state.playSource;
                 if (state.playType === "play") {
-                  state.playSource = state.playSource === "music" ? "background" : "music";
+                  if (state.playSource === "music") {
+                    state.playSource = state.accompany ? "background" : "mingSong";
+                  } else if (state.playSource === "background") {
+                    state.playSource = state.mingSong ? "mingSong" : "music";
+                  } else {
+                    state.playSource = state.music ? "music" : "background";
+                  }
                 } else {
                   if (state.playSource === "music") {
                     state.playSource = state.banSong ? "background" : "mingSong";
@@ -880,7 +854,7 @@ export default defineComponent({
                 }
                 await handlerModeChange(oldPlayType, oldPlaySource);
                 showToast({
-                  message: state.playType === "play" ? (state.playSource === "music" ? "已切换为原声" : "已切换为伴奏") : state.playSource === "music" ? "已切换为范唱" : state.playSource === "background" ? "已切换为伴唱" : "已切换为唱名",
+                  message: state.playType === "play" ? (state.playSource === "music" ? "已切换为原声" : state.playSource === "background" ? "已切换为伴奏" : "已切换为唱名") : state.playSource === "music" ? "已切换为范唱" : state.playSource === "background" ? "已切换为伴唱" : "已切换为唱名",
                   position: "top",
                   className: "selectionToast",
                 });

+ 3 - 3
src/state.ts

@@ -1593,6 +1593,7 @@ const setState = (data: any, index: number) => {
   const playObj = {
     "play_music":"music",
     "play_background":"accompany",
+    "play_mingSong":"mingSong",
     "sing_music":"fanSong",
     "sing_background":"banSong",
     "sing_mingSong":"mingSong",
@@ -1605,6 +1606,8 @@ const setState = (data: any, index: number) => {
         state.playSource = "music"
       }else if(state.accompany){
         state.playSource = "background"
+      }else if(state.mingSong){
+        state.playSource = "mingSong"
       }else{
         if(state.fanSong){
           state.playType = "sing"
@@ -1612,9 +1615,6 @@ const setState = (data: any, index: number) => {
         }else if(state.banSong){
           state.playType = "sing"
           state.playSource = "background"
-        }else if(state.mingSong){
-          state.playType = "sing"
-          state.playSource = "mingSong"
         }
       }
     }else{

+ 2 - 0
src/view/audio-list/index.tsx

@@ -161,6 +161,7 @@ export const changeSongSourceByBeat = (isDisBeat:boolean) => {
 		if(state.playType === "play"){
 			audioData.songEle = audioData.songCollection.songEle
 			audioData.backgroundEle = audioData.songCollection.backgroundEle
+			audioData.mingSongEle = audioData.songCollection.mingSongEle
 		} else {
 			audioData.songEle = audioData.songCollection.fanSongEle
 			audioData.backgroundEle = audioData.songCollection.banSongEle
@@ -171,6 +172,7 @@ export const changeSongSourceByBeat = (isDisBeat:boolean) => {
 		if(state.playType === "play"){
 			audioData.songEle = audioData.songCollection.beatSongEle || audioData.songCollection.songEle
 			audioData.backgroundEle = audioData.songCollection.beatBackgroundEle || audioData.songCollection.backgroundEle
+			audioData.mingSongEle = audioData.songCollection.beatMingSongEle || audioData.songCollection.mingSongEle
 		} else {
 			audioData.songEle = audioData.songCollection.beatFanSongEle || audioData.songCollection.fanSongEle
 			audioData.backgroundEle = audioData.songCollection.beatBanSongEle || audioData.songCollection.banSongEle

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

@@ -109,7 +109,7 @@ export default defineComponent({
 				renderSingleHorizontalStaffline: state.isSingleLine ? true : false,
 				// autoGenerateMultipleRestMeasuresFromRestMeasures: state.isSingleLine ? false : true, // 连续休止小节是否合并显示
 				autoGenerateMultipleRestMeasuresFromRestMeasures: true,
-				drawLyrics: ( ((!state.accompany && !state.music ) || state.playType === 'sing' || !state.isEvxml) && !state.isSimplePage) ? true : false, // 演唱模式才渲染歌词,simple页面不显示歌词
+				drawLyrics: ((state.playType === 'sing' || !state.isEvxml) && !state.isSimplePage) ? true : false, // 演唱模式才渲染歌词,simple页面不显示歌词
 				// darkMode: true, // 暗黑模式
 				// pageFormat: 'A4_P',
 				// autoBeam: true,