k***@casstime.com
k***@casstime.com
  • 发布:2024-05-27 16:21
  • 更新:2024-06-11 10:36
  • 阅读:491

【报Bug】uni.createInnerAudioContext() 偶尔出现没有声音的情况

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Mac

PC开发环境操作系统版本号: 12.6.5

HBuilderX类型: 正式

HBuilderX版本号: 4.08

手机系统: Android

手机系统版本号: Android 9.0

手机厂商: KAICOM PDA

手机机型: K7-40

页面类型: vue

vue版本: vue2

打包方式: 云端

项目创建方式: HBuilderX

示例代码:
/**  
 * 播放音频  
 * @param {string} type warn | right  
 */  
const playVoice = (type) => {  
    console.log('playVoice', type);  
    return new Promise((resolve) => {  
        const audioContext = uni.createInnerAudioContext();  

        audioContext.onEnded(() => {  
            console.log('onEnded');  
            audioContext.destroy();  
            // audioContext = null;  
            resolve();  
        });  
        audioContext.onPlay(() => {  
            console.log('onPlay');  
        });  
        audioContext.onError((err) => {  
            console.log('onError', err);  
        });  

        audioContext.src = `/static/voice/${type}.mp3`;  
        audioContext.play();  
        console.log('audioContext', audioContext);  
    });  
};  

// 调用的代码↓  
// 播放声音  
playVoice('right');  
// data是接口返回的列表数据,需要渲染  
this.offset = 0;  
this.list = data;  

操作步骤:

接口返回成功后把data赋值显示,并且播放成功声音

预期结果:

每次都有声音

实际结果:

经常10次有3次没有声音

bug描述:

使用 uni.createInnerAudioContext(); 播放音频,偶尔出现不播放情况

调用playVoice()后,预期的打印:

 playVoice,  right at func/voice.js:6  
audioContext,  [Object] {"id":"17167973772550.6597362822302588","_callbacks":{"canplay":[],"play":["function() { [n...}   
onPlay at func/voice.js:17  
onEnded at func/voice.js:11

实际偶尔出现不播放声音的情况:

16:18:50.481 playVoice,  right at func/voice.js:6  
16:18:50.580 audioContext,  [Object] {"id":"17167979304380.8191429725832422","_callbacks":{"canplay":[],"play":["function() { [n...} at func/voice.js:25

// ↑没有onPlay和onEnded

2024-05-27 16:21 负责人:无 分享
已邀请:
5***@qq.com

5***@qq.com

问题解决了么?我的也是,运行正常一段时间后会,再次进入或者播放途中突然没有了声音,退出页面后再进入依然不播放音频,关闭应用后再次进入才可以,这里和内存有关么?

  • k***@casstime.com (作者)

    声音问题基本解决了,你这个是没有销毁实例

    我的是在每次创建前销毁

    let audioContext;


    /**



    • 播放音频


    • @param {string} type warn | right

      */

      const playVoice = (type) => {

      return new Promise((resolve) => {

      audioContext?.destroy();

      audioContext = uni.createInnerAudioContext();

      audioContext.onEnded(() => {

      // 播放结束

      resolve();

      });

      audioContext.onError((e) => {

      console.log('play voice error', e);

      });


      audioContext.autoplay = true;  
      audioContext.src = `/static/voice/${type}.mp3`;

      });

      };




    export default playVoice;

    2024-06-11 09:31

k***@casstime.com

k***@casstime.com (作者)

let audioContext;  

/**  
 * 播放音频  
 * @param {string} type warn | right  
 */  
const playVoice = (type) => {  
    return new Promise((resolve) => {  
        audioContext?.destroy();  
        audioContext = uni.createInnerAudioContext();  
        audioContext.onEnded(() => {  
            // 播放结束  
            resolve();  
        });  
        audioContext.onError((e) => {  
            console.log('play voice error', e);  
        });  

        audioContext.autoplay = true;  
        audioContext.src = `/static/voice/${type}.mp3`;  
    });  
};  

export default playVoice;

要回复问题请先登录注册