微信小程序使用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离线合成的表现也比较稳定,但由于有试用期限的限制,我就没有多试了,反正先用免费的:)。

你可能感兴趣的:(微信小程序使用BackgroundAudioManager的播放问题)