微信小程序使用BackgroundAudioManager的播放问题

BackgroundAudioManager是微信的一个全局对象,用于在微信进入后台时能够继续播放音频。这个功能对于某些场景非常有用,可以在锁屏的情况下继续听。

根据文档,支持的音频格式包括以下几种。


音频格式

使用开发工具进行调试也没有出现问题,但使用了真机进行测试就发现经常出现如下错误


错误截图

而且这个错误只出现在安卓系列机型,对于iOS机型都能够正常播放。

经过不断尝试,最后确定是播放文件有兼容性问题。我使用的是百度的TTS在线语音合成接口生成的MP3,其中绝大多数都无法正常播放,使用ffmpeg转换为wav后,情况得到了改善,但仍然有一部分无法播放。

var cmd = "ffmpeg -y -i " + path.join(outPath, mp3name) + " -ac 1 -ar 16000 " + path.join(outPath, wavname);
exec(cmd, function(err, stdout, stderr){
    if (err) console.log(stderr);
    else {
        var used = new Date().getTime() - start;
        process.stdout.write(" use " + used + " ms.\n");                            
        deferred.resolve(file);
    }
});

无意中我发现含有较多句子的段落容易导致异常,因此我尝试按照逗号、句号将段落切分,然后再调用百度接口来生成音频,结果居然非常好,全部测试数据都可以播放。

var lineArr = data.split('\n');
_.forEach(lineArr, function(line) {
    var sArr = line.split(/,|。/)
    arr = _.concat(arr, sArr);
})

最后的我的推断就是百度的语音合成使用了某个特别的分割用来切分句子,而安卓的音频播放器正好无法识别这种分割,结果导致了这个让人疑惑的问题。

说到这里,我不知道是应该表扬iOS系统的稳定性呢,还是批评安卓的不可靠性,或是百度语音合成的不标准性。

补充一下,使用讯飞的TTS离线合成的表现也比较稳定,但由于有试用期限的限制,我就没有多试了,反正先用免费的:)。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 摘要   与自动语音识别(ASR)和文本机器翻译(MT)模型的级联相比,端到端语音翻译(ST)模型具有许多潜在的优...
    SpareNoEfforts阅读 1,643评论 0 1
  • 1. 每想到你心在颠簸 胃在呕吐胸腔内 血流成河 2. 后来有人讲喜欢 总觉得少了那张合照后 清澈的眸子 认真的脸...
    竹我晴天阅读 317评论 26 7
  • 因为曾经合作很愉快,而且我也颇为怀念那段虽然辛苦但大家齐心协力完成工作的状态,所以我又回到胡的手下工作,一段...
    nana0575阅读 278评论 0 0
  • 余光中走了,但乡愁一直还在。对于我们这些从农村来到远方城市生活的人来说,乡愁是一个永远都绕不过去的问题。 我出生于...
    被搬砖耽误的艺术家阅读 287评论 0 0
  • 看着辛辛苦苦写的文章浏览量都是以个位计算,时间久了,不禁产生了些许怨恨的情绪。 有很多作者如是说,写文章只是为了抒...
    陈功哥阅读 1,396评论 17 16

友情链接更多精彩内容