communication.ts 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560
  1. import { storeData } from "../store";
  2. import {
  3. CallBack,
  4. IPostMessage,
  5. listenerMessage,
  6. postMessage,
  7. promisefiyPostMessage,
  8. removeListenerMessage,
  9. } from "../utils/native-message";
  10. /** 获取token */
  11. export const api_getToken = (): Promise<IPostMessage | undefined> => {
  12. if (!storeData.isApp) return Promise.resolve({} as any);
  13. return promisefiyPostMessage({ api: "getToken" });
  14. };
  15. /**获取耳机的插入状态 */
  16. export const getEarphone = (): Promise<IPostMessage | undefined> => {
  17. if (!storeData.isApp) return Promise.resolve({} as any);
  18. return promisefiyPostMessage({ api: "isWiredHeadsetOn" });
  19. };
  20. /** 获取异形屏信息 */
  21. export const isSpecialShapedScreen = (): Promise<IPostMessage | undefined> => {
  22. if (!storeData.isApp) return Promise.resolve({} as any);
  23. return promisefiyPostMessage({ api: "isSpecialShapedScreen" });
  24. };
  25. /** 开始录音 */
  26. export const startSoundCheck = () => {
  27. postMessage({
  28. api: "startSoundCheck",
  29. });
  30. };
  31. /** 录音返回 */
  32. export const sendResult = (callback: CallBack) => {
  33. listenerMessage("sendResult", callback);
  34. };
  35. /** 取消监听录音返回 */
  36. export const removeResult = (callback: CallBack) => {
  37. removeListenerMessage("sendResult", callback);
  38. };
  39. /** 结束录音 */
  40. export const endSoundCheck = () => {
  41. postMessage({
  42. api: "endSoundCheck",
  43. });
  44. };
  45. /** 开始评测 */
  46. export const startEvaluating = (content: any): Promise<IPostMessage | undefined> => {
  47. if (!storeData.isApp) return Promise.resolve({} as any);
  48. return promisefiyPostMessage({ api: "startEvaluating", content: content });
  49. };
  50. /** 结束评测 */
  51. export const endEvaluating = (content: any): Promise<IPostMessage | undefined> => {
  52. if (!storeData.isApp) return Promise.resolve({} as any);
  53. return promisefiyPostMessage({ api: "endEvaluating", content: content });
  54. };
  55. /** 取消评测 */
  56. export const cancelEvaluating = () => {
  57. postMessage({
  58. api: "cancelEvaluating",
  59. });
  60. };
  61. /** 评测开始录音 */
  62. export const api_startRecording = (content: any): Promise<IPostMessage | undefined> => {
  63. if (!storeData.isApp) return Promise.resolve({} as any);
  64. return promisefiyPostMessage({ api: "startRecording", content: content });
  65. };
  66. /** 评测开始录音 */
  67. export const api_startRecordingCb = (content: any, callback: CallBack) => {
  68. postMessage(
  69. {
  70. api: "startRecording",
  71. content,
  72. },
  73. callback
  74. );
  75. };
  76. /** 评测结束录音 */
  77. export const api_stopRecording = (): Promise<IPostMessage | undefined> => {
  78. if (!storeData.isApp) return Promise.resolve({} as any);
  79. return promisefiyPostMessage({ api: "stopRecording" });
  80. };
  81. /** 和websocket通信 */
  82. export const api_proxyServiceMessage = (content: any): Promise<IPostMessage | undefined> => {
  83. if (!storeData.isApp) return Promise.resolve({} as any);
  84. return promisefiyPostMessage({ api: "proxyServiceMessage", content });
  85. };
  86. /** 监听app真正开始录音 */
  87. export const api_recordStartTime = (callback: CallBack) => {
  88. listenerMessage("recordStartTime", callback);
  89. };
  90. /** 卸载监听app真正开始录音 */
  91. export const api_remove_recordStartTime = (callback: CallBack) => {
  92. removeListenerMessage("recordStartTime", callback);
  93. };
  94. /** 上传评测视频 */
  95. export const api_videoUpdate = (callback: CallBack) => {
  96. postMessage(
  97. {
  98. api: "videoUpdate",
  99. },
  100. callback
  101. );
  102. };
  103. /** 分享 */
  104. export const api_shareAchievements = (content: any): Promise<IPostMessage | undefined> => {
  105. if (!storeData.isApp) return Promise.resolve({} as any);
  106. return promisefiyPostMessage({ api: "shareAchievements", content });
  107. };
  108. /** openwebview */
  109. export const api_openWebView = (content: any): Promise<IPostMessage | undefined> => {
  110. if (!storeData.isApp) return Promise.resolve({} as any);
  111. return promisefiyPostMessage({ api: "openWebView", content });
  112. };
  113. /** 开启摄像头 */
  114. export const api_openCamera = (): Promise<IPostMessage | undefined> => {
  115. if (!storeData.isApp) return Promise.resolve({} as any);
  116. return promisefiyPostMessage({ api: "openCamera" });
  117. };
  118. /** 关闭摄像头 */
  119. export const api_closeCamera = (): Promise<IPostMessage | undefined> => {
  120. if (!storeData.isApp) return Promise.resolve({} as any);
  121. return promisefiyPostMessage({ api: "closeCamera" });
  122. };
  123. /** 安卓隐藏状态栏 */
  124. export const api_setStatusBarVisibility = () => {
  125. // 安卓的状态栏
  126. postMessage({
  127. api: "setStatusBarVisibility",
  128. content: {
  129. isVisibility: 0,
  130. },
  131. });
  132. };
  133. /** 跟练录音切换 */
  134. export const api_cloudToggleFollow = (state: "start" | "end") => {
  135. if (!storeData.isApp) return Promise.resolve({} as any);
  136. return promisefiyPostMessage({
  137. api: "cloudToggleFollow",
  138. content: {
  139. state,
  140. },
  141. });
  142. };
  143. /** 跟练录音监听 */
  144. export const api_cloudFollowTime = (onFollowTime: CallBack, listen = true) => {
  145. if (listen) {
  146. listenerMessage("cloudFollowTime", onFollowTime);
  147. } else {
  148. removeListenerMessage("cloudFollowTime", onFollowTime);
  149. }
  150. };
  151. export const api_goback = () => {
  152. postMessage({
  153. api: "goBack",
  154. });
  155. };
  156. /** 结束webview */
  157. export const api_back = () => {
  158. postMessage({
  159. api: "back",
  160. });
  161. };
  162. /** 切换全屏loading */
  163. export const api_cloudLoading = (show = false) => {
  164. postMessage({
  165. api: "cloudLoading",
  166. content: {
  167. show,
  168. type: "fullscreen",
  169. },
  170. });
  171. };
  172. /** 销毁云练习 */
  173. export const api_cloudDestroy = () => {
  174. postMessage({
  175. api: "cloudDestroy",
  176. });
  177. };
  178. /** 事件埋点统计: 酷乐秀用,其它没有用 */
  179. export const api_setEventTracking = () => {
  180. postMessage({
  181. api: "setEventTracking",
  182. content: {
  183. type: "klx_xiaokuAI",
  184. },
  185. });
  186. };
  187. /** 保存图片 */
  188. export const api_savePicture = (content: any): Promise<IPostMessage | undefined> => {
  189. if (!storeData.isApp) return Promise.resolve({} as any);
  190. return promisefiyPostMessage({ api: "savePicture", content });
  191. };
  192. /** 缓存评测分数 */
  193. export const api_setCache = (content: any) => {
  194. postMessage({
  195. api: "setCache",
  196. content,
  197. });
  198. };
  199. /** app切换到后台 */
  200. export const api_suspendPlay = (callback: CallBack) => {
  201. listenerMessage("suspendPlay", callback);
  202. };
  203. /** 开始录制视频 */
  204. export const api_startCapture = () => {
  205. postMessage({
  206. api: "startCapture",
  207. });
  208. };
  209. /** 结束录制视频 */
  210. export const api_endCapture = () => {
  211. postMessage({
  212. api: "endCapture",
  213. });
  214. };
  215. /** 获取设备延迟检测 */
  216. export const api_getDeviceDelay = () => {
  217. if (!storeData.isApp) return Promise.resolve({} as any);
  218. return promisefiyPostMessage({ api: "getDeviceDelay" });
  219. };
  220. /** 延迟检测触发 */
  221. export const api_toggleTune = (state: "start" | "stop" | "finishTune", count?: number) => {
  222. if (!storeData.isApp) return Promise.resolve({} as any);
  223. if (state === "start") {
  224. // 开始效音
  225. return promisefiyPostMessage({
  226. api: "startTune",
  227. content: {
  228. count: count + "",
  229. },
  230. });
  231. } else if (state === "stop") {
  232. // 结束效音,触发时机: 1.监听后台效音返回 2.点击跳过效音或关闭效音
  233. return promisefiyPostMessage({ api: "endTune" });
  234. } else if (state === "finishTune") {
  235. // 效音完成
  236. return promisefiyPostMessage({ api: "finishTune" });
  237. }
  238. };
  239. /** 初始化曲谱音频 和效音音频 */
  240. export const api_createMusicPlayer = (content: any) => {
  241. if (!storeData.isApp) return Promise.resolve({} as any);
  242. return promisefiyPostMessage({ api: "createMusicPlayer", content });
  243. };
  244. /** 初始化曲谱音频 和效音音频 */
  245. export const api_updateMusicPlayer = (content: any) => {
  246. if (!storeData.isApp) return Promise.resolve({} as any);
  247. return promisefiyPostMessage({ api: "createMusicPlayer", content });
  248. };
  249. /** 进入页面设置常量 */
  250. export const api_keepScreenLongLight = () => {
  251. postMessage({
  252. api: "keepScreenLongLight",
  253. content: {
  254. isOpenLight: true,
  255. },
  256. });
  257. };
  258. /** 设置横竖屏
  259. * 0:横屏
  260. * 1:竖屏
  261. */
  262. export const api_setRequestedOrientation = (orientation: number) => {
  263. postMessage({
  264. api: "setRequestedOrientation",
  265. content: {
  266. orientation,
  267. },
  268. });
  269. };
  270. /** 监听APP播放 */
  271. export const api_playProgress = (callback: any) => {
  272. listenerMessage("playProgress", callback);
  273. };
  274. /** 卸载播放 */
  275. export const api_remove_playProgress = (callback: any) => {
  276. removeListenerMessage("playProgress", callback);
  277. };
  278. /** 合成音频传伴奏 */
  279. export const api_cloudAccompanyMessage = (audioFileUrl: string) => {
  280. postMessage({
  281. api: "cloudAccompanyMessage",
  282. content: {
  283. accompanyUrl: audioFileUrl,
  284. },
  285. });
  286. };
  287. /** 合成音频传伴奏弹窗 */
  288. export const api_openAdjustRecording = (content: any) => {
  289. postMessage({
  290. api: "openAdjustRecording",
  291. content,
  292. });
  293. };
  294. /** 监听评测弹窗是否隐藏保存演奏按钮 */
  295. export const hideComplexButton = (callback: CallBack, listen?: boolean) => {
  296. if (listen) {
  297. listenerMessage("hideComplexButton", callback);
  298. } else {
  299. removeListenerMessage("hideComplexButton", callback);
  300. }
  301. };
  302. /** 评测模式是否开启/关闭伴奏 */
  303. export const api_onoffAccompaniment = () => {
  304. postMessage({
  305. api: "onoffAccompaniment",
  306. content: {
  307. state: 0,
  308. },
  309. });
  310. };
  311. /** 延迟检测校音,校音音频播放完成回调 */
  312. export const addCheckPlayEnd = (callback: CallBack) => {
  313. listenerMessage("checkPlayEnd", callback);
  314. };
  315. /** 取消监听延迟检测校返回 */
  316. export const removeCheckPlayEnd = (callback: CallBack) => {
  317. removeListenerMessage("checkPlayEnd", callback);
  318. };
  319. /** 检查APP端websocket状态 */
  320. export const api_checkSocketStatus = () => {
  321. return promisefiyPostMessage({ api: "checkSocketStatus" });
  322. };
  323. /** 监听APP发送的异常信息 */
  324. export const addAccompanyError = (callback: CallBack) => {
  325. listenerMessage("accompanyError", callback);
  326. };
  327. /** 取消监听APP发送的异常信息 */
  328. export const removeAccompanyError = (callback: CallBack) => {
  329. removeListenerMessage("accompanyError", callback);
  330. };
  331. /** 检测socket链接状态 */
  332. export const addSocketStatus = (callback: CallBack) => {
  333. listenerMessage("socketConnectSuccessReport", callback);
  334. };
  335. /** 取消检测socket链接状态 */
  336. export const removeSocketStatus = (callback: CallBack) => {
  337. removeListenerMessage("socketConnectSuccessReport", callback);
  338. };
  339. /** 检查APP端websocket状态 */
  340. export const api_disconnectSocket = () => {
  341. return promisefiyPostMessage({ api: "disconnectSocket" });
  342. };
  343. // MIDI播放&评测相关的api
  344. /** 发送midi音频等信息 */
  345. export const api_cloudDetail = (content: any, callback: CallBack) => {
  346. postMessage(
  347. {
  348. api: "cloudDetail",
  349. content,
  350. },
  351. callback
  352. );
  353. };
  354. /** 检查midi播放器状态,status: 'init' | 'play' | 'suspend' */
  355. export const api_cloudGetMediaStatus = () => {
  356. return promisefiyPostMessage({ api: "cloudGetMediaStatus" });
  357. };
  358. /** midi开始播放 */
  359. export const api_cloudPlay = (content: any) => {
  360. promisefiyPostMessage({
  361. api: "cloudPlay",
  362. content,
  363. });
  364. };
  365. /** midi暂停播放 */
  366. export const api_cloudSuspend = (content: any) => {
  367. promisefiyPostMessage({
  368. api: "cloudSuspend",
  369. content,
  370. });
  371. };
  372. /** midi跳转到指定位置播放 */
  373. export const api_cloudSetCurrentTime = (content: any) => {
  374. promisefiyPostMessage({
  375. api: "cloudSetCurrentTime",
  376. content,
  377. });
  378. };
  379. /** midi调整播放速度 */
  380. export const api_cloudChangeSpeed = (content: any) => {
  381. promisefiyPostMessage({
  382. api: "cloudChangeSpeed",
  383. content,
  384. });
  385. };
  386. /** midi设置声轨音量 */
  387. export const api_cloudVolume = (content: any) => {
  388. promisefiyPostMessage({
  389. api: "cloudVolume",
  390. content,
  391. });
  392. };
  393. /** midi,播放系统节拍器 */
  394. export const api_cloudMetronome = (content: any, callback: CallBack) => {
  395. postMessage(
  396. {
  397. api: "cloudMetronome",
  398. content,
  399. },
  400. callback
  401. );
  402. };
  403. /** midi练习播放&评测播放回调 */
  404. export const api_cloudTimeUpdae = (callback: any) => {
  405. listenerMessage("cloudTimeUpdae", callback);
  406. };
  407. /** 卸载监听midi播放回调 */
  408. export const api_remove_cloudTimeUpdae = (callback: any) => {
  409. removeListenerMessage("cloudTimeUpdae", callback);
  410. };
  411. /** midi播放结束回调 */
  412. export const api_cloudplayed = (callback: any) => {
  413. listenerMessage("cloudplayed", callback);
  414. };
  415. /** 卸载midi播放结束回调 */
  416. export const api_remove_cloudplayed = (callback: any) => {
  417. removeListenerMessage("cloudplayed", callback);
  418. };
  419. /** midi评测传offsetTime和micDelay */
  420. export const api_midiMicDelay = (content: any) => {
  421. postMessage({
  422. api: "proxyServiceMessage",
  423. content,
  424. });
  425. };
  426. /** 监听老师端,上课页面,功能按钮方向 */
  427. export const addImagePos = (callback: any) => {
  428. listenerMessage("imagePos", callback);
  429. };
  430. /** 开始延迟检测 */
  431. export const api_startDelayCheck = (content: any) => {
  432. promisefiyPostMessage({
  433. api: "startDelayCheck",
  434. content,
  435. });
  436. };
  437. /** 关闭延迟检测 */
  438. export const api_closeDelayCheck = (content: any) => {
  439. promisefiyPostMessage({
  440. api: "closeDelayCheck",
  441. content,
  442. });
  443. };
  444. /** 监听APP取消延迟检测 */
  445. export const api_cancelDelayCheck = (callback: any) => {
  446. listenerMessage("cancelDelayCheck", callback);
  447. };
  448. /** 监听延迟检测成功的回调 */
  449. export const api_finishDelayCheck = (callback: any) => {
  450. listenerMessage("finishDelayCheck", callback);
  451. };
  452. /** 监听延迟检测成功的回调 */
  453. export const api_remove_finishDelayCheck = (callback: any) => {
  454. removeListenerMessage("finishDelayCheck", callback);
  455. };
  456. /** 取消监听APP取消延迟检测 */
  457. export const api_remove_cancelDelayCheck = (callback: any) => {
  458. removeListenerMessage("cancelDelayCheck", callback);
  459. };
  460. /** 监听APP播放进度 */
  461. export const simple_playProgress = (callback: any) => {
  462. listenerMessage("api_playProgress", callback);
  463. };
  464. /** 卸载播放 */
  465. export const simple_remove_playProgress = (callback: any) => {
  466. removeListenerMessage("api_playProgress", callback);
  467. };
  468. /** 监听APP播放开始 */
  469. export const simple_play = (callback: any) => {
  470. listenerMessage("api_play", callback);
  471. };
  472. /** 监听APP播放暂停 */
  473. export const simple_paused = (callback: any) => {
  474. listenerMessage("api_paused", callback);
  475. };
  476. /** 监听APP拖动进度 */
  477. export const simple_updateProgress = (callback: any) => {
  478. listenerMessage("api_updateProgress", callback);
  479. };
  480. /** simple页面渲染完成 */
  481. export const simple_musicPage = (content: any) => {
  482. postMessage({
  483. api: "api_musicPage",
  484. content,
  485. });
  486. };
  487. /** 监听重新评测消息 */
  488. export const api_retryEvaluating = (callback: any) => {
  489. listenerMessage("retryEvaluating", callback);
  490. }