audio.js 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. var audio = {
  2. innerAudioContext: null,
  3. audioSrc: "",
  4. audioStatus: 0, // 音频状态 0: 未播放 1: 播放中 2: 暂停
  5. playAudio(src, loop = true) {
  6. console.log(`[audio] playAudio: ${src} , loop: ${loop}`);
  7. if (src == '') {
  8. console.log(`[audio] playAudio: src参数为空!`);
  9. return;
  10. }
  11. this.destroy();
  12. this.audioSrc = src;
  13. try {
  14. this.innerAudioContext = uni.createInnerAudioContext();
  15. this.innerAudioContext.autoplay = true;
  16. this.innerAudioContext.loop = loop;
  17. // this.innerAudioContext.obeyMuteSwitch = false;
  18. this.innerAudioContext.volume = 0.5;
  19. // this.innerAudioContext.sessionCategory = "soloAmbient";
  20. this.innerAudioContext.src = this.audioSrc;
  21. this.innerAudioContext.onPlay(() => {
  22. console.log('[audio] 开始播放', this.audioSrc);
  23. this.audioStatus = 1; // 音频状态 0: 未播放 1: 播放中 2: 暂停
  24. });
  25. this.innerAudioContext.onError((err) => {
  26. console.log('[audio] playAudio onError:', err);
  27. this.audioStatus = 0; // 音频状态 0: 未播放 1: 播放中 2: 暂停
  28. // uni.showToast({
  29. // title: 'err:' + JSON.stringify(err),
  30. // icon: 'none',
  31. // duration: 5000
  32. // });
  33. });
  34. } catch (e) {
  35. console.log('[audio] playAudio err:', e);
  36. // uni.showToast({
  37. // title: 'e:' + JSON.stringify(e),
  38. // icon: 'none',
  39. // duration: 5000
  40. // });
  41. }
  42. },
  43. play() {
  44. console.log('[audio] play()');
  45. if (this.audioSrc != "") {
  46. this.innerAudioContext.play();
  47. this.audioStatus = 1; // 音频状态 0: 未播放 1: 播放中 2: 暂停
  48. }
  49. },
  50. pause() {
  51. console.log('[audio] pause()');
  52. if (this.audioSrc != "") {
  53. this.innerAudioContext.pause();
  54. this.audioStatus = 2; // 音频状态 0: 未播放 1: 播放中 2: 暂停
  55. }
  56. },
  57. destroy() {
  58. if (this.innerAudioContext) {
  59. try {
  60. this.innerAudioContext.pause();
  61. this.innerAudioContext.destroy();
  62. this.innerAudioContext = null;
  63. this.audioStatus = 0; // 音频状态 0: 未播放 1: 播放中 2: 暂停
  64. } catch (e) {
  65. console.log('[audio] destroy err:', e);
  66. // uni.showToast({
  67. // title: 'e2:' + JSON.stringify(e),
  68. // icon: 'none',
  69. // duration: 5000
  70. // });
  71. }
  72. }
  73. }
  74. }
  75. export default audio;