|  | @@ -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;
 |