vivo手机计时器与音频播放器调用混乱
发布于 6 年前 作者 juan62 10225 次浏览 来自 问答

开发的计时器节拍器,核心功能由timer计时,按照速度变量执行createInnerAudioContext()调用音频打拍子。


在电脑开发工具上使用功能完整,音色稳定。




在苹果手机,ipad上使用(不止一个反馈),功能正常,音频第一次调用的时候音量很大,之后就音量很小。




在vivo手机上(不止一个反馈),打开即自动调用节拍器函数,手动打开节拍器会开两个节拍器函数同时发声。计时器混乱,节拍不稳定计时器计数不稳定,音频音色出现奇怪的声音。



Page({
	data: {
    		tick: null,
    		tock: null,
		sstimer: '',
		paihao:'4',
		temponum:'90',
		}
  onReady:function(){
    this.tick = wx.createInnerAudioContext();
    this.tick.src='/audio/tick.mp3'
    this.tock = wx.createInnerAudioContext();
    this.tock.src = '/audio/tock.mp3'
  },
  ssff: function () {
    let that = this 
    let liangnum=0
    var paihao=that.data.paihao*10
    let speed=60/that.data.temponum*100
    that.data.sstimer=setInterval(function () {
      that.setData({
        'jpqcolor': 'white'
      })
      if(liangnum%10==0){
        if(liangnum%paihao==0){
          that.setData({
            'jpqcolor': 'red',
          })
          that.tick.play()
          // that.playtick();
          console.log('tick');
        }else{
          that.setData({
            'jpqcolor': 'green'
          })
          that.tock.play()
          // that.playtock();
          console.log('tock');
        }
      }
      liangnum++
    }, speed)
  },
	setStop(e) {
	let that = this;
    	clearInterval(that.data.sstimer);
	}
})
2 回复

看了一下你的代码,发现一个很关键的问题,希望对你有帮助:

1、把定时器放到data里面,你这么写,可能不能给data赋值吧(data赋值不是只能setData嘛?)

2、onShow里面的定时器清理,也有一些小疑惑,但是感觉这里不是问题的关键,同样这里要做的其实是改data的值。

建议:

timer 这种东西,你又不在页面渲染它,为啥要放data里面,不仅增加降低了性能,还带来了额外的风险(不符合一般写法的东西,不同的系统对于语句的解释可能不同,出现的结果也就不同)。

timer挂到页面的this上就可以,你可以自己改一下真机测试试试看。

回到顶部