| 
														
															@@ -3,13 +3,15 @@ import state, { gotoNext, resetPlaybackToStart } from "/src/state"; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 import { IPostMessage } from "/src/utils/native-message"; 
														 | 
														
														 | 
														
															 import { IPostMessage } from "/src/utils/native-message"; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 import { api_cloudFollowTime, api_cloudToggleFollow } from "/src/helpers/communication"; 
														 | 
														
														 | 
														
															 import { api_cloudFollowTime, api_cloudToggleFollow } from "/src/helpers/communication"; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 import { storeData } from "/src/store"; 
														 | 
														
														 | 
														
															 import { storeData } from "/src/store"; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-import { Snackbar } from "@varlet/ui"; 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+import { audioRecorder } from "./audioRecorder"; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 export const followData = reactive({ 
														 | 
														
														 | 
														
															 export const followData = reactive({ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	list: [] as any, // 频率列表 
														 | 
														
														 | 
														
															 	list: [] as any, // 频率列表 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	index: 0, 
														 | 
														
														 | 
														
															 	index: 0, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	start: false, 
														 | 
														
														 | 
														
															 	start: false, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	rendered: false, 
														 | 
														
														 | 
														
															 	rendered: false, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	/** 麦克风权限 */ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	earphone: false, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 }); 
														 | 
														
														 | 
														
															 }); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 /** 点击跟练模式 */ 
														 | 
														
														 | 
														
															 /** 点击跟练模式 */ 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -26,7 +28,7 @@ const noteFrequency = ref(0); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 const audioFrequency = ref(0); 
														 | 
														
														 | 
														
															 const audioFrequency = ref(0); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 const followTime = ref(0); 
														 | 
														
														 | 
														
															 const followTime = ref(0); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 // 切换录音 
														 | 
														
														 | 
														
															 // 切换录音 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-const openToggleRecord = (open: boolean = true) => { 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+const openToggleRecord = async (open: boolean = true) => { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	api_cloudToggleFollow(open ? "start" : "end"); 
														 | 
														
														 | 
														
															 	api_cloudToggleFollow(open ? "start" : "end"); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	// 记录跟练时长 
														 | 
														
														 | 
														
															 	// 记录跟练时长 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	if (open) { 
														 | 
														
														 | 
														
															 	if (open) { 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -37,6 +39,15 @@ const openToggleRecord = (open: boolean = true) => { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 			followTime.value = 0; 
														 | 
														
														 | 
														
															 			followTime.value = 0; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		} 
														 | 
														
														 | 
														
															 		} 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	} 
														 | 
														
														 | 
														
															 	} 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	if (!storeData.isApp) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		const openState = await audioRecorder?.toggleRecord(open); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		// 开启录音失败 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		if (!openState && followData.start) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+			followData.earphone = true; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+			followData.start = false; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		} 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	} 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 }; 
														 | 
														
														 | 
														
															 }; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 // 清除音符状态 
														 | 
														
														 | 
														
															 // 清除音符状态 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -55,20 +66,13 @@ const onClear = () => { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 /** 开始跟练 */ 
														 | 
														
														 | 
														
															 /** 开始跟练 */ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 export const handleFollowStart = () => { 
														 | 
														
														 | 
														
															 export const handleFollowStart = () => { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	// if (!storeData.isApp) { 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	// 	Snackbar({ 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	// 		content: "请在APP端使用", 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	// 		type: "warning", 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	// 	}); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	// 	return; 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	// } 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	onClear(); 
														 | 
														
														 | 
														
															 	onClear(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	followData.start = true; 
														 | 
														
														 | 
														
															 	followData.start = true; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	followData.index = 0; 
														 | 
														
														 | 
														
															 	followData.index = 0; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	followData.list = []; 
														 | 
														
														 | 
														
															 	followData.list = []; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	resetPlaybackToStart(); 
														 | 
														
														 | 
														
															 	resetPlaybackToStart(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	openToggleRecord(true); 
														 | 
														
														 | 
														
															 	openToggleRecord(true); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	getNoteIndex() 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	getNoteIndex(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 }; 
														 | 
														
														 | 
														
															 }; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 /** 结束跟练 */ 
														 | 
														
														 | 
														
															 /** 结束跟练 */ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 export const handleFollowEnd = () => { 
														 | 
														
														 | 
														
															 export const handleFollowEnd = () => { 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -106,12 +110,12 @@ let checking = false; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 const onFollowTime = (evt?: IPostMessage) => { 
														 | 
														
														 | 
														
															 const onFollowTime = (evt?: IPostMessage) => { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	const frequency: number = evt?.content?.frequency; 
														 | 
														
														 | 
														
															 	const frequency: number = evt?.content?.frequency; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	// 没有开始, 不处理 
														 | 
														
														 | 
														
															 	// 没有开始, 不处理 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	if (!followData.start) return 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	if (!followData.start) return; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	// console.log('频率', frequency) 
														 | 
														
														 | 
														
															 	// console.log('频率', frequency) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	if (frequency > 0) { 
														 | 
														
														 | 
														
															 	if (frequency > 0) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	  audioFrequency.value = frequency 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	  // data.list.push(frequency) 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	  checked() 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		audioFrequency.value = frequency; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		// data.list.push(frequency) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		checked(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	} 
														 | 
														
														 | 
														
															 	} 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 }; 
														 | 
														
														 | 
														
															 }; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -140,9 +144,9 @@ const checked = () => { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 				return; 
														 | 
														
														 | 
														
															 				return; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 			} 
														 | 
														
														 | 
														
															 			} 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		} 
														 | 
														
														 | 
														
															 		} 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-		console.log("频率对了", item.min, audioFrequency.value, item.max, item.duration); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		// console.log("频率对了", item.min, audioFrequency.value, item.max, item.duration); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	} 
														 | 
														
														 | 
														
															 	} 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	console.log("频率不对", item.min, audioFrequency.value, item.max, item.baseFrequency); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	// console.log("频率不对", item.min, audioFrequency.value, item.max, item.baseFrequency); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	setColor(item, audioFrequency.value > item.baseFrequency ? "follow-up" : "follow-down"); 
														 | 
														
														 | 
														
															 	setColor(item, audioFrequency.value > item.baseFrequency ? "follow-up" : "follow-down"); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	checking = false; 
														 | 
														
														 | 
														
															 	checking = false; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 }; 
														 | 
														
														 | 
														
															 }; 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -166,8 +170,21 @@ const setColor = (item: any, state: "follow-up" | "follow-down" | "", isRight = 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 export default defineComponent({ 
														 | 
														
														 | 
														
															 export default defineComponent({ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	name: "follow", 
														 | 
														
														 | 
														
															 	name: "follow", 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	setup() { 
														 | 
														
														 | 
														
															 	setup() { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-		onMounted(() => { 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-			api_cloudFollowTime(onFollowTime); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		onMounted(async () => { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+			/** 如果是PC端 */ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+			if (!storeData.isApp) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+				const canRecorder = await audioRecorder.checkSupport(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+				if (canRecorder) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+					audioRecorder.init(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+					audioRecorder.progress = (frequency: number) => { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+						onFollowTime({ api: "", content: { frequency } }); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+					}; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+				} else { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+					followData.earphone = true; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+				} 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+			} else { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+				api_cloudFollowTime(onFollowTime); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+			} 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 			console.log("进入跟练模式"); 
														 | 
														
														 | 
														
															 			console.log("进入跟练模式"); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		}); 
														 | 
														
														 | 
														
															 		}); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		onUnmounted(() => { 
														 | 
														
														 | 
														
															 		onUnmounted(() => { 
														 |