useYinbiao.js 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import {ref} from "vue"
  2. import {
  3. audioPlayer,
  4. useAudioCache,
  5. } from "./useAudio.js";
  6. export function useYinBiaoAutoPlay () {
  7. const AudioP = new audioPlayer();
  8. const {
  9. cacheAudio,
  10. } = useAudioCache();
  11. const current = ref(0);
  12. const list = ref([]);
  13. let code = null;
  14. const isAutoPlaying = ref(false);
  15. async function handlePlay() {
  16. isAutoPlaying.value = true;
  17. uni.$emit('xunhuanYinbiaoBofang', isAutoPlaying.value)
  18. code = new Date().getTime();
  19. const activeYin = {
  20. url: list.value[current.value].yinpin,
  21. code
  22. }
  23. const cachedPath = await cacheAudio(activeYin.url);
  24. if (cachedPath && cachedPath.includes('.mp3')) {
  25. AudioP.play(cachedPath, code);
  26. } else {
  27. uni.showToast({
  28. title: '音频加载失败',
  29. icon: 'none'
  30. });
  31. isAutoPlaying.value = false;
  32. uni.$emit('xunhuanYinbiaoBofang', isAutoPlaying.value)
  33. }
  34. }
  35. function upd(mCode) {
  36. if (code !== mCode) {
  37. isAutoPlaying.value = false;
  38. uni.$emit('xunhuanYinbiaoBofang', isAutoPlaying.value)
  39. return;
  40. }
  41. if (current.value<list.value.length-1) {
  42. current.value = current.value+1;
  43. // 继续播放第二音频
  44. handlePlay();
  45. } else {
  46. // 播放结束
  47. isAutoPlaying.value = false;
  48. uni.$emit('xunhuanYinbiaoBofang', isAutoPlaying.value)
  49. }
  50. }
  51. function initListen() {
  52. uni.$on('danci-audio-ended', upd)
  53. }
  54. function removeListen() {
  55. uni.$off('danci-audio-ended',upd)
  56. }
  57. function playYinbiaoAuto(clist) {
  58. isAutoPlaying.value = true;
  59. uni.$emit('xunhuanYinbiaoBofang', isAutoPlaying.value)
  60. current.value = 0
  61. list.value = clist;
  62. // 执行首次播放
  63. handlePlay();
  64. }
  65. // 初始化首次监听
  66. initListen();
  67. return {
  68. playYinbiaoAuto,
  69. isAutoPlaying,
  70. removeListen
  71. }
  72. }