|
@@ -62,52 +62,52 @@ export const popImgs = {
|
|
|
};
|
|
|
|
|
|
export const evaluatingData = reactive({
|
|
|
- /** 评测数据 */
|
|
|
- contentData: {} as any,
|
|
|
- /** 评测模块是否加载完成 */
|
|
|
- rendered: false,
|
|
|
- earphone: false, // 是否插入耳机
|
|
|
- soundEffect: false, // 是否效音
|
|
|
- soundEffectFrequency: 0, // 效音频率
|
|
|
- checkStep: 0, // 执行步骤
|
|
|
- checkEnd: false, // 检测结束
|
|
|
- earphoneMode: false, // 耳机弹窗
|
|
|
- earPhoneType: "" as "" | "有线耳机" | "蓝牙耳机", // 耳机类型
|
|
|
- soundEffectMode: false, // 效音弹窗
|
|
|
- websocketState: false, // websocket连接状态
|
|
|
- /**是否开始播放 */
|
|
|
- startBegin: false, // 开始
|
|
|
- backtime: 0, // 延迟时间
|
|
|
- /** 已经评测的数据 */
|
|
|
- evaluatings: {} as IEvaluatings,
|
|
|
- /** 评测结果 */
|
|
|
- resultData: {} as any,
|
|
|
- /** 评测结果弹窗 */
|
|
|
- resulstMode: false,
|
|
|
- /** 是否是完整评测 */
|
|
|
- isComplete: false,
|
|
|
- /** */
|
|
|
- isDisabledPlayMusic: false,
|
|
|
- /** socket异常状态弹窗 */
|
|
|
- socketErrorPop: false,
|
|
|
- /** 异常提示 */
|
|
|
- errorContents: "",
|
|
|
- /** socket异常状态弹窗的状态值 */
|
|
|
- socketErrorStatus: 0,
|
|
|
- /** 延迟检测,socket状态异常 */
|
|
|
- delayCheckSocketError: false,
|
|
|
- /** 异常状态,不生成评测记录,不调用保存接口 */
|
|
|
- isErrorState: false,
|
|
|
- /** accompanyError,错误类型 */
|
|
|
- accompanyErrorType: "",
|
|
|
- /** app播放结束状态,重新评测需要重置为 */
|
|
|
- isAudioPlayEnd: false,
|
|
|
- preloadJson: true, // 预加载延迟检测的资源
|
|
|
- jsonLoading: true, // 延迟检测的资源加载中状态
|
|
|
- jsonLoadDone: true, // 延迟检测的动画dom加载完成状态
|
|
|
- hideResultModal: false, // 评测作业,如果不是完整评测,需要隐藏评测结果弹窗
|
|
|
- oneselfCancleEvaluating: false, // 是否是自主取消评测,自主取消评测,不生产评测记录
|
|
|
- isBeginMask: false, // 倒计时和系统节拍器时候的遮罩,防止用户点击
|
|
|
+ /** 评测数据 */
|
|
|
+ contentData: {} as any,
|
|
|
+ /** 评测模块是否加载完成 */
|
|
|
+ rendered: false,
|
|
|
+ earphone: false, // 是否插入耳机
|
|
|
+ soundEffect: false, // 是否效音
|
|
|
+ soundEffectFrequency: 0, // 效音频率
|
|
|
+ checkStep: 0, // 执行步骤
|
|
|
+ checkEnd: false, // 检测结束
|
|
|
+ earphoneMode: false, // 耳机弹窗
|
|
|
+ earPhoneType: "" as "" | "有线耳机" | "蓝牙耳机", // 耳机类型
|
|
|
+ soundEffectMode: false, // 效音弹窗
|
|
|
+ websocketState: false, // websocket连接状态
|
|
|
+ /**是否开始播放 */
|
|
|
+ startBegin: false, // 开始
|
|
|
+ backtime: 0, // 延迟时间
|
|
|
+ /** 已经评测的数据 */
|
|
|
+ evaluatings: {} as IEvaluatings,
|
|
|
+ /** 评测结果 */
|
|
|
+ resultData: {} as any,
|
|
|
+ /** 评测结果弹窗 */
|
|
|
+ resulstMode: false,
|
|
|
+ /** 是否是完整评测 */
|
|
|
+ isComplete: false,
|
|
|
+ /** */
|
|
|
+ isDisabledPlayMusic: false,
|
|
|
+ /** socket异常状态弹窗 */
|
|
|
+ socketErrorPop: false,
|
|
|
+ /** 异常提示 */
|
|
|
+ errorContents: '',
|
|
|
+ /** socket异常状态弹窗的状态值 */
|
|
|
+ socketErrorStatus: 0,
|
|
|
+ /** 延迟检测,socket状态异常 */
|
|
|
+ delayCheckSocketError: false,
|
|
|
+ /** 异常状态,不生成评测记录,不调用保存接口 */
|
|
|
+ isErrorState: false,
|
|
|
+ /** accompanyError,错误类型 */
|
|
|
+ accompanyErrorType: '',
|
|
|
+ /** app播放结束状态,重新评测需要重置为 */
|
|
|
+ isAudioPlayEnd: false,
|
|
|
+ preloadJson: true, // 预加载延迟检测的资源
|
|
|
+ jsonLoading: true, // 延迟检测的资源加载中状态
|
|
|
+ jsonLoadDone: true, // 延迟检测的动画dom加载完成状态
|
|
|
+ hideResultModal: false, // 评测作业,如果不是完整评测,需要隐藏评测结果弹窗
|
|
|
+ oneselfCancleEvaluating: false, // 是否是自主取消评测,自主取消评测,不生产评测记录
|
|
|
+ isBeginMask: false // 倒计时和系统节拍器时候的遮罩,防止用户点击
|
|
|
});
|
|
|
|
|
|
const sendOffsetTime = async (offsetTime: number) => {
|
|
@@ -341,93 +341,91 @@ const handleScoreResult = (res?: IPostMessage) => {
|
|
|
|
|
|
/** 开始评测 */
|
|
|
export const handleStartBegin = async (preTimes?: number) => {
|
|
|
- if (state.isAppPlay) {
|
|
|
- await api_cloudSetCurrentTime({
|
|
|
- currentTime: 0,
|
|
|
- songID: state.examSongId,
|
|
|
- });
|
|
|
- }
|
|
|
- evaluatingData.isComplete = false;
|
|
|
- evaluatingData.evaluatings = {};
|
|
|
- evaluatingData.resultData = {};
|
|
|
- evaluatingData.backtime = 0;
|
|
|
- resetPlaybackToStart();
|
|
|
- evaluatingData.isAudioPlayEnd = false;
|
|
|
- const res = await startEvaluating(evaluatingData.contentData);
|
|
|
- if (res?.api !== "startEvaluating") {
|
|
|
- Snackbar.error("请在APP端进行评测");
|
|
|
- evaluatingData.startBegin = false;
|
|
|
- return;
|
|
|
- }
|
|
|
- if (res?.content?.reson) {
|
|
|
- showToast(res.content?.des);
|
|
|
- evaluatingData.startBegin = false;
|
|
|
- return;
|
|
|
- }
|
|
|
- evaluatingData.startBegin = true;
|
|
|
- if (evaluatingData.isDisabledPlayMusic) {
|
|
|
- evaluatingData.isBeginMask = true;
|
|
|
- // 先播放倒计时
|
|
|
- await startCountdown();
|
|
|
- state.playState = state.playState === "paused" ? "play" : "paused";
|
|
|
- // 设置为开始播放时, 如果需要节拍,先播放节拍器
|
|
|
- if ((state.playState === "play" && state.playType === "play" && state.needTick) || (state.playType === "sing" && state.needSingTick)) {
|
|
|
- // 如果是系统节拍器 等系统节拍器播完了再播,如果是mp3节拍器 直接播
|
|
|
- if ((state.playType === "play" && !state.isOpenMetronome) || (state.playType === "sing" && !state.isSingOpenMetronome)) {
|
|
|
- const tickend = await handleStartTick();
|
|
|
- console.log("🚀 ~ tickend:", tickend);
|
|
|
- // 节拍器返回false, 取消播放
|
|
|
- if (!tickend) {
|
|
|
- state.playState = "paused";
|
|
|
- evaluatingData.startBegin = false;
|
|
|
- evaluatingData.isBeginMask = false;
|
|
|
- return;
|
|
|
- }
|
|
|
- } else {
|
|
|
- handleStartTick();
|
|
|
- }
|
|
|
- }
|
|
|
- evaluatingData.isBeginMask = false;
|
|
|
- onPlay();
|
|
|
- }
|
|
|
- if (evaluatingData.isErrorState) return;
|
|
|
- //开始录音
|
|
|
- // await api_startRecording({
|
|
|
- // accompanimentState: state.setting.enableAccompaniment ? 1 : 0,
|
|
|
- // firstNoteTime: preTimes || 0,
|
|
|
- // });
|
|
|
- let rate = state.speed / state.originSpeed;
|
|
|
- rate = parseFloat(rate.toFixed(2));
|
|
|
- await api_startRecordingCb(
|
|
|
- {
|
|
|
- accompanimentState: state.setting.enableAccompaniment ? 1 : 0,
|
|
|
- firstNoteTime: preTimes || 0,
|
|
|
- speedRate: rate, // 播放倍率
|
|
|
- },
|
|
|
- () => {
|
|
|
- if (state.isAppPlay) {
|
|
|
- setTimeout(() => {
|
|
|
- sendOffsetTime(0);
|
|
|
- }, 300);
|
|
|
- }
|
|
|
- }
|
|
|
- );
|
|
|
- // 如果开启了摄像头, 开启录制视频
|
|
|
- if (state.setting.camera) {
|
|
|
- console.log("开始录制视频");
|
|
|
- await api_startCapture();
|
|
|
- }
|
|
|
- // 如果是midi音频评测,需要调用cloudPlay
|
|
|
- if (state.isAppPlay) {
|
|
|
- await api_cloudChangeSpeed({
|
|
|
- speed: state.originSpeed,
|
|
|
- originalSpeed: state.originSpeed,
|
|
|
- songID: state.examSongId,
|
|
|
- });
|
|
|
- audioData.progress = 0;
|
|
|
- audioListStart(state.playState);
|
|
|
- }
|
|
|
- evaluatingData.oneselfCancleEvaluating = false;
|
|
|
+ if (state.isAppPlay) {
|
|
|
+ await api_cloudSetCurrentTime({
|
|
|
+ currentTime: 0,
|
|
|
+ songID: state.examSongId,
|
|
|
+ })
|
|
|
+ }
|
|
|
+ evaluatingData.isComplete = false;
|
|
|
+ evaluatingData.evaluatings = {};
|
|
|
+ evaluatingData.resultData = {};
|
|
|
+ evaluatingData.backtime = 0;
|
|
|
+ resetPlaybackToStart();
|
|
|
+ evaluatingData.isAudioPlayEnd = false;
|
|
|
+ const res = await startEvaluating(evaluatingData.contentData);
|
|
|
+ if (res?.api !== "startEvaluating") {
|
|
|
+ Snackbar.error("请在APP端进行评测");
|
|
|
+ evaluatingData.startBegin = false;
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (res?.content?.reson) {
|
|
|
+ showToast(res.content?.des);
|
|
|
+ evaluatingData.startBegin = false;
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ evaluatingData.startBegin = true;
|
|
|
+ if (evaluatingData.isDisabledPlayMusic) {
|
|
|
+ evaluatingData.isBeginMask = true
|
|
|
+ // 先播放倒计时
|
|
|
+ await startCountdown()
|
|
|
+ state.playState = state.playState === "paused" ? "play" : "paused";
|
|
|
+ // 设置为开始播放时, 如果需要节拍,先播放节拍器
|
|
|
+ if (state.playState === "play" && (state.playType==="play"&&state.needTick)||(state.playType==="sing"&&state.needSingTick)) {
|
|
|
+ // 如果是系统节拍器 等系统节拍器播完了再播,如果是mp3节拍器 直接播
|
|
|
+ if((state.playType==="play" && !state.isOpenMetronome)||(state.playType==="sing" && !state.isSingOpenMetronome)){
|
|
|
+ const tickend = await handleStartTick();
|
|
|
+ console.log("🚀 ~ tickend:", tickend)
|
|
|
+ // 节拍器返回false, 取消播放
|
|
|
+ if (!tickend) {
|
|
|
+ state.playState = "paused";
|
|
|
+ evaluatingData.startBegin = false;
|
|
|
+ evaluatingData.isBeginMask = false
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ handleStartTick()
|
|
|
+ }
|
|
|
+ }
|
|
|
+ evaluatingData.isBeginMask = false
|
|
|
+ onPlay();
|
|
|
+ }
|
|
|
+ if (evaluatingData.isErrorState) return
|
|
|
+ //开始录音
|
|
|
+ // await api_startRecording({
|
|
|
+ // accompanimentState: state.setting.enableAccompaniment ? 1 : 0,
|
|
|
+ // firstNoteTime: preTimes || 0,
|
|
|
+ // });
|
|
|
+ let rate = state.speed / state.originSpeed;
|
|
|
+ rate = parseFloat(rate.toFixed(2));
|
|
|
+ await api_startRecordingCb({
|
|
|
+ // accompanimentState: state.setting.enableAccompaniment ? 1 : 0,
|
|
|
+ accompanimentState: !state.accompany ? 0 : 1, // 评测没有伴奏时,静音播放
|
|
|
+ firstNoteTime: preTimes || 0,
|
|
|
+ speedRate: rate, // 播放倍率
|
|
|
+ }, () => {
|
|
|
+ if (state.isAppPlay) {
|
|
|
+ setTimeout(() => {
|
|
|
+ sendOffsetTime(0)
|
|
|
+ }, 300);
|
|
|
+ }
|
|
|
+ })
|
|
|
+ // 如果开启了摄像头, 开启录制视频
|
|
|
+ if (state.setting.camera) {
|
|
|
+ console.log("开始录制视频");
|
|
|
+ await api_startCapture();
|
|
|
+ }
|
|
|
+ // 如果是midi音频评测,需要调用cloudPlay
|
|
|
+ if (state.isAppPlay) {
|
|
|
+ await api_cloudChangeSpeed({
|
|
|
+ speed: state.originSpeed,
|
|
|
+ originalSpeed: state.originSpeed,
|
|
|
+ songID: state.examSongId,
|
|
|
+ });
|
|
|
+ audioData.progress = 0
|
|
|
+ audioListStart(state.playState);
|
|
|
+ }
|
|
|
+ evaluatingData.oneselfCancleEvaluating = false;
|
|
|
};
|
|
|
|
|
|
/** 播放音乐 */
|