|
@@ -9,7 +9,7 @@ import MusicScore from "../../view/music-score";
|
|
|
import TestCheck from "/src/view/music-score/testCheck";
|
|
|
import { sysMusicScoreAccompanimentQueryPage } from "../api";
|
|
|
import EvaluatModel from "../evaluat-model";
|
|
|
-import HeaderTop, {handlerModeChange} from "../header-top";
|
|
|
+import HeaderTop, { handlerModeChange } from "../header-top";
|
|
|
import styles from "./index.module.less";
|
|
|
import { api_cloudAccompanyMessage, api_cloudLoading, api_keepScreenLongLight, api_openCamera, api_openWebView, api_setEventTracking, api_setRequestedOrientation, api_setStatusBarVisibility, isSpecialShapedScreen } from "/src/helpers/communication";
|
|
|
import { getQuery } from "/src/utils/queryString";
|
|
@@ -28,16 +28,16 @@ import { storeData } from "/src/store";
|
|
|
import ViewFigner from "../view-figner";
|
|
|
import { recalculateNoteData } from "/src/view/selection";
|
|
|
import ToggleMusicSheet from "/src/view/plugins/toggleMusicSheet";
|
|
|
-import { setCustomGradual, setCustomNoteRealValue } from "/src/helpers/customMusicScore"
|
|
|
+import { setCustomGradual, setCustomNoteRealValue } from "/src/helpers/customMusicScore";
|
|
|
import { usePageVisibility } from "@vant/use";
|
|
|
-import { initMidi } from "/src/helpers/midiPlay"
|
|
|
-import TheAudio from "/src/components/the-audio"
|
|
|
+import { initMidi } from "/src/helpers/midiPlay";
|
|
|
+import TheAudio from "/src/components/the-audio";
|
|
|
import tickWav from "/src/assets/tick.mp3";
|
|
|
-import AuthorName from "../component/authorName"
|
|
|
-import { initSmoothAnimation } from "./smoothAnimation"
|
|
|
-import EmptyMusic, { isEmptyMusicShow } from "./emptyMusic"
|
|
|
+import AuthorName from "../component/authorName";
|
|
|
+import { initSmoothAnimation } from "./smoothAnimation";
|
|
|
+import EmptyMusic, { isEmptyMusicShow } from "./emptyMusic";
|
|
|
import { position } from "html2canvas/dist/types/css/property-descriptors/position";
|
|
|
-import Loading from "./loading"
|
|
|
+import Loading from "./loading";
|
|
|
import bgJson from "./images/index.json";
|
|
|
|
|
|
// const DelayCheck = defineAsyncComponent(() =>
|
|
@@ -120,12 +120,12 @@ export default defineComponent({
|
|
|
if (settting) {
|
|
|
state.setting = settting;
|
|
|
//state.setting.beatVolume = state.setting.beatVolume || 50
|
|
|
- state.setting.beatVolume = 50
|
|
|
+ state.setting.beatVolume = 50;
|
|
|
if (state.setting.camera) {
|
|
|
const res = await api_openCamera();
|
|
|
// 没有授权
|
|
|
if (res?.content?.reson) {
|
|
|
- state.setting.camera = false
|
|
|
+ state.setting.camera = false;
|
|
|
store.set("musicscoresetting", state.setting);
|
|
|
}
|
|
|
}
|
|
@@ -142,31 +142,31 @@ export default defineComponent({
|
|
|
(window as any).appName = "colexiu";
|
|
|
const id = query.id || "43554";
|
|
|
// 如果是纯预览模式,0.65倍缩放谱面
|
|
|
- state.isPreView = query.isPreView
|
|
|
+ state.isPreView = query.isPreView;
|
|
|
if (state.isPreView) {
|
|
|
- state.zoom = 0.65
|
|
|
+ state.zoom = 0.65;
|
|
|
}
|
|
|
- if (id == '1814218144844087298' && state.isSingleLine) {
|
|
|
- state.zoom = 0.7
|
|
|
+ if (id == "1814218144844087298" && state.isSingleLine) {
|
|
|
+ state.zoom = 0.7;
|
|
|
}
|
|
|
// 只有总控平台和预览 默认是多行谱
|
|
|
- (state.isPreView || query.isCbs) && (state.isSingleLine = false)
|
|
|
+ (state.isPreView || query.isCbs) && (state.isSingleLine = false);
|
|
|
// Promise.all([sysMusicScoreAccompanimentQueryPage(id)]).then((values) => {
|
|
|
// getMusicInfo(values[0]);
|
|
|
// });
|
|
|
- try {
|
|
|
+ try {
|
|
|
await getMusicDetail(id);
|
|
|
} catch (err) {
|
|
|
- console.error(err)
|
|
|
+ console.error(err);
|
|
|
state.isLoading = false;
|
|
|
- isEmptyMusicShow.value = true
|
|
|
- return
|
|
|
+ isEmptyMusicShow.value = true;
|
|
|
+ return;
|
|
|
}
|
|
|
detailData.isLoading = false;
|
|
|
// 如果后台设置了不显示指法,关闭指法开关
|
|
|
if (!state.isShowFingering) {
|
|
|
- state.setting.displayFingering = false
|
|
|
- }
|
|
|
+ state.setting.displayFingering = false;
|
|
|
+ }
|
|
|
// api_setEventTracking();
|
|
|
});
|
|
|
|
|
@@ -186,15 +186,15 @@ export default defineComponent({
|
|
|
// handleSetSpeed(saveSpeed);
|
|
|
// }
|
|
|
setCustomGradual();
|
|
|
- setCustomNoteRealValue();
|
|
|
+ setCustomNoteRealValue();
|
|
|
state.times = formateTimes(osmd);
|
|
|
// state.times = resetFrequency(state.times);
|
|
|
state.times = setNoteHalfTone(state.times);
|
|
|
- state.xmlHasLyric = state.times.some((item: any) => item?.formatLyricsEntries?.length)
|
|
|
+ state.xmlHasLyric = state.times.some((item: any) => item?.formatLyricsEntries?.length);
|
|
|
console.log("🚀 ~ state.times:", state.times, state.subjectId, state);
|
|
|
nextTick(() => {
|
|
|
state.activeMeasureIndex = state.times[0].MeasureNumberXML;
|
|
|
- })
|
|
|
+ });
|
|
|
// 一行谱
|
|
|
if (state.isSingleLine) {
|
|
|
// 音符添加位置信息bbox
|
|
@@ -203,73 +203,73 @@ export default defineComponent({
|
|
|
initSmoothAnimation();
|
|
|
}
|
|
|
// 初始化midi音频信息
|
|
|
- const songEndTime = state.times[state.times.length - 1 || 0]?.endtime || 0
|
|
|
+ const songEndTime = state.times[state.times.length - 1 || 0]?.endtime || 0;
|
|
|
if (state.isAppPlay) {
|
|
|
- const durationNum = songEndTime
|
|
|
- initMidi(durationNum, state.midiUrl)
|
|
|
+ const durationNum = songEndTime;
|
|
|
+ initMidi(durationNum, state.midiUrl);
|
|
|
}
|
|
|
- state.measureTime = state.times[0]?.measureLength || 0
|
|
|
+ state.measureTime = state.times[0]?.measureLength || 0;
|
|
|
try {
|
|
|
metronomeData.metro = new Metronome();
|
|
|
metronomeData.metro.init(state.times);
|
|
|
} catch (error) {}
|
|
|
|
|
|
// 需要向外面(iframe)派发计时器数据的时候触发
|
|
|
- if(query.isbeatTimes){
|
|
|
- const { isOpenMetronome, isSingOpenMetronome } = state
|
|
|
- const {xmlMp3BeatFixTime} = state.times[0]
|
|
|
- const singBeatTime: number[][] = []
|
|
|
- const beatTime = metronomeData.metroMeasure.map(metroMeasure => {
|
|
|
- const singBeat:number[] = []
|
|
|
+ if (query.isbeatTimes) {
|
|
|
+ const { isOpenMetronome, isSingOpenMetronome } = state;
|
|
|
+ const { xmlMp3BeatFixTime } = state.times[0];
|
|
|
+ const singBeatTime: number[][] = [];
|
|
|
+ const beatTime = metronomeData.metroMeasure.map((metroMeasure) => {
|
|
|
+ const singBeat: number[] = [];
|
|
|
const beatTimeItem = metroMeasure.map((item: any) => {
|
|
|
- let singTime = item.time
|
|
|
- if(isSingOpenMetronome && !isOpenMetronome){
|
|
|
- singTime += xmlMp3BeatFixTime
|
|
|
- } else if(!isSingOpenMetronome && isOpenMetronome){
|
|
|
- singTime -= xmlMp3BeatFixTime
|
|
|
+ let singTime = item.time;
|
|
|
+ if (isSingOpenMetronome && !isOpenMetronome) {
|
|
|
+ singTime += xmlMp3BeatFixTime;
|
|
|
+ } else if (!isSingOpenMetronome && isOpenMetronome) {
|
|
|
+ singTime -= xmlMp3BeatFixTime;
|
|
|
}
|
|
|
- singBeat.push(singTime)
|
|
|
- return item.time
|
|
|
- })
|
|
|
- singBeatTime.push(singBeat)
|
|
|
- return beatTimeItem
|
|
|
- })
|
|
|
+ singBeat.push(singTime);
|
|
|
+ return item.time;
|
|
|
+ });
|
|
|
+ singBeatTime.push(singBeat);
|
|
|
+ return beatTimeItem;
|
|
|
+ });
|
|
|
//改为唱名
|
|
|
- state.fixtime = 0
|
|
|
- state.times.map(item => {
|
|
|
- item.time = item.xmlNoteTime
|
|
|
- item.endtime = item.xmlNoteEndTime
|
|
|
- item.fixtime = 0
|
|
|
- })
|
|
|
- metronomeData.metro.calculation(state.times)
|
|
|
- const mingBeatTime:number[][] = metronomeData.metroMeasure.map(metroMeasure => {
|
|
|
+ state.fixtime = 0;
|
|
|
+ state.times.map((item) => {
|
|
|
+ item.time = item.xmlNoteTime;
|
|
|
+ item.endtime = item.xmlNoteEndTime;
|
|
|
+ item.fixtime = 0;
|
|
|
+ });
|
|
|
+ metronomeData.metro.calculation(state.times);
|
|
|
+ const mingBeatTime: number[][] = metronomeData.metroMeasure.map((metroMeasure) => {
|
|
|
const beatTimeItem = metroMeasure.map((item: any) => {
|
|
|
- return item.time
|
|
|
- })
|
|
|
- return beatTimeItem
|
|
|
- })
|
|
|
- console.log("webApi_beatTimes",{beatTime,singBeatTime,mingBeatTime})
|
|
|
+ return item.time;
|
|
|
+ });
|
|
|
+ return beatTimeItem;
|
|
|
+ });
|
|
|
+ console.log("webApi_beatTimes", { beatTime, singBeatTime, mingBeatTime });
|
|
|
window.parent.postMessage(
|
|
|
{
|
|
|
api: "webApi_beatTimes",
|
|
|
- data: JSON.stringify({beatTime,singBeatTime,mingBeatTime})
|
|
|
+ data: JSON.stringify({ beatTime, singBeatTime, mingBeatTime }),
|
|
|
},
|
|
|
"*"
|
|
|
);
|
|
|
throw new Error("webApi_beatTimes 完成");
|
|
|
}
|
|
|
// 刷新时值
|
|
|
- handlerModeChange("play", "music")
|
|
|
+ handlerModeChange("play", "music");
|
|
|
/**
|
|
|
* 2024.1.25
|
|
|
* 设置节拍器,跟练需要播放系统节拍器,所以不需要判断needTick状态
|
|
|
*/
|
|
|
// if (state.needTick) {
|
|
|
- handleInitTick(osmd?.Sheet?.SheetPlaybackSetting?.Rhythm?.Numerator || 4);
|
|
|
+ handleInitTick(osmd?.Sheet?.SheetPlaybackSetting?.Rhythm?.Numerator || 4);
|
|
|
// }
|
|
|
// api_cloudLoading();
|
|
|
- state.playBtnDirection = query.imagePos === 'right' ? 'right' : 'left';
|
|
|
- state.isAttendClass = (query.imagePos === 'left' || query.imagePos === 'right') ? true : false;
|
|
|
+ state.playBtnDirection = query.imagePos === "right" ? "right" : "left";
|
|
|
+ state.isAttendClass = query.imagePos === "left" || query.imagePos === "right" ? true : false;
|
|
|
// if (state.fingeringInfo.direction === "vertical" && state.setting.displayFingering) {
|
|
|
// state.musicScoreBtnDirection = state.playBtnDirection === 'right' ? 'left' : 'right';
|
|
|
// } else {
|
|
@@ -293,25 +293,28 @@ export default defineComponent({
|
|
|
if (state.fingeringInfo.direction === "transverse") {
|
|
|
return {
|
|
|
container: {
|
|
|
- paddingBottom: detailData.headerHide ? state.fingeringInfo.height : state.fingeringInfo.scaleData?.offset
|
|
|
+ paddingBottom: detailData.headerHide ? state.fingeringInfo.height : state.fingeringInfo.scaleData?.offset,
|
|
|
},
|
|
|
// 横向指法,跟练&评测模式,默认展示贴底展示
|
|
|
- fingerBox: (state.modeType === 'follow' || state.modeType === 'evaluating') ?
|
|
|
- {
|
|
|
- height: state.fingeringInfo.height,
|
|
|
- position: 'absolute',
|
|
|
- bottom: 0,
|
|
|
- width: '100%'
|
|
|
- } :
|
|
|
- detailData.headerHide ? {
|
|
|
- height: state.fingeringInfo.height
|
|
|
- } : {
|
|
|
- height: state.fingeringInfo.height,
|
|
|
- transform: `scale(${state.fingeringInfo.scaleData?.scale})`
|
|
|
- }
|
|
|
+ fingerBox:
|
|
|
+ state.modeType === "follow" || state.modeType === "evaluating"
|
|
|
+ ? {
|
|
|
+ height: state.fingeringInfo.height,
|
|
|
+ position: "absolute",
|
|
|
+ bottom: 0,
|
|
|
+ width: "100%",
|
|
|
+ }
|
|
|
+ : detailData.headerHide
|
|
|
+ ? {
|
|
|
+ height: state.fingeringInfo.height,
|
|
|
+ }
|
|
|
+ : {
|
|
|
+ height: state.fingeringInfo.height,
|
|
|
+ transform: `scale(${state.fingeringInfo.scaleData?.scale})`,
|
|
|
+ },
|
|
|
};
|
|
|
} else {
|
|
|
- console.log('指法',state.playBtnDirection,state.platform)
|
|
|
+ console.log("指法", state.playBtnDirection, state.platform);
|
|
|
// 老师端,竖向指法,需要根据功能按钮方向进行设置
|
|
|
if (state.platform === IPlatform.PC) {
|
|
|
return {
|
|
@@ -355,13 +358,12 @@ export default defineComponent({
|
|
|
() => state.setting.displayFingering,
|
|
|
() => {
|
|
|
if (state.fingeringInfo.direction === "vertical") {
|
|
|
-
|
|
|
// if (state.setting.displayFingering) {
|
|
|
// state.musicScoreBtnDirection = state.playBtnDirection === 'left' ? 'right' : 'left'
|
|
|
// } else {
|
|
|
// state.musicScoreBtnDirection = state.playBtnDirection
|
|
|
// }
|
|
|
- state.musicScoreBtnDirection = state.playBtnDirection
|
|
|
+ state.musicScoreBtnDirection = state.playBtnDirection;
|
|
|
}
|
|
|
}
|
|
|
);
|
|
@@ -453,18 +455,14 @@ export default defineComponent({
|
|
|
};
|
|
|
return () => (
|
|
|
<div
|
|
|
- class={[styles.detail, styles[state.modeType], state.setting.eyeProtection && "eyeProtection", (state.platform === IPlatform.PC && state.zoom > 0.8) && styles.PC, state.isPreView && styles.preViewDetail]}
|
|
|
+ class={[styles.detail, styles[state.modeType], state.setting.eyeProtection && "eyeProtection", state.platform === IPlatform.PC && state.zoom > 0.8 && styles.PC, state.isPreView && styles.preViewDetail]}
|
|
|
style={{
|
|
|
- '--detailDataPaddingLeft': detailData.paddingLeft,
|
|
|
+ "--detailDataPaddingLeft": detailData.paddingLeft,
|
|
|
paddingLeft: detailData.paddingLeft,
|
|
|
background: state.setting.camera ? `rgba(${state.setting.eyeProtection ? "253,244,229" : "255,255,255"} ,${state.setting.cameraOpacity / 100}) !important` : "",
|
|
|
}}
|
|
|
>
|
|
|
- <img
|
|
|
- style={{opacity: state.setting.camera && state.modeType === 'evaluating' ? state.setting.cameraOpacity / 100 : 1}}
|
|
|
- class={styles.pageBg}
|
|
|
- src={state.modeType === 'practise' ? bgJson[1] : state.modeType === 'evaluating' ? bgJson[2] : state.modeType === 'follow' ? bgJson[3] : ''}
|
|
|
- />
|
|
|
+ <img style={{ opacity: state.setting.camera && state.modeType === "evaluating" ? state.setting.cameraOpacity / 100 : 1 }} class={styles.pageBg} src={state.modeType === "practise" ? bgJson[1] : state.modeType === "evaluating" ? bgJson[2] : state.modeType === "follow" ? bgJson[3] : ""} />
|
|
|
{/* 骨架屏 */}
|
|
|
{/* <Transition name="van-fade">
|
|
|
{detailData.skeletonLoading && (
|
|
@@ -476,10 +474,7 @@ export default defineComponent({
|
|
|
{/* 曲目加载错误的缺省 */}
|
|
|
<EmptyMusic></EmptyMusic>
|
|
|
{/** 功能按钮 */}
|
|
|
- {
|
|
|
- !state.isPreView &&
|
|
|
- <div class={[styles.headHeight, detailData.headerHide && styles.headHide]}>{state.musicRendered && <HeaderTop />}</div>
|
|
|
- }
|
|
|
+ {!state.isPreView && <div class={["headHeight", styles.headHeight, detailData.headerHide && styles.headHide]}>{state.musicRendered && <HeaderTop />}</div>}
|
|
|
<div
|
|
|
id="scrollContainer"
|
|
|
style={{ ...fingerConfig.value.container }}
|
|
@@ -495,19 +490,14 @@ export default defineComponent({
|
|
|
}}
|
|
|
>
|
|
|
{/* 曲谱渲染 */}
|
|
|
- {!detailData.isLoading &&
|
|
|
- <MusicScore
|
|
|
- ref={musicScoreRef}
|
|
|
- musicColor={state.isPreView ? '#000000' : '#FFFFFF'}
|
|
|
- showPartNames={state.isCombineRender}
|
|
|
- onRendered={handleRendered}
|
|
|
- >
|
|
|
+ {!detailData.isLoading && (
|
|
|
+ <MusicScore ref={musicScoreRef} musicColor={state.isPreView ? "#000000" : "#FFFFFF"} showPartNames={state.isCombineRender} onRendered={handleRendered}>
|
|
|
{/* 旋律线关闭时候的 标题和作者 */}
|
|
|
<AuthorName></AuthorName>
|
|
|
{/* 节拍器 */}
|
|
|
{!detailData.isLoading && !detailData.skeletonLoading && <Tick />}
|
|
|
</MusicScore>
|
|
|
- }
|
|
|
+ )}
|
|
|
|
|
|
{/* {
|
|
|
state.musicRendered &&
|