Bladeren bron

feat: 增加midi练习&评测相关的api

TIANYONG 1 jaar geleden
bovenliggende
commit
35e9ff2ee6
4 gewijzigde bestanden met toevoegingen van 130 en 2 verwijderingen
  1. 86 0
      src/helpers/communication.ts
  2. 40 0
      src/helpers/midiPlay.tsx
  3. 1 1
      src/page-instrument/view-detail/index.module.less
  4. 3 1
      src/state.ts

+ 86 - 0
src/helpers/communication.ts

@@ -362,4 +362,90 @@ export const removeSocketStatus = (callback: CallBack) => {
 /** 检查APP端websocket状态 */
 /** 检查APP端websocket状态 */
 export const api_disconnectSocket = () => {
 export const api_disconnectSocket = () => {
 	return promisefiyPostMessage({ api: "disconnectSocket" });
 	return promisefiyPostMessage({ api: "disconnectSocket" });
+};
+
+
+
+// MIDI播放&评测相关的api
+
+/** 发送midi音频等信息 */
+export const api_cloudDetail = (content: any, callback: CallBack) => {
+	postMessage(
+		{
+			api: "cloudDetail",
+			content,
+		},
+		callback
+	);
+};
+
+/** 检查midi播放器状态,status: 'init' | 'play' | 'suspend' */
+export const api_cloudGetMediaStatus = () => {
+	return promisefiyPostMessage({ api: "cloudGetMediaStatus" });
+};
+
+/** midi开始播放 */
+export const api_cloudPlay = (content: any) => {
+	promisefiyPostMessage({
+		api: "cloudPlay",
+		content,
+	});
+};
+
+/** midi暂停播放 */
+export const api_cloudSuspend = (content: any) => {
+	promisefiyPostMessage({
+		api: "cloudSuspend",
+		content,
+	});
+};
+
+/** midi跳转到指定位置播放 */
+export const api_cloudSetCurrentTime = (content: any) => {
+	promisefiyPostMessage({
+		api: "cloudSetCurrentTime",
+		content,
+	});
+};
+
+/** midi调整播放速度 */
+export const api_cloudChangeSpeed = (content: any) => {
+	promisefiyPostMessage({
+		api: "cloudChangeSpeed",
+		content,
+	});
+};
+
+/** midi设置声轨音量 */
+export const api_cloudVolume = (content: any) => {
+	promisefiyPostMessage({
+		api: "cloudVolume",
+		content,
+	});
+};
+
+/** midi,播放系统节拍器 */
+export const api_cloudMetronome = (content: any, callback: CallBack) => {
+	postMessage(
+		{
+			api: "cloudMetronome",
+			content,
+		},
+		callback
+	);
+};
+
+/** midi练习播放&评测播放回调 */
+export const api_cloudTimeUpdae = (callback: any) => {
+	listenerMessage("cloudTimeUpdae", callback);
+};
+
+/** 卸载监听midi播放回调 */
+export const api_remove_cloudTimeUpdae = (callback: any) => {
+	removeListenerMessage("cloudTimeUpdae", callback);
+};
+
+/** midi播放结束回调 */
+export const api_cloudplayed = (callback: any) => {
+	listenerMessage("cloudplayed", callback);
 };
 };

+ 40 - 0
src/helpers/midiPlay.tsx

@@ -0,0 +1,40 @@
+import { ref } from 'vue'
+import { getDuration } from "/src/helpers/formateMusic";
+// import runtime, * as RuntimeUtils from '/src/pages/detail/runtime';
+import state from "/src/state";
+import { OpenSheetMusicDisplay } from "/osmd-extended/src";
+import { api_cloudDestroy, api_cloudDetail } from "/src/helpers/communication";
+
+export const useMidi = (durationNum: number, midiUrl?: string) => {
+  const initial = ref(false)
+  if (midiUrl) {
+    console.log('曲谱为midi,使用app播放')
+    initial.value = true
+    state.midiPlayIniting = true
+    const duration: any = getDuration(state.osmd as unknown as OpenSheetMusicDisplay);
+    // 销毁播放器
+    api_cloudDestroy();
+    // 发送初始化信息
+    api_cloudDetail({
+      api: 'cloudDetail',
+      content: {
+        midi: midiUrl,
+        denominator: duration.denominator,
+        numerator: duration.numerator,
+        originalSpeed: state.originSpeed,
+        interval: 50,
+        duration: durationNum * 1000,
+      }
+    }, () => {
+      state.midiPlayIniting = false
+      initial.value = false
+      if (midiUrl) {
+        //RuntimeUtils.changeMode('music')
+      }
+    })
+    //runtime.durationNum = durationNum
+  }
+  return {
+    initial,
+  }
+}

+ 1 - 1
src/page-instrument/view-detail/index.module.less

@@ -116,7 +116,7 @@
 
 
         .pcTitle {
         .pcTitle {
             position: absolute;
             position: absolute;
-            left: 50%;
+            left: 20%;
             top: 50%;
             top: 50%;
             transform: translate(-50%, -50%);
             transform: translate(-50%, -50%);
 
 

+ 3 - 1
src/state.ts

@@ -419,7 +419,9 @@ const state = reactive({
   /** 是否为详情预览模式 */
   /** 是否为详情预览模式 */
   isPreView: false,
   isPreView: false,
   /** 是否为评测报告模式 */
   /** 是否为评测报告模式 */
-  isEvaluatReport: false,  
+  isEvaluatReport: false,
+  /** midi播放器是否初始化中 */  
+  midiPlayIniting: false,
 });
 });
 const browserInfo = browser();
 const browserInfo = browser();
 let offset_duration = 0;
 let offset_duration = 0;