「小程序」微信小程序的录音、播放API(07/13更新)

更新记录

  • 07/13 改为MD格式

环境

  • 微信版本:iOS 6.6.1

wx.getRecorderManager()

采样率、编码、格式与大小的关系
采样率 编码 1通道mp3 1通道aac 2通道mp3 2通道aac
8000 16k 25920 23396 25920 21612
8000 24k 25920 26948 25920 24718
8000 32k 25920 err 25920 27197
8000 48k 25920 err 25920 32247
16000 24k 64800 34971 64800 33088
16000 32k 64800 38358 64800 36041
16000 48k 64800 45374 64800 41812
16000 64k 64800 err 64800 45803
16000 96k 64800 err 64800 49885
44100 64k 129566 82938 129566 80686
44100 96k 129566 95002 129566 89078
44100 128k 129566 107719 129566 96762
44100 192k 129566 135319 129566 109354
44100 320k 129566 err 129566 173212
  • 表格中的数据为3秒录音
  • fileSize的单位为Bytes,因此除1024转为KB
  • 录音设定的duration,在stop()时获得res.duration并不准确,有百毫秒级的偏差

wx.getBackgroundAudioManager()

  • 播放执行顺序:
    • onWaiting()
    • onPlay()
    • onTimeUpdate()
      与音频长度成正比,不可同步处理,第1、2次可能会在onWaiting()或onPlay()前
    • onEnded()
  • onWaiting()有卡住的情况,因此要加个限时判定机制,重新走一遍流程
  • onTimeUpdate 的触发频率是1秒触发(目测),但也会发生6秒的录音只触发5次的情况(不准确)
  • backgroundAudioManager.src赋值播放新音频前,必须设置backgroundAudioManager.title,否则无法播放(赋值空字符串也会如此)
  • frameSize填写后,onFrameRecorded()返回的isLastFrame在mp3、acc下都有效,但frameBuffer内容为空,原因未知

BUG

  • 缩小小程序时,想让正在播放的背景音频暂停播放,如果放在Page()或App()的onHide()中,并不会触发backgroundAudioManager.pause(),stop()同理。Page()的onHide()只针对当navigateTo或底部tab切换时才调用,因此按照这个规则,是不会触发的。但在实际测试中,缩小小程序再展开,查看console会发现已执行过。

发表评论

This site uses Akismet to reduce spam. Learn how your comment data is processed.