Browse Source

feat: 如果后台没有设置速度,默认取xml速度,如果xml也没有速度,默认赋值100

TIANYONG 10 months ago
parent
commit
1420308558

+ 14 - 3
src/pages/detail/helpers.ts

@@ -316,7 +316,13 @@ export const getAllNodes = (osmd: any) => {
           //     ? getTimeByBeatUnit(beatUnit, measureSpeed, iterator.currentMeasure.activeTimeSignature.Denominator)
           //     : baseSpeed) || 1
           // #8456 光标和节拍对应不上等bug修复, 
-          let beatSpeed = (state.isSpecialBookCategory ? measureSpeed : baseSpeed) || 1;
+          let beatSpeed = 1;
+          if (measureSpeed !== baseSpeed && !runtime.hasVaryingSpeed) {
+            beatSpeed = baseSpeed || measureSpeed || 100
+          } else {
+            beatSpeed = (state.isSpecialBookCategory ? measureSpeed : baseSpeed) || 1;
+          }
+          // let beatSpeed = (state.isSpecialBookCategory ? measureSpeed : baseSpeed) || 1;
 
           let speed = (state.isSpecialBookCategory ? measureSpeed : baseSpeed) || 1
           // console.log('曲谱设置的速度', { base: getTimeByBeatUnit(beatUnit, measureSpeed, iterator.currentMeasure.activeTimeSignature.Denominator), beatSpeed, speed})
@@ -1121,14 +1127,19 @@ export const formatXML = (xml: string, initInfo?: InitXmlInfo): string => {
 		}
 	}
 	speeds = [...new Set(speeds)]
-	const hasVaryingSpeed = speeds.length > 1 ? true : false
+	runtime.hasVaryingSpeed = speeds.length > 1 ? true : false
+  // 如果后台没有设置速度,默认取xml速度,如果xml也没有速度,默认赋值100
+	if (state.baseSpeed === 0) {
+		state.baseSpeed = speeds[0] ? speeds[0] : 100;
+		state.playSpeed = state.baseSpeed;
+	}
 	// 如果谱面和小节都没有打速度,osmd设置的小节速度默认取后台设置的速度
 	if (speeds.length === 0) {
 		;(window as any).baseMeasureSpeed = state.baseSpeed
 	} else {
 		runtime.originAudioPlayRate = speeds[0] / state.baseSpeed
 	}
-	console.log('是否是变速的曲子:',hasVaryingSpeed,speeds)
+	console.log('是否是变速的曲子:',runtime.hasVaryingSpeed,speeds)
 
   const measures = xmlParse.getElementsByTagName('measure')
   let beats = -1

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

@@ -152,6 +152,8 @@ const state = reactive({
   appAudioTotalTime: 0,
   /** 播放倍率不等于1,或者是选段评测,APP暂时不支持保存演奏,需要给出提示 */
   initShow: true,
+  /** 是否是变速的曲子 */
+  hasVaryingSpeed: false,  
 })
 
 const syncStepIndex = (i: number) => {

+ 3 - 1
src/pages/detail/state.ts

@@ -39,7 +39,7 @@ const state = reactive({
   mode: 'contact' as IMode,
   subjectId: 0 as number,
   activeSpeed: 90 as number, // 当前速度
-  baseSpeed: 90 as number, // 基准速度
+  baseSpeed: 0 as number, // 基准速度
   activeDetail: null as any,
   needTick: false, // 是否需要节拍器
   /** 跳过节拍器 */
@@ -94,6 +94,8 @@ const state = reactive({
   isDaYaCategory: false,
   /** 选段评测,开始播放的音符的时值 */
   firstNoteTime: 0,
+  /** 后台设置的播放速度 */
+  playSpeed: 0 as any,
 })
 
 export const isRhythmicExercises = (musicName?: string) => {

+ 2 - 2
src/subpages/colexiu/index.d.ts

@@ -60,8 +60,8 @@ export type MusicSheelDetail = {
   musicJianSvg?: string
   /** 缓存的svg固定调 地址 */
   musicFirstSvg?: string
-  /**后台曲谱设置的速度 */
-  playSpeed?: number
+  /** 后台设置的播放速度 */
+  playSpeed?: number | string
   /** 曲谱类型 */
   musicSheetType?: string
 }

+ 1 - 1
src/subpages/colexiu/popups/evaluating/content.tsx

@@ -285,7 +285,7 @@ export default defineComponent({
                     noSaveTips.value && runtime.initShow ? 
                     <div class={[styles.noSaveTip]}>
                       <span class={styles.arrowIcon}></span>
-                      {noSaveTips.value}
+                      <span>{noSaveTips.value}</span>
                       <i onClick={() => runtime.initShow = false}></i>
                     </div> : null                   
                   }

+ 4 - 0
src/subpages/colexiu/popups/evaluating/index.module.less

@@ -308,6 +308,10 @@
       margin-left: 16Px;
       cursor: pointer;
     }
+    span {
+      word-break: keep-all;
+      width: max-content;
+    }
     .arrowIcon {
       position: absolute;
       left: 50%;

+ 5 - 0
src/subpages/colexiu/uses/use-app.ts

@@ -90,6 +90,11 @@ export const useMp3s = async (detail: MusicSheelDetail) => {
     music: musicSong ? musicSong + '?t=music' : '',
   }
   detailState.isAppPlay = detail.audioType === 'MIDI'
+  // 如果后台有速度
+  if (detail.playSpeed && detail.playSpeed !== "") {
+    detailState.playSpeed = detail.playSpeed ? parseFloat(String(detail.playSpeed)) : 100;
+    detailState.baseSpeed = detailState.playSpeed
+  }
   let defaultExtConfigJson = {
     skipTick: false,
     repeatedBeats: false,