|
@@ -7,14 +7,14 @@ import state from "/src/state";
|
|
|
import { browser } from "/src/utils/index";
|
|
|
import tickWav from "/src/assets/tick.mp3";
|
|
|
import tockWav from "/src/assets/tock.mp3";
|
|
|
+import { metronomeData } from "/src/helpers/metronome"
|
|
|
|
|
|
const tickData = reactive({
|
|
|
len: 0,
|
|
|
- denominator: undefined as undefined | number,
|
|
|
reduceLen: 0,
|
|
|
tickEnd: false,
|
|
|
/** 节拍器时间 */
|
|
|
- beatLengthInMilliseconds: 0,
|
|
|
+ beatLengthInMilliseconds: [] as number[],
|
|
|
index: 0,
|
|
|
show: false
|
|
|
});
|
|
@@ -70,7 +70,7 @@ const handlePlay = (i: number, source: any | null) => {
|
|
|
} else {
|
|
|
_time=setTimeout(() => {
|
|
|
tickPlayCb(i, resolve, source);
|
|
|
- }, tickData.beatLengthInMilliseconds);
|
|
|
+ }, tickData.beatLengthInMilliseconds[i-1]*1000/state.basePlayRate);
|
|
|
}
|
|
|
});
|
|
|
};
|
|
@@ -95,17 +95,18 @@ const createAudio = (src: string): Promise<HTMLAudioElement | null> => {
|
|
|
};
|
|
|
|
|
|
/** 设置节拍器
|
|
|
- * @param beat 节拍数
|
|
|
- * @param denominator 节拍器分母
|
|
|
*/
|
|
|
-export const handleInitTick = (beat: number, denominator?: number) => {
|
|
|
- tickData.len = beat;
|
|
|
- tickData.denominator = denominator;
|
|
|
- // 节拍器的个数除以2 直到小于等于4为止
|
|
|
- while (beat > 4 && beat % 2 === 0) {
|
|
|
- beat = beat / 2;
|
|
|
- }
|
|
|
- tickData.reduceLen = beat
|
|
|
+export const handleInitTick = () => {
|
|
|
+ const beatLen = metronomeData.firstBeatTypeArr.length
|
|
|
+ tickData.beatLengthInMilliseconds = metronomeData.firstBeatTypeArr.map(item=>{
|
|
|
+ return Math.abs(item)*state.times[0].measureLength
|
|
|
+ })
|
|
|
+ tickData.len = beatLen;
|
|
|
+ // // 节拍器的个数除以2 直到小于等于4为止
|
|
|
+ // while (beat > 4 && beat % 2 === 0) {
|
|
|
+ // beat = beat / 2;
|
|
|
+ // }
|
|
|
+ tickData.reduceLen = beatLen
|
|
|
};
|
|
|
|
|
|
/** 开始节拍器 */
|
|
@@ -114,7 +115,6 @@ export const handleStartTick = async () => {
|
|
|
tickData.show = true;
|
|
|
tickData.tickEnd = false;
|
|
|
tickData.index = 0;
|
|
|
- tickData.beatLengthInMilliseconds = tickData.denominator ? 4 / tickData.denominator * (60 / state.speed) * 1000 : (60 / state.speed) * 1000;
|
|
|
for(let i = 0; i <= useLen.value; i++){
|
|
|
// 提前结束, 直接放回false
|
|
|
if (tickData.tickEnd) return false;
|