|
@@ -10,7 +10,7 @@ import { audioListStart, getAudioCurrentTime, getAudioDuration, setAudioCurrentT
|
|
|
import { toggleFollow } from "./view/follow-practice";
|
|
|
import { browser, setStorageSpeed, setGlobalData } from "./utils";
|
|
|
import { api_createMusicPlayer } from "./helpers/communication";
|
|
|
-import { verifyCanRepeat } from "./helpers/formateMusic";
|
|
|
+import { verifyCanRepeat, getDuration } from "./helpers/formateMusic";
|
|
|
import { getMusicSheetDetail } from "./utils/baseApi"
|
|
|
import { getQuery } from "/src/utils/queryString";
|
|
|
import { followData } from "/src/view/follow-practice/index"
|
|
@@ -287,6 +287,10 @@ const state = reactive({
|
|
|
subjectCodeId: 0 as number,
|
|
|
/** 合奏曲目是否合并展示 */
|
|
|
isCombineRender: false,
|
|
|
+ /** 小节的持续时长,以后台设置的播放速度计算 */
|
|
|
+ measureTime: 0,
|
|
|
+ /** 跟练模式,节拍器播放的时间 */
|
|
|
+ beatStartTime: 0,
|
|
|
});
|
|
|
const browserInfo = browser();
|
|
|
let offset_duration = 0;
|
|
@@ -887,20 +891,26 @@ const setCustom = (trackNum?: number) => {
|
|
|
|
|
|
/** 跟练模式播放节拍器(叮咚) */
|
|
|
export const followBeatPaly = () => {
|
|
|
+ let metroTimer: any = null;
|
|
|
if (!followData.start) {
|
|
|
+ clearTimeout(metroTimer)
|
|
|
+ metroTimer = null
|
|
|
return;
|
|
|
}
|
|
|
- let startTime = 0;
|
|
|
+ const time = state.measureTime*1000 / metronomeData.totalNumerator
|
|
|
requestAnimationFrame(() => {
|
|
|
const endTime = Date.now();
|
|
|
- if (endTime - startTime < 1000) {
|
|
|
+ if (endTime - state.beatStartTime < time) {
|
|
|
followBeatPaly();
|
|
|
} else {
|
|
|
- setTimeout(() => {
|
|
|
- metronomeData.metro?.simulatePlayAudio()
|
|
|
- startTime = Date.now();
|
|
|
- followBeatPaly();
|
|
|
- }, 700);
|
|
|
+ // metroTimer = setTimeout(() => {
|
|
|
+ // metronomeData.metro?.simulatePlayAudio()
|
|
|
+ // startTime = Date.now();
|
|
|
+ // followBeatPaly();
|
|
|
+ // }, time);
|
|
|
+ metronomeData.metro?.simulatePlayAudio()
|
|
|
+ state.beatStartTime = Date.now();
|
|
|
+ followBeatPaly();
|
|
|
}
|
|
|
});
|
|
|
};
|