import { defineComponent, reactive, computed, toRef, ref } from "vue";
import styles from "./index.module.less"
import { headImg } from "../image";
import { headTopData } from "../index"
import { Switch, showToast, Field, Popup, Slider } from "vant";
import state, { refreshMusicSvg, IPlatform, checkMoveNoSave, handleGuide, resetCursorPosition } from "/src/state"
import { api_closeCamera, api_openCamera, api_savePicture } from "/src/helpers/communication";
import { smoothAnimationState} from "/src/page-instrument/view-detail/smoothAnimation"
import Recommendation from "../../custom-plugins/helper-model/recommendation";
import { resetRenderMusicScore } from "/src/view/music-score";
import ScreenModel from "../../custom-plugins/helper-model/screen-model";
import { getQuery } from "/src/utils/queryString";
import { reCheckDelay } from "/src/page-instrument/evaluat-model"
import { audioData, changeMingSongType } from "/src/view/audio-list"
import useDrag from "/src/view/plugins/useDrag/index";
import Dragbom from "/src/view/plugins/useDrag/dragbom";
import { storeData } from "/src/store";
import { getGuidance, setGuidance } from "../../custom-plugins/guide-page/api";
import { metronomeData } from "/src/helpers/metronome";
import { handleLoadBeatMusic } from "/src/view/audio-list"
export default defineComponent({
name: "settting",
setup() {
const query = getQuery();
const helperData = reactive({
screenModelShow: false, // 投屏帮助
recommendationShow: false, // 建议
});
const zoomList = [{name:'0.5x',value: 0.5},{name:'0.75x',value: 0.65},{name:'1x',value: 0.8},{name:'1.25x',value: 1.25},{name:'1.5x',value: 1.5},{name:'1.75x',value: 1.75},{name:'2x',value: 2},{name:'2.25x',value: 2.25}]
const parentClassName = "recommenBoxClass_drag";
const userId = storeData.user?.id ? String(storeData.user?.id) : "";
const positionInfo =
state.platform !== IPlatform.PC
? {
styleDrag: { value: null },
}
: useDrag([`${parentClassName} .top_draging`, `${parentClassName} .bom_drag`], parentClassName, toRef(helperData, "recommendationShow"), userId);
// 加减评测频率
const operateHz = (type: number) => {
const minFrequency = state.baseFrequency - 10, maxFrequency = state.baseFrequency + 10
let currentFrequency = state.setting.frequency
if (type === 1) {
if (currentFrequency - 1 < minFrequency) return showToast({ message: `最低标准音高${minFrequency}HZ` })
currentFrequency = currentFrequency - 1
} else {
if (currentFrequency + 1 > maxFrequency) return showToast({ message: `最高标准音高${maxFrequency}HZ` })
currentFrequency = currentFrequency + 1
}
state.setting.frequency = currentFrequency >= 0 ? currentFrequency : 0
}
const formatterTimeMs = (value: any) => value = String(Math.min(3000, value));
const notationList = computed(() => {
const list = state.enableNotation ? [{name:'五线谱',value:'staff'},{name:'首调',value:'firstTone'},{name:'固定调',value:'fixedTone'}] : [{name:'首调',value:'firstTone'},{name:'固定调',value:'fixedTone'}];
return list;
});
const metronomeList = computed(() => {
const list = state.modeType === 'follow' ? [{name:'音符',value:1},{name:'关闭',value:3}] : [{name:'音符',value:1},{name:'节拍',value:2},{name:'关闭',value:3}];
return list;
});
return () => (
})
{ headTopData.settingMode = false }} />
{
state.isShowFingering && state.fingeringInfo.name && ["practise", "follow", "evaluating"].includes(state.modeType) && state.playType === "play" &&
}
{
["practise", "follow"].includes(state.modeType) &&
}
{ !state.isCombineRender &&
合并休止小节
{
await checkMoveNoSave();
headTopData.settingMode = false
const _time = setTimeout(() => {
clearTimeout(_time)
refreshMusicSvg();
}, 100);
}}
>
}
{/* {
state.isSingleLine && state.modeType === "practise" && !state.isCombineRender && !state.isPercussion &&
旋律线
{
state.melodyLine = value
}}
>
} */}
指针模式
{
metronomeList.value.map(item=>{
return
{
if (metronomeData.cursorMode === item.value) {
return
}
// 切换光标模式
metronomeData.cursorMode = item.value
resetCursorPosition()
}}>{item.name}
})
}
音符:指针跟随音符播放
{
state.modeType !== 'follow' &&
节拍:指针跟随节拍播放
}
关闭:不显示指针
{
state.modeType === 'practise' && state.playSource === "mingSong" && state.mingSong && state.mingSongGirl &&
唱名类型
{
[{name:'男声',value:1}, {name:'女声',value:0}].map(item=>{
return
{
if(audioData.mingSongType === item.value){
return
}
audioData.mingSongType = item.value as 0|1
// 加载节拍器音频
handleLoadBeatMusic()
changeMingSongType()
} }>{item.name}
})
}
}
{
state.modeType === "evaluating" &&
<>
{
(!query.workRecord && !query.evaluatingRecord) &&
评测难度
{
[{name:'入门',value:"BEGINNER"},{name:'进阶',value:"ADVANCED"},{name:'大师',value:"PERFORMER"}].map(item=>{
return
{
state.setting.evaluationDifficulty = item.value as any
} }>{item.name}
})
}
}
延迟检测
{/*
*/}
{
reCheckDelay();
}}>重新检测
摄像头
{
if (value) {
const res = await api_openCamera();
// 没有授权
if (res?.content?.reson) {
state.setting.camera = false
} else {
state.setting.camera = true
}
} else {
api_closeCamera();
state.setting.camera = false;
}
}}
>
标准音高
})
operateHz(1)} />
{state.setting.frequency}HZ
})
operateHz(2)} />
>
}
{/** 练习模式才有单行/多行谱切换功能,跟练、评测只有单行谱模式 */}
{
["practise", "evaluating"].includes(state.modeType) ?
切换谱面
{
[{name:'单行谱',value:true},{name:'多行谱',value:false}].map(item=>{
return
{
if(state.isSingleLine === item.value){
return
}
await checkMoveNoSave();
headTopData.settingMode = false
// resetRenderMusicScore(state.musicRenderType)
const _time = setTimeout(() => {
state.isSingleLine = item.value
clearTimeout(_time)
refreshMusicSvg();
}, 100);
// musicScoreRef.value?.refreshMusicScore()
} }>{item.name}
})
}
: null
}
{
state.enableNotation || state.specialShowNotation ?
转谱
{
notationList.value.map(item=>{
return
{
if(state.musicRenderType === item.value){
return
}
await checkMoveNoSave();
headTopData.settingMode = false
// resetRenderMusicScore(state.musicRenderType)
const _time = setTimeout(() => {
state.musicRenderType = item.value as any
clearTimeout(_time)
refreshMusicSvg();
}, 100);
} }>{item.name}
})
}
: null
}
{
谱面大小
{
zoomList.map(item=>{
return
{
if(state.zoom === item.value){
return
}
await checkMoveNoSave();
headTopData.settingMode = false
// resetRenderMusicScore(state.musicRenderType)
const _time = setTimeout(() => {
state.zoom = item.value as any
localStorage.setItem('scoreZoom',String(state.zoom))
clearTimeout(_time)
refreshMusicSvg();
}, 100);
} }>{item.name}
})
}
}
})
(helperData.screenModelShow = true)} />
{
!query.isCbs &&
})
(helperData.recommendationShow = true)} />
}
);
},
});