Browse Source

feat: 增加速度类型

TIANYONG 3 months ago
parent
commit
30f7742bac
3 changed files with 80 additions and 2 deletions
  1. 1 1
      osmd-extended
  2. 72 0
      src/helpers/beatConfig.ts
  3. 7 1
      src/state.ts

+ 1 - 1
osmd-extended

@@ -1 +1 @@
-Subproject commit 626c8e581c9a052c9f245676e171cdb483c86463
+Subproject commit 8646ea65db6520df8fe8d5d180d5c9dcf634e2b2

+ 72 - 0
src/helpers/beatConfig.ts

@@ -0,0 +1,72 @@
+export const unitObj = {
+   "1/1": 1 / 1,
+   "1/2": 1 / 2,
+   "1/4": 1 / 4,
+   "1/8": 1 / 8,
+   "1/16": 1 / 16,
+   "1/2.": (1 / 2) * 1.5,
+   "1/4.": (1 / 4) * 1.5,
+   "1/8.": (1 / 8) * 1.5
+} as Record<string, any>
+
+/**
+ * 速度转换,几分音符的速度转为几分音符的速度
+ */
+export const speedBeatTo = (speedBeat: { unit: string; speed: number }, unit: string) => {
+   return (unitObj[speedBeat.unit] * speedBeat.speed) / unitObj[unit]
+}
+
+/** 谱面速度节拍器转为 约定的节拍器符号 */
+export function beatUnitTo(beatUnit: string, isDot: boolean) {
+   let multiple = "1/4"
+   switch (beatUnit) {
+      case "1024th":
+         multiple = "1/1024"
+         break
+      case "512th":
+         multiple = "1/512"
+         break
+      case "256th":
+         multiple = "1/256"
+         break
+      case "128th":
+         multiple = "1/128"
+         break
+      case "64th":
+         multiple = "1/64"
+         break
+      case "32nd":
+         multiple = "1/32"
+         break
+      case "16th":
+         multiple = "1/16"
+         break
+      case "eighth":
+         multiple = "1/8"
+         break
+      case "quarter":
+         multiple = "1/4"
+         break
+      case "half":
+         multiple = "1/2"
+         break
+      case "whole":
+         multiple = "1/1"
+      default:
+         break
+   }
+   isDot && (multiple += ".")
+   return multiple
+}
+
+/** 几分音符对应的速度图片 */
+export const unitImgs = {
+   "1/1": 'speed1',
+   "1/2": 'speed2',
+   "1/4": 'speed3',
+   "1/8": 'speed4',
+   "1/16": 'spee5',
+   "1/2.": 'speed6',
+   "1/4.": 'speed7',
+   "1/8.": 'speed8',
+} as Record<string, any>

+ 7 - 1
src/state.ts

@@ -22,6 +22,7 @@ import { musicScoreRef, headerColumnHide } from "/src/page-instrument/view-detai
 import { headTopData } from "/src/page-instrument/header-top/index";
 import { api_lessonTrainingTrainingStudentDetail } from "/src/page-instrument/api"
 import { undoData, moveData } from "/src/view/plugins/move-music-score"
+import { speedBeatTo } from "/src/helpers/beatConfig"
 
 const query: any = getQuery();
 
@@ -358,6 +359,8 @@ const state = reactive({
   bizMusicCategoryId: 0,
   /** 资源类型: mp3 | midi */
   playMode: "MP3" as "MP3" | "MIDI",
+  /** 谱面的速度节拍 */
+  speedBeatUnit: "1/4",
   /** 设置的速度 */
   speed: 0,
   /** 曲谱音频正常的速度 */
@@ -1673,7 +1676,10 @@ const setState = (data: any, index: number) => {
   state.musicSheetCategoriesId = data.musicCategoryId;
   state.bizMusicCategoryId = data.bizMusicCategoryId
   state.playMode = data.playMode === "MP3" ? "MP3" : "MIDI";
-  state.originSpeed = state.speed = parseFloat(data.playSpeed) || 0;
+  // 设置速度节拍
+  state.speedBeatUnit = data.speedBeatUnit || "1/4"
+  // 这里把后台设置的速度 转换为1/4拍的速度 
+  state.originSpeed = state.speed = speedBeatTo({unit: data.speedBeatUnit || "1/4",speed: parseFloat(data.playSpeed) || 0}, `1/4`);
   // state.originSpeed = state.speed = data.playSpeed;
   // state.playIngSpeed = data.playSpeed;
   const track = data.code || data.track;