|
@@ -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(() => {
|