state.ts 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. import { reactive } from 'vue'
  2. import { GradualNote } from './calcSpeed'
  3. import { IDifficulty } from './setting-state'
  4. type IRenderType = 'native' | 'cache'
  5. type IMode = 'homework' | 'contact' | 'evaluating'
  6. export enum GradualVersion {
  7. BASE,
  8. ENSEMBLE
  9. }
  10. type URLSetting = {
  11. mode?: 'EVALUATING',
  12. resets?: ['SPEED'],
  13. difficulty?: IDifficulty,
  14. feeType?: 'FREE',
  15. submitData?: any
  16. }
  17. const state = reactive({
  18. sectionStatus: false,
  19. maskStatus: false,
  20. section: [] as any[],
  21. times: [] as any[],
  22. sectionBoundingBoxs: [] as any[],
  23. activeTick: -1,
  24. activeTickRepeat: 1,
  25. showTick: false,
  26. isSpecialShapedScreen: false,
  27. notchHeight: 0,
  28. fixedKey: 0,
  29. renderLoading: false,
  30. evaluatings: {} as any,
  31. isPauseRecording: false,
  32. feeShow: false,
  33. vipShow: false,
  34. mode: 'contact' as IMode,
  35. subjectId: 0 as number,
  36. activeSpeed: 90 as number, // 当前速度
  37. baseSpeed: 0 as number, // 基准速度
  38. activeDetail: null as any,
  39. needTick: false, // 是否需要节拍器
  40. /** 跳过节拍器 */
  41. skipTick: false,
  42. /** 重复节拍 */
  43. repeatedBeats: false,
  44. sectionFlash: false,
  45. befireSection: null as any,
  46. /** 是否是打击乐 true: 是, false: 不是 */
  47. isPercussion: false,
  48. enableEvaluation: true, // 是否开启评测
  49. isAppPlay: false, // 是否是app播放
  50. partListNames: [] as string[], // 当前曲谱中所有声部名字
  51. partIndex: 0, // 当前显示声部索引
  52. partName: '', //当前显示声部名字
  53. midiPlayIniting: false, // midi播放器是否初始化中
  54. isSpecialBookCategory: false, // 是否是特殊乐谱类型
  55. // 声部对应code
  56. code: '',
  57. /** 是否冻结模式 */
  58. frozenMode: false,
  59. /** 初次render结束 */
  60. initRendered: false,
  61. /** URL参数设置 */
  62. setting: null as null | URLSetting,
  63. /**当前激活的note */
  64. activeNote: '' as any,
  65. /** 免费试用比例,默认10% */
  66. freeRate: 0.1 as number,
  67. /** 渲染比例 */
  68. zoom: 1,
  69. /** 渲染模式*/
  70. renderType: 'native' as IRenderType,
  71. /** 渐变速度信息 */
  72. gradual: [] as GradualNote[],
  73. /** 渐变速度版本 */
  74. /** 渐变时间信息 */
  75. gradualTimes: null as GradualTimes,
  76. /** 单声部多声轨 */
  77. multitrack: 0,
  78. /** 渐变速度版本 */
  79. gradualVersion: GradualVersion.BASE as GradualVersion,
  80. /** 是否需要刷新选段小节,谱面重新渲染后需要刷新选段小节 */
  81. isNeedRefreshSection: false,
  82. /** 是否是课后训练模式 */
  83. isLessonTrain: false,
  84. /** 是否隐藏评测报告弹窗,保存演奏按钮,默认不隐藏 */
  85. isHideEvaluatReportSaveBtn: false,
  86. /** 合奏曲目是否合并展示 */
  87. isCombineRender: false,
  88. /** 大雅金唐类目 */
  89. isDaYaCategory: false,
  90. /** 选段评测,开始播放的音符的时值 */
  91. firstNoteTime: 0,
  92. /** 后台设置的播放速度 */
  93. playSpeed: 0 as any,
  94. /** 后台设置的速度,(临时用) */
  95. temporarySpeed: 0 as any,
  96. })
  97. export const isRhythmicExercises = (musicName?: string) => {
  98. const examSongName = musicName ? musicName : state?.activeDetail?.musicSheetName || ''
  99. // console.log("🚀 ~ examSongName:", examSongName,state)
  100. return examSongName.indexOf('节奏练习') > -1
  101. }
  102. export default state
  103. export type GradualTimes = null | {
  104. [key: string]: string
  105. }