微信录音接口的调用以及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
微信录音接口的调用以及amr文件转码MP3文件的实现的更多相关文章
- 读取SD卡文件夹下的MP3文件和播放MP3文件
首先获取SD卡path路径下的所有的MP3文件,并将文件名和文件大小存入List数组(此代码定义在FileUtils类中): /** * 读取目录中的Mp3文件的名字和大小 */ public Lis ...
- 微信 msg_sec_check接口PHP 调用
$checkContent = '要检测的内容'; $url = 'https://api.weixin.qq.com/wxa/msg_sec_check?access_token='. $res[& ...
- ape 文件 转化为mp3 文件
试了很多软件,最后才发觉 any-audio-converter最好用. 可以吧ape 按 cue切割好,然后转化成 MP3 官网可以免费下载: https://www.any-audio-conve ...
- 微信录音文件上传到服务器以及amr转化成MP3格式
微信公众号音频接口开发 根据业务需求,我们可能需要将微信录音保存到服务器,而通过微信上传语音接口上传到微信服务器的语音文件的有效期只有3天,所以需要将文件下载到我们自己的服务器. 上传语音接口 wx. ...
- 微信录音文件上传到服务器以及amr转化成MP3格式,linux上转换简单方法
微信公众号音频接口开发 根据业务需求,我们可能需要将微信录音保存到服务器,而通过微信上传语音接口上传到微信服务器的语音文件的有效期只有3天,所以需要将文件下载到我们自己的服务器. 上传语音接口 wx. ...
- 微信JS-SDK 接口调用与 php 遇到的坑
问题:config:invalid signature一直爆这个错误 解决: 看我把这些坑都总结了一下:要命的invalid signature. https://segmentfault.com/q ...
- 【微信小程序】调用wx.request接口需要注意的问题
写在前面 之前写了一篇<微信小程序实现各种特效实例>,上次的小程序的项目我负责大部分前端后台接口的对接,然后学长帮我改了一些问题.总的来说,收获了不少吧! 现在项目已经完成,还是要陆陆续续 ...
- 调用微信JS-SDK接口上传图片
最近要在微信上做个问卷调查,有个上传图片功能,折腾找了半天资料,都不好弄,最终打算调用微信提供的上传图片接口,实现上传图片功能!此功能最大的好处是可以在微信服务器上暂存图片,减少本地服务器图片的缓存, ...
- 利用JS-SDK微信分享接口调用(后端.NET)
一直都想研究一下JS-SDK微信分享的接口调用,由于最近工作需要,研究了一下,目前只是实现了部分接口的调用:其他接口调用也是类似的: 在开发之前,需要提前准备一个微信公众号,并且域名JSAPI 配置接 ...
随机推荐
- JAVA IDE IntelliJ IDEA使用简介(一)—之界面元素
(注:简介基于IDEA的版本为:11.0,下载地址:http://www.jetbrains.com/idea/) 打开IDEA,(当第一次打开的时候出现的是一个欢迎页面,随便创建一个project来 ...
- Windows下Nginx Virtual Host多站点配置详解
Windows下Nginx Virtual Host多站点配置详解 此教程适用于Windows系统已经配置好Nginx+Php+Mysql环境的同学. 如果您还未搭建WNMP环境,请查看 window ...
- 利用python将二值csv格式转换为矩阵
#!/usr/bin/env python # coding:utf-8 #import pandas as pd, numpy as np; ''' 将csv文件转换为对应的邻接矩阵mat ''' ...
- 为什么目前没有"成熟"的cookie插件?
一.序言 最近真是挺忙的啊,导致也挺久没有时间来看看园中各位大神的文章,只能感慨业务真尼玛的多,所以在此写下一篇文章来大话最近工作和学习上面的一点点收获体会,希望大家能够有所收获,这篇文章虽然说是一篇 ...
- AD_TLC549采集模拟信号
AD_TLC549采集模拟信号 实验原理 芯片介绍 TLC549是 TI公司生产的一种低价位.高性能的8位A/D转换器,它以8位开关电容逐次逼近的方法实现 A/D转换,其转换速度小于 17us,最大转 ...
- logback 配置详解
一:根节点<configuration>包含的属性: scan: 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true. scanPeriod: 设置监测配置文 ...
- UI: 概述, 启动屏幕, 屏幕方向
UI 设计概述 启动屏幕(闪屏) 屏幕方向 示例1.UI 设计概述UI/Summary.xaml <Page x:Class="Windows10.UI.Summary" x ...
- MacTalk阅读有感
MacTalk by 池建强 高手的思维境界 -贴地气 -有思想 技术普及 文字是表达人思想的载体,池老师将自己的经历,经验分享给大家,很值得大家学习,虽然我只是个初出茅庐的小菜,现在有指路明灯一样. ...
- Jstat PID not found
解决步骤 删除/tmp/hsperfdata_{USER}文件夹,如果是root用户登录,即为/tmp/hsperfdata_root 通过chown.chmod命令保证执行jstat用户必定拥有对/ ...
- 优化php代码 - 字符串echo输出 逗号也可作php连接符
2016年12月12日10:00:16 ====================== 网页访问速度的提升,是可以通过代码的优化来实现的.代码的优化,并不是说代码越少越好,而是主要看代码的运行能力和执行 ...