setting-state.ts 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. import { reactive, watch } from 'vue'
  2. import storejs from 'store'
  3. import { IMusicScore } from '/osmd-extended/src'
  4. export interface SettingState {
  5. sett: iSett
  6. eva: iEva
  7. }
  8. /* 基本设置 */
  9. export type iSett = {
  10. /** 护眼模式 */
  11. eyeProtection: boolean
  12. /** 校音提醒 */
  13. tuning: boolean
  14. /** 摄像头 */
  15. camera: boolean
  16. /** 摄像头 透明度 */
  17. opacity: number
  18. /** 循环播放 */
  19. loop: boolean
  20. /** 显示指法 */
  21. fingering: boolean
  22. /** 播放频率 */
  23. hertz: number
  24. /**曲谱大小 */
  25. scoreSize: 'small' | 'middle' | 'large'
  26. /** 曲谱类型 */
  27. type: IMusicScore
  28. /** 是否固定调 */
  29. keySignature: boolean
  30. }
  31. export type IDifficulty = 'BEGINNER' | 'ADVANCED' | 'PERFORMER'
  32. /* 评测设置 */
  33. export type iEva = {
  34. /** 难度 */
  35. difficulty: IDifficulty
  36. /** 是否保存到相册 */
  37. save: boolean
  38. /** 开启伴奏*/
  39. mute: boolean
  40. /** 反应时间MS */
  41. reactionTimeMs: number
  42. }
  43. const saveSetting = storejs.get('setting')
  44. let initState: SettingState = {
  45. sett: {
  46. eyeProtection: false,
  47. tuning: false,
  48. camera: false,
  49. opacity: 70,
  50. loop: true,
  51. fingering: true,
  52. hertz: 440,
  53. scoreSize: 'middle',
  54. type: 'staff',
  55. keySignature: false
  56. },
  57. eva: {
  58. difficulty: 'ADVANCED',
  59. save: false,
  60. mute: true,
  61. reactionTimeMs: 0
  62. },
  63. }
  64. if (saveSetting) {
  65. // 如果有保存的设置,则使用保存的设置
  66. // 酷乐秀强制440,评测时会重新按照此处配置计算频率
  67. initState.eva = { ...initState.eva, ...saveSetting.eva }
  68. initState.sett = { ...initState.sett, ...saveSetting.sett };
  69. (window as any).sett = initState.sett
  70. }
  71. const state: SettingState = reactive(initState)
  72. watch(state, () => {
  73. storejs.set('setting', state)
  74. })
  75. export default state