communication.ts 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539
  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_keepScreenLongLight = () => {
  246. postMessage({
  247. api: "keepScreenLongLight",
  248. content: {
  249. isOpenLight: true,
  250. },
  251. });
  252. };
  253. /** 设置横竖屏
  254. * 0:横屏
  255. * 1:竖屏
  256. */
  257. export const api_setRequestedOrientation = (orientation: number) => {
  258. postMessage({
  259. api: "setRequestedOrientation",
  260. content: {
  261. orientation,
  262. },
  263. });
  264. };
  265. /** 监听APP播放 */
  266. export const api_playProgress = (callback: any) => {
  267. listenerMessage("playProgress", callback);
  268. };
  269. /** 卸载播放 */
  270. export const api_remove_playProgress = (callback: any) => {
  271. removeListenerMessage("playProgress", callback);
  272. };
  273. /** 合成音频传伴奏 */
  274. export const api_cloudAccompanyMessage = (audioFileUrl: string) => {
  275. postMessage({
  276. api: "cloudAccompanyMessage",
  277. content: {
  278. accompanyUrl: audioFileUrl,
  279. },
  280. });
  281. };
  282. /** 合成音频传伴奏弹窗 */
  283. export const api_openAdjustRecording = (content: any) => {
  284. postMessage({
  285. api: "openAdjustRecording",
  286. content,
  287. });
  288. };
  289. /** 监听评测弹窗是否隐藏保存演奏按钮 */
  290. export const hideComplexButton = (callback: CallBack, listen?: boolean) => {
  291. if (listen) {
  292. listenerMessage("hideComplexButton", callback);
  293. } else {
  294. removeListenerMessage("hideComplexButton", callback);
  295. }
  296. };
  297. /** 评测模式是否开启/关闭伴奏 */
  298. export const api_onoffAccompaniment = () => {
  299. postMessage({
  300. api: "onoffAccompaniment",
  301. content: {
  302. state: 0,
  303. },
  304. });
  305. };
  306. /** 延迟检测校音,校音音频播放完成回调 */
  307. export const addCheckPlayEnd = (callback: CallBack) => {
  308. listenerMessage("checkPlayEnd", callback);
  309. };
  310. /** 取消监听延迟检测校返回 */
  311. export const removeCheckPlayEnd = (callback: CallBack) => {
  312. removeListenerMessage("checkPlayEnd", callback);
  313. };
  314. /** 检查APP端websocket状态 */
  315. export const api_checkSocketStatus = () => {
  316. return promisefiyPostMessage({ api: "checkSocketStatus" });
  317. };
  318. /** 监听APP发送的异常信息 */
  319. export const addAccompanyError = (callback: CallBack) => {
  320. listenerMessage("accompanyError", callback);
  321. };
  322. /** 取消监听APP发送的异常信息 */
  323. export const removeAccompanyError = (callback: CallBack) => {
  324. removeListenerMessage("accompanyError", callback);
  325. };
  326. /** 检测socket链接状态 */
  327. export const addSocketStatus = (callback: CallBack) => {
  328. listenerMessage("socketConnectSuccessReport", callback);
  329. };
  330. /** 取消检测socket链接状态 */
  331. export const removeSocketStatus = (callback: CallBack) => {
  332. removeListenerMessage("socketConnectSuccessReport", callback);
  333. };
  334. /** 检查APP端websocket状态 */
  335. export const api_disconnectSocket = () => {
  336. return promisefiyPostMessage({ api: "disconnectSocket" });
  337. };
  338. // MIDI播放&评测相关的api
  339. /** 发送midi音频等信息 */
  340. export const api_cloudDetail = (content: any, callback: CallBack) => {
  341. postMessage(
  342. {
  343. api: "cloudDetail",
  344. content,
  345. },
  346. callback
  347. );
  348. };
  349. /** 检查midi播放器状态,status: 'init' | 'play' | 'suspend' */
  350. export const api_cloudGetMediaStatus = () => {
  351. return promisefiyPostMessage({ api: "cloudGetMediaStatus" });
  352. };
  353. /** midi开始播放 */
  354. export const api_cloudPlay = (content: any) => {
  355. promisefiyPostMessage({
  356. api: "cloudPlay",
  357. content,
  358. });
  359. };
  360. /** midi暂停播放 */
  361. export const api_cloudSuspend = (content: any) => {
  362. promisefiyPostMessage({
  363. api: "cloudSuspend",
  364. content,
  365. });
  366. };
  367. /** midi跳转到指定位置播放 */
  368. export const api_cloudSetCurrentTime = (content: any) => {
  369. promisefiyPostMessage({
  370. api: "cloudSetCurrentTime",
  371. content,
  372. });
  373. };
  374. /** midi调整播放速度 */
  375. export const api_cloudChangeSpeed = (content: any) => {
  376. promisefiyPostMessage({
  377. api: "cloudChangeSpeed",
  378. content,
  379. });
  380. };
  381. /** midi设置声轨音量 */
  382. export const api_cloudVolume = (content: any) => {
  383. promisefiyPostMessage({
  384. api: "cloudVolume",
  385. content,
  386. });
  387. };
  388. /** midi,播放系统节拍器 */
  389. export const api_cloudMetronome = (content: any, callback: CallBack) => {
  390. postMessage(
  391. {
  392. api: "cloudMetronome",
  393. content,
  394. },
  395. callback
  396. );
  397. };
  398. /** midi练习播放&评测播放回调 */
  399. export const api_cloudTimeUpdae = (callback: any) => {
  400. listenerMessage("cloudTimeUpdae", callback);
  401. };
  402. /** 卸载监听midi播放回调 */
  403. export const api_remove_cloudTimeUpdae = (callback: any) => {
  404. removeListenerMessage("cloudTimeUpdae", callback);
  405. };
  406. /** midi播放结束回调 */
  407. export const api_cloudplayed = (callback: any) => {
  408. listenerMessage("cloudplayed", callback);
  409. };
  410. /** 卸载midi播放结束回调 */
  411. export const api_remove_cloudplayed = (callback: any) => {
  412. removeListenerMessage("cloudplayed", callback);
  413. };
  414. /** midi评测传offsetTime和micDelay */
  415. export const api_midiMicDelay = (content: any) => {
  416. postMessage({
  417. api: "proxyServiceMessage",
  418. content,
  419. });
  420. };
  421. /** 监听老师端,上课页面,功能按钮方向 */
  422. export const addImagePos = (callback: any) => {
  423. listenerMessage("imagePos", callback);
  424. };
  425. /** 开始延迟检测 */
  426. export const api_startDelayCheck = (content: any) => {
  427. promisefiyPostMessage({
  428. api: "startDelayCheck",
  429. content,
  430. });
  431. };
  432. /** 关闭延迟检测 */
  433. export const api_closeDelayCheck = (content: any) => {
  434. promisefiyPostMessage({
  435. api: "closeDelayCheck",
  436. content,
  437. });
  438. };
  439. /** 监听APP取消延迟检测 */
  440. export const api_cancelDelayCheck = (callback: any) => {
  441. listenerMessage("cancelDelayCheck", callback);
  442. };
  443. /** 监听延迟检测成功的回调 */
  444. export const api_finishDelayCheck = (callback: any) => {
  445. listenerMessage("finishDelayCheck", callback);
  446. };
  447. /** 监听APP播放进度 */
  448. export const simple_playProgress = (callback: any) => {
  449. listenerMessage("api_playProgress", callback);
  450. };
  451. /** 卸载播放 */
  452. export const simple_remove_playProgress = (callback: any) => {
  453. removeListenerMessage("api_playProgress", callback);
  454. };
  455. /** 监听APP播放开始 */
  456. export const simple_play = (callback: any) => {
  457. listenerMessage("api_play", callback);
  458. };
  459. /** 监听APP播放暂停 */
  460. export const simple_paused = (callback: any) => {
  461. listenerMessage("api_paused", callback);
  462. };
  463. /** 监听APP拖动进度 */
  464. export const simple_updateProgress = (callback: any) => {
  465. listenerMessage("api_updateProgress", callback);
  466. };
  467. /** simple页面渲染完成 */
  468. export const simple_musicPage = (content: any) => {
  469. postMessage({
  470. api: "api_musicPage",
  471. content,
  472. });
  473. };