微信录音接口的调用以及amr文件转码MP3文件的实现

最近实现录音功能,主要涉及到录音的上传和下载,以及转码问题。微信,QQ默认的的音频文件是amr格式的,而播放器却不识别amr格式的音频,必须尽行转码。amr文件分为两种,一种是通用的amr格式,这种文件可以用任意播放器打开播放。但是还有另外一种amr文件,这种文件的后缀虽然是amr,但其实其内部并不是真正的amr格式。有不对的地方有请各方大神批评指正,具体实现如下:

1.调用微信录音接口(开始录音,暂停录音,上传录音,)

具体接口请你参考 http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html

(1)record.jsp

$(function(){
    //调用微信开始录音接口
    wx.ready(function(){        //开始录音
	alert("开始录音");
	wx.startRecord();
    });
  //结束录音
   wx.ready(function(){
	wx.stopRecord({
		success: function (res) {
		var localId = res.localId;
		alert("录音结束");
		saveAlert(localId);
		}
	});
  });
//声音标题,声音描述
var voiceTitle = $("#voiceTitle").val();
var voiceDesc = $("#voiceDesc").val();
//将录音上传腾讯服务器
wx.ready(function(){
wx.uploadVoice({
	localId: id, // 需要上传的音频的本地ID,由stopRecord接口获得
	isShowProgressTips: 1, // 默认为1,显示进度提示
	success: function (res) {
	var serverId = res.serverId; // 返回音频的服务器端ID
	saveIntoLocation(serverId,voiceTitle,voiceDesc);
	}
});
});
}
function saveIntoLocation(id,title,desc){
	var channelId = $("#channelIdResult").val();
	var proId = $("#procastIdResult").val();
	//alert(proId);
	var url = "/taiyang/fm/saveInfoJson.action";
	var postData = {
			"en1.channelId" : channelId,
			"en1.proTitle" : title,
			"en1.proDesc" : desc,
			"en1.podcastId" : proId,
			"serverId" : id,
			"appid" : appId
		};
	$.post(url, postData, function (data) {
		if(data.success){
			openSuccessLayer(data.message);
		}else{
			openFailureLayer(data.message);
		}
	},‘json‘);
}
(2)WXFM.XML

 <package name="xiaovFmJson" extends="wxJsonData" namespace="/xiaov/fm">
!--微电台:保存录音标题到本地数据库-->
        <action name="saveInfoJson" class="com.jerehsoft.taiyang.fm.action.weixin.WxRadioStationAction"  method="saveInfo">
            <result type="json"></result>
        </action>
</package>

  

(3)WxRadioStationAction.java

public class WxRadioStationAction extends ActionSupport {
    Log log = LogFactory.getLog(this.getClass());
    private Map<String, Object> map1 = new HashMap<String, Object>();

    ActionContext ac = ActionContext.getContext();
    HttpServletRequest request = (HttpServletRequest) ac.get(ServletActionContext.HTTP_REQUEST);

    private Long memberid;
    private String appid;
    private String openid;
    private String serverId;

    private boolean success;
    private String message;

    @EntityInject
    private WxFmProgramComment en;
    @EntityInject
    private WxFmProgrem en1;

    @Resource
    IWxFmProgremService programService;

     /**
     * 微电台录音:保存录音标题到本地数据库
     *
     * @return
     * @throws Exception
     */
    public String saveInfo() throws Exception {
        //设置播客id
        try {
            //下载腾讯素材
            if (serverId != null && !serverId.equals("")) {
                CommAttachmentDetail file = mediaSer.downLoadFile(getAppid(), serverId);
                if (file != null) {
                    //picPath:amr文件存放的全路径
                    String path = SystemConfig.get("sys.upload.dir");
                    String picPath = path + File.separator + file.getPathName() + file.getFileName();
                    //音频转换
                    Conversion conversion = new Conversion();

                    conversion.ToMp3("D:" + File.separator + "Program Files", picPath);

                    String fileName = file.getFileName().substring(0, file.getFileName().indexOf("."));

                    String picPathDataBase = file.getPathName() + fileName + ".mp3";

                    en1.setFileAddr(picPathDataBase);
                }
            }
            en1.setAppId(getAppid());
            //时间
            WxFmProgrem Progrem = programService.save(en1);
            success = true;
            map1.put("success", true);
            map1.put("message", "提交成功");
        } catch (Exception e) {
            message = "提交失败";
            success = false;
            e.getStackTrace();
            e.printStackTrace();
        }

        return SUCCESS;
    }
 public String getAppid() {
        return appid;
    }

    public void setAppid(String appid) {
        this.appid = appid;
    }
 public String getServerId() {
        return serverId;
    }

    public void setServerId(String serverId) {
        this.serverId = serverId;
    }
}

  

(4) Conversion.java

public class Conversion {
    /**
     * 将上传的录音转为mp3格式
     * @param webroot 项目的根目录
     * @param sourcePath 文件的相对地址
     */
    public static void ToMp3(String webroot, String sourcePath){
        //File file = new File(sourcePath);
        String [] a =sourcePath.split("\\.");
        String targetPath = a[0]+".mp3";//转换后文件的存储地址,直接将原来的文件名后加mp3后缀名
        Runtime run = null;
        try {
            run = Runtime.getRuntime();
            long start=System.currentTimeMillis();
            //Process p=run.exec(webroot+"files/ffmpeg -i "+webroot+sourcePath+" -acodec libmp3lame "+webroot+targetPath);
            // 执行ffmpeg.exe,前面是ffmpeg.exe的地址,中间是需要转换的文件地址,后面是转换后的文件地址。-i是转换方式,意思是可编码解码,mp3编码方式采用的是libmp3lame
           Process p=run.exec(webroot+"/ffmpeg/bin/ffmpeg -i "+sourcePath+" -acodec libmp3lame "+targetPath);
            //释放进程
            p.getOutputStream().close();
            p.getInputStream().close();
            p.getErrorStream().close();
            p.waitFor();
            long end=System.currentTimeMillis();
            //System.out.println(sourcePath+" convert success, costs:"+(end-start)+"ms");
            //删除原来的文件
            /*if(file.exists()){
            file.delete();
            }*/
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            //run调用lame解码器最后释放内存
            run.freeMemory();
        }
    }

    public static void main(String[] args) {
        ToMp3("D:\\Program Files","E:\\a.amr");
    }
}

  (5)注意点:

3个地址:webroot,sourcePath为绝对路径,webroot+"/ffmpeg/bin/ffmpeg"是自己电脑安装的ffmpeg的安装路径

电脑要安装FFMPEG,FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。

FFMPEG的安装请参考:http://www.bubuko.com/infodetail-786878.html

  

时间: 2024-10-25 02:56:07

微信录音接口的调用以及amr文件转码MP3文件的实现的相关文章

微信支付接口的调用(转)

微信支付接口的调用 2018年04月13日 10:53:16 Forward_duyu 阅读数:20092 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/zoroduyu/article/details/79911278 在上周的博客中我讲了调用支付宝的接口实现支付,这周我们继续来讲一讲如何调用微信的支付接口. 在讲之前依然先给出微信的官方接口说明.官方的场景介绍图如下: 其实pc端的支付场景都差不多,用户点击按钮,生成一个二维码,微信扫码之后

读取SD卡文件夹下的MP3文件和播放MP3文件

首先获取SD卡path路径下的所有的MP3文件,并将文件名和文件大小存入List数组(此代码定义在FileUtils类中): /** * 读取目录中的Mp3文件的名字和大小 */ public List<Mp3Info> getMp3Files(String path) { SDCardRoot = Environment.getExternalStorageDirectory() .getAbsolutePath(); //获取SD卡的路径名 List<Mp3Info> mp3I

微信录音接口

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0"

python 微信开发入门篇-调用JS SDK 含微信支付(二)

本章节完成微信js sdk + 微信支付调用,项目基础部分请参照入门篇第一章:https://www.cnblogs.com/wangcongxing/p/11546780.html 1.微信服务号设置    登录服务号后台设置如下: 1.登录地址:https://mp.weixin.qq.com/ 2.设置-->公众号设置-->功能设置 设置后结果如下 2.微信商户后台设置 登录微信支付平台设置如下: 1.登录地址(因为需要安装exe插件, 设置浏览为兼容模式  建议使用QQ浏览器):htt

golang实现wav文件转换为mp3文件

本文并非golang内置的库进行wav转mp3,而是通过golang调用Linux的lame命令进行转换. 在Linux环境下,默认情况是没有安装lame,所以首先需要安装lame(个人保存下载文件:http://pan.baidu.com/s/1qWp71G4#path=%252Fsharesoft%252Flinux%252Flame). Linux lame 安装及使用: 1. 解压lame压缩文件:tar -vzxf lame-3.98.4.tar.gz 2. 转到解压后的文件目录,依次

微信分享接口配置和调用

步骤一:绑定域名 先登录微信公众平台进入"公众号设置"的"功能设置"里填写"JS接口安全域名". 步骤二:引入JS文件 在需要调用JS接口的页面引入如下JS文件,(支持https):http://res.wx.qq.com/open/js/jweixin-1.0.0.js 请注意,如果你的页面启用了https,务必引入 https://res.wx.qq.com/open/js/jweixin-1.0.0.js ,否则将无法在iOS9.0以上系统

微信开发接口调用(前端+.net服务端)

微信接口开发,包含服务端(采用.net),前端js//服务端 namespace EatWorld { public partial class Default : System.Web.UI.Page { string Token = System.Configuration.ConfigurationManager.AppSettings["Token"]; string appid = System.Configuration.ConfigurationManager.AppSe

asp.net mvc 如何调用微信jssdk接口:分享到微信朋友(圈)| 分享到qq空间

如何在asp.net mvc 项目里, 调用微信jssdk接口,现实功能: 分享到微信朋友(圈)| 分享到qq空间 1 创建一个Action,准备一些数据,初始化数据(签名): /// <summary> /// 分享的内容 /// 必须写在html的head里面才可以生效 /// </summary> /// <param name="fxUrl"></param> /// <returns></returns>

对服务器端接口的调用,自己手写了一个脚本,但返回信息的中文总是乱码(这个方法很不错,重要的是解决思路,寻找手写脚本与录制脚本 生成目录文件的区别)

对服务器端接口的调用,自己手写了一个脚本,但返回信息的中文总是乱码.在网上搜索了很多方法,包括: 1.Tools->Recording Options->Advanced->勾选Support charset UTF-8 2.Run-time Settings->Browser->Browser Emulation->Change,将language置为中文 3.web_add_auto_header("Accept-Language","