Browse Source

feat: 速度实时根据当前播放的小节速度显示

TIANYONG 1 year ago
parent
commit
f7862c4647
3 changed files with 13 additions and 2 deletions
  1. 1 1
      src/helpers/formateMusic.ts
  2. 5 1
      src/page-instrument/header-top/index.tsx
  3. 7 0
      src/state.ts

+ 1 - 1
src/helpers/formateMusic.ts

@@ -795,7 +795,6 @@ export const formateTimes = (osmd: OpenSheetMusicDisplay) => {
 			if (metronomeNoteIndex !== 0 && metronomeNoteIndex > si) {
 				measureSpeed = allNotes[allNotes.length - 1]?.speed || 100;
 			}
-
 			const activeVerticalMeasureList = [note.sourceMeasure.verticalMeasureList?.[0]] || [];
 			const { realValue } = iterator.currentTimeStamp;
 			const { RealValue: vRealValue, Denominator: vDenominator } = formatDuration(
@@ -998,6 +997,7 @@ export const formateTimes = (osmd: OpenSheetMusicDisplay) => {
 				osdmContext: osmd,
 				speedbeatUnit: beatUnit,
 				multipleRestMeasures: multipleRestMeasures,
+				measureSpeed,  // 小节速度
 			};
 			nodeDetail.realKey = formatRealKey(note.halfTone - fixedKey * 12, nodeDetail);
 			nodeDetail.duration = nodeDetail.endtime - nodeDetail.time;

+ 5 - 1
src/page-instrument/header-top/index.tsx

@@ -41,6 +41,9 @@ export const headTopData = reactive({
     if (value === 'follow' && metronomeData.cursorMode === 2) {
       metronomeData.cursorMode = 1
     }
+    if (value === 'practise') {
+      state.playIngSpeed = state.speed
+    }
     if (value === "evaluating") {
       // 如果是pc端, 评测模式暂不可用
       if (state.platform === IPlatform.PC) {
@@ -52,6 +55,7 @@ export const headTopData = reactive({
         });
         return;
       }
+      state.playIngSpeed = state.originSpeed
       handleStartEvaluat();
     } else if (value === "follow") {
       toggleFollow();
@@ -416,7 +420,7 @@ export default defineComponent({
                       headData.speedShow = !headData.speedShow;
                     }}
                   >
-                    <Badge class={styles.badge} content={state.speed}>
+                    <Badge class={styles.badge} content={state.playState === "play" ? state.playIngSpeed : state.speed}>
                       <img class={styles.iconBtn} src={headImg("icon_speed.svg")} />
                     </Badge>
                     <span>速度</span>

+ 7 - 0
src/state.ts

@@ -175,6 +175,8 @@ const state = reactive({
   speed: 0,
   /** 曲谱音频正常的速度 */
   originSpeed: 0,
+  /** 播放过程中显示的速度 */
+  playIngSpeed: 0,
   /** 分轨名称 */
   track: "",
   /** 当前显示声部索引 */
@@ -354,6 +356,11 @@ const handlePlaying = () => {
   state.playProgress = (currentTime / duration) * 100;
   let item = getNote(currentTime);
   // console.log(11111,currentTime,duration,state.playSource, item.i)
+  // console.log(item.i,item.noteId,item.measureSpeed)
+  // 练习模式下,实时刷新小节速度
+  if (state.modeType === "practise" && state.playState === "play" && item.measureSpeed && item.measureSpeed !== state.playIngSpeed) {
+    state.playIngSpeed = item.measureSpeed
+  }
   if (item) {
     // 选段状态下
     if (state.sectionStatus && state.section.length === 2) {