Browse Source

feat: 评测系统节拍器

TIANYONG 1 năm trước cách đây
mục cha
commit
b6a53eb063
2 tập tin đã thay đổi với 16 bổ sung2 xóa
  1. 7 0
      src/pages/detail/runtime.ts
  2. 9 2
      src/subpages/colexiu/buttons/evaluating.tsx

+ 7 - 0
src/pages/detail/runtime.ts

@@ -532,6 +532,8 @@ export const resetPlayStatus = async (notStop?: boolean) => {
 }
 
 export const play = async () => {
+  // 评测是app播放,非h5播放
+  if (modelType.value === 'evaluation') return
   if (state.isFirstPlay) {
     resetPlayStatus()
     detailState.fixedKey = 0
@@ -880,6 +882,11 @@ export const testPlay = async () => {
   //setTick(setTickStop)
 }
 
+// 有系统节拍器的,评测需要播放系统节拍器
+export const setEvaluatTick = async () => {
+  await setTick(setTickStop)
+}
+
 export const stopTick = () => {
   if (state.tickPlayer) {
     state.tickPlayer.destroy()

+ 9 - 2
src/subpages/colexiu/buttons/evaluating.tsx

@@ -577,10 +577,13 @@ const setPlayer = async () => {
     runtime.evaluatingStatus = false
     Toast.clear()
   }
-  evaluatStart()
+  // midi音频播放不需要再次调用此方法,而是通过监听tickEnd回调事件调用
+  if (!detailState.isAppPlay && !detailState.needTick) {
+    evaluatStart()
+  }
 }
 
-const togglePlay = () => {
+const togglePlay = async () => {
   if (detailState.isPauseRecording) {
     evaluating.value = false
     startPlay()
@@ -589,6 +592,10 @@ const togglePlay = () => {
   if (evaluating.value) {
     stopPlay()
   } else {
+    // 评测模式,如果有系统节拍器,需要先播放系统节拍器
+    if (detailState.needTick) {
+      await RuntimeUtils.setEvaluatTick()
+    }
     setPlayer()
   }
 }