最近在写一个微信公众号的后台管理系统,管理消息互发,模板消息,自动回复,菜单设置等等这些接口,其中接收用户发给公众号的语音消息,格式是.amr
的,无法播放,于是用到了今天要说的这个插件:benz-amr-recorder
这是官方npm:https://www.npmjs.com/package/benz-amr-recorder,他的特性:
方便的 API 实现解码、播放、录音、编码 AMR 文件。
支持 url 和 blob (即)方式获取 AMR。
支持将浏览器 所支持的音频格式(例如 MP3 或 OGG 音频)转换成 AMR 音频。
编码后的 AMR 文件可下载,无须服务器。
下载引入:
npm install benz-amr-recorder
var BenzAMRRecorder = require('benz-amr-recorder');
官方示例的播放本地文件:
<input type="file" id="amr-file" accept=".amr">
var amr = new BenzAMRRecorder(); // 初始化
var amrFileObj = document.getElementById('amr-file');
amrFileObj.onchange = function() {
amr.initWithBlob(this.files[0]).then(function() {
amr.play();
});
}
他这个可以解码很多来源格式的文件:
/**
* 使用浮点数据初始化
* @param {Float32Array} array
* @return {Promise}
*/
amr.initWithArrayBuffer(array);
/**
* 使用 Blob 对象初始化( <input type="file">)
* @param {Blob} blob
* @return {Promise}
*/
amr.initWithBlob(blob);
/**
* 使用 url 初始化
* @param {string} url
* @return {Promise}
*/
amr.initWithUrl(url);
这里我用到的是第三种,使用url来请求的,后端返给我的播放地址是:/voice/fhgudg374578g7f7f8dfds6767fdcxvf87.amr
,然后我使用:
// 点击播放按钮
playVoice(){
var amr = new BenzAMRRecorder();
this.iconFlag = !this.iconFlag // 这个变量是控制播放与否的
amr.initWithUrl(this.$base + val.localName).then(function() {
if (this.iconFlag) { // play
amr.play();
} else { // stop
amr.stop();
// console.log(amr.isPlaying())
// console.log(amr.isPaused())
}
});
// 监听播放完成
amr.onEnded(function() {
this.iconFlag = false
})
},