Skip to content

Commit

Permalink
调整代码
Browse files Browse the repository at this point in the history
  • Loading branch information
xiangyuecn committed Apr 23, 2019
1 parent 3da5443 commit be84d35
Showing 4 changed files with 69 additions and 22 deletions.
22 changes: 18 additions & 4 deletions app-support-sample/index.html
Original file line number Diff line number Diff line change
@@ -127,7 +127,7 @@
在未开启原生App支持(Platforms.Native)的情况下,RecordApp会加载Recorder,因此算是完全兼容Recorder,Native没法网页测试,请自行研究。

<br>
本测试页面重点测试应放在IOS的微信(浏览器、小程序)内的兼容测试。其他环境会走Recorder
本测试页面重点兼容测试应放在IOS的微信(浏览器、小程序)内。因为其他环境会走Recorder
</div>
<div class="pd">
GitHub:<a href="https://github.com/xiangyuecn/Recorder/tree/master/app-support-sample">https://github.com/xiangyuecn/Recorder/ => app-support-sample</a>
@@ -268,9 +268,23 @@
reclog(RecordApp.Current.Key+"正在结束"+curSet.type+"...");
var t1=Date.now();
RecordApp.Stop(function(blob,time){
var id=RandomKey(16);
recblob[id]={blob:blob,set:$.extend({},curSet),time:time};
reclog("已录制:"+intp(curSet.bitRate,3)+"kbps "+intp(curSet.sampleRate,5)+"hz 花"+intp(Date.now()-t1,4)+"ms编码"+intp(blob.size,6)+"b ["+curSet.type+"]"+intp(time,6)+'ms <button onclick="recdown(\''+id+'\')">下载</button> <button onclick="recplay(\''+id+'\')">播放</button> <span class="p'+id+'"></span> <span class="d'+id+'"></span>');
var add=function(tag,blob,set){
var id=RandomKey(16);
recblob[id]={blob:blob,set:$.extend({},set),time:time};
reclog(tag+":"+intp(set.bitRate,3)+"kbps "+intp(set.sampleRate,5)+"hz 花"+intp(Date.now()-t1,4)+"ms编码"+intp(blob.size,6)+"b ["+set.type+"]"+intp(time,6)+'ms <button onclick="recdown(\''+id+'\')">下载</button> <button onclick="recplay(\''+id+'\')">播放</button> <span class="p'+id+'"></span> <span class="d'+id+'"></span>');
};

var obj=curSet.__DownWxMedia;//微信JsSDK 下载到的音频源文件
if(obj){
var bstr=atob(obj.data),n=bstr.length,u8arr=new Uint8Array(n);
while(n--){
u8arr[n]=bstr.charCodeAt(n);
};
var blob2=new Blob([u8arr], {type:obj.mime});
add("发现微信JsSDK服务器端下载下来的音频源文件,播放可能需要上面点击换到amr类型,加载amr解码器");
add("微信下载源",blob2,{type:/\/(\w+)/.exec(obj.mime)[0]});
};
add("已录制",blob,curSet);
},function(s){
reclog("失败:"+s);
});
24 changes: 15 additions & 9 deletions app-support-sample/ios-weixin-config.js
Original file line number Diff line number Diff line change
@@ -61,20 +61,26 @@ config.WxReady=function(call){

win.WxReady(call);
};
config.DownWxMedia=function(mediaId,success,fail){
config.DownWxMedia=function(param,success,fail){
/*下载微信录音素材,服务器端接口文档: https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1444738727
mediaId: 录音接口上传得到的微信服务器上的ID
success: fn(obj) 下载成功返回结果
obj:{
mime:"audio/amr" //这个值是服务器端请求临时素材接口返回的Content-Type响应头
,data:"base64文本" //服务器端下载到的文件二进制内容进行base64编码
}
fail: fn(msg) 下载出错回调
param:{//接口调用参数
mediaId:"" 录音接口上传得到的微信服务器上的ID
type:"mp3" 录音set中的类型,用于转码参考,正常情况下这个参数用不到。如果接口返回的mime不是audio/amr,那必须是:audio/type(如:audio/mp3);因为amr可以在js中完成转码,其他类型目前只能靠服务器端转码。另外素材下载的amr音质很渣,也许可以通过高清接口获得清晰点的音频,那么这个参数就有用武之地。
}
success: fn(obj) 下载成功返回结果
obj:{
mime:"audio/amr" //这个值是服务器端请求临时素材接口返回的Content-Type响应头
,data:"base64文本" //服务器端下载到的文件二进制内容进行base64编码
,duration:0 //音频时长,这个是可选的,如果服务器端进行了转码,返回的mime不是amr类型,必须提供这个参数
}
fail: fn(msg) 下载出错回调
*/

ajax(MyWxApi,{
action:"wxdown"
,mediaID:mediaId
,mediaID:param.mediaId
,type:param.type
},function(data){
success(data.v);
},function(msg){
31 changes: 25 additions & 6 deletions src/app-support/app-ios-weixin-support.js
Original file line number Diff line number Diff line change
@@ -50,9 +50,20 @@ platform.Stop=function(success,fail){
var fail=function(msg){
fail("录音失败:"+(msg.errMsg||msg));
};
var set=WXRecordData.start;

//amr格式转换
var amr=function(data){
//格式转换
var transform=function(data,sevType,sevDuration){
//服务器端已经转码了,就直接返回
if(sevDuration){
success({
mime:"audio/"+sevType
,duration:sevDuration
,data:data
});
return;
};

var end=function(){
var bstr=atob(data),n=bstr.length,u8arr=new Uint8Array(n);
while(n--){
@@ -61,7 +72,6 @@ platform.Stop=function(success,fail){

Recorder.AMR.decode(u8arr,function(pcm){
//音质差是跟微信服务器返回的amr本来就音质差,转其他格式几乎无损音质,和微信本地播放音质有区别
var set=WXRecordData.start;

var rec=Recorder(set).mock(pcm,8000);
rec.stop(function(blob,duration){
@@ -75,6 +85,7 @@ platform.Stop=function(success,fail){
fail("AMR音频无法解码:"+msg);
});
};

if(Recorder.AMR){
end();
}else{
@@ -97,9 +108,17 @@ platform.Stop=function(success,fail){
var serverId=res.serverId;
console.log("微信录音serverId:"+serverId);

config.DownWxMedia(serverId,function(data){
if(/amr/i.test(data.mime)){
amr(data.data);
config.DownWxMedia({
mediaId:serverId
,type:set.type
},function(data){
//写到set里面,方便调试
set.__DownWxMedia=data;

if(new RegExp(set.type,"i").test(data.mime)){
transform(data.data,set.type,data.duration);
}else if(/amr/i.test(data.mime)){
transform(data.data);
}else{
fail("微信服务器返回了未知音频类型:"+data.mime);
};
14 changes: 11 additions & 3 deletions src/app-support/app.js
Original file line number Diff line number Diff line change
@@ -56,14 +56,19 @@ var Config_SupportPlatforms=[
//此方法需要自行实现,需要在微信JsSDK wx.config好后调用call(wx,err)函数
call(null,"未实现IOS-Weixin.Config.WxReady");
}
,DownWxMedia:function(mediaId,success,fail){
,DownWxMedia:function(param,success,fail){
/*【需实现】
下载微信录音素材,服务器端接口文档: https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1444738727
mediaId: 录音接口上传得到的微信服务器上的ID
param:{//接口调用参数
mediaId:"" 录音接口上传得到的微信服务器上的ID
type:"mp3" 录音set中的类型,用于转码参考,正常情况下这个参数用不到。如果接口返回的mime不是audio/amr,那必须是:audio/type(如:audio/mp3);因为amr可以在js中完成转码,其他类型目前只能靠服务器端转码。另外素材下载的amr音质很渣,也许可以通过高清接口获得清晰点的音频,那么这个参数就有用武之地。
}
success: fn(obj) 下载成功返回结果
obj:{
mime:"audio/amr" //这个值是服务器端请求临时素材接口返回的Content-Type响应头
,data:"base64文本" //服务器端下载到的文件二进制内容进行base64编码
,duration:0 //音频时长,这个是可选的,如果服务器端进行了转码,返回的mime不是amr类型,必须提供这个参数
}
fail: fn(msg) 下载出错回调
*/
@@ -72,7 +77,10 @@ var Config_SupportPlatforms=[
//amr解码引擎文件,因为微信临时素材接口返回的音频为amr格式,刚好有amr解码器,省去了服务器端的复杂性
,AMREngine:[
{url:BaseFolder+"engine/beta-amr.js",check:function(){return !Recorder.prototype.amr}}
/*=:=*/ ,{url:BaseFolder+"engine/beta-amr-engine.js",check:function(){return !Recorder.AMR}} /*<@ @>*/
/*=:=*/
,{url:BaseFolder+"engine/beta-amr-engine.js",check:function(){return !Recorder.AMR}}
,{url:BaseFolder+"engine/wav.js",check:function(){return !Recorder.prototype.wav}}
/*<@ @>*/
]
}
,ExtendDefault:true

0 comments on commit be84d35

Please sign in to comment.