小程序
小游戏
企业微信
微信支付
扫描小程序码分享
无论英文中文,最终识别总是中文结果
请求链接:
http://api.weixin.qq.com/cgi-bin/media/voice/addvoicetorecofortext?access_token=12_zH-Qc8l9-jod1JbkupX0L_ngw7aF7PQzUZJah_Bs3Al4PMAKGitRdWca6osx35cBlIqfHNeG7QDqAqT0SPeXwXfsozJgFbF-FS6XhEnw-vrHmflF89qVmJCLPRwh-Bbfw0kXT6yxqPEaY-CrXUYgAJASPT&format=mp3&voice_id=15343204288521980024257105842&lang=en_US
识别结果:
15:56:12.252 [main] INFO com.adp5.demo.common.utils.JwAIApi - {"result":"哈哈哈哈。","is_end":true}
15:56:12.286 [main] INFO com.adp5.demo.common.utils.JwAIApi - --获取语音识别结果---{"result":"哈哈哈哈。","is_end":true}
1 个回答
加粗
标红
插入代码
插入链接
插入图片
上传视频
import com.alibaba.fastjson.JSONObject;
import org.apache.log4j.Logger;
import java.io.*;
import java.net.ConnectException;
import java.net.HttpURLConnection;
import java.net.URL;
/**
* 微信--AI开放接口
*
*/
public class JwAIApi {
* 提交语音
public static final String ADD_VOICE_URL = "http://api.weixin.qq.com/cgi-bin/media/voice/addvoicetorecofortext?";
* 获取语音翻译结果
public static final String VOICE_RESULT_URL = "http://api.weixin.qq.com/cgi-bin/media/voice/queryrecoresultfortext?";
* 翻译接口
public static final String TRANSLATE_TEXT_URL = "http://api.weixin.qq.com/cgi-bin/media/voice/translatecontent?";
private static Logger logger = Logger.getLogger(JwAIApi.class);
* 微信翻译语音<br>
* 参数voice请用带参构造器创建对象,若用默认构造器则需要赋值属性有:
* accessToken,
* format(只支持mp3,16k,单声道,最大1M),
* voice_id(语音唯一标识),
* file(文件地址),
* lang(语言,zh_CN 或 en_US,默认中文 非必填)
* @return
public static String translateVoice(Voice voice){
JSONObject json = uploadVoice(voice);
if(json!=null && json.containsKey("errcode")&&"0".equals(json.getString("errcode"))){
try {
Thread.sleep(voice.getWaitMill());
} catch (InterruptedException e) {
e.printStackTrace();
}
return getVoiceResult(voice.getAccessToken(), voice.getVoice_id(),voice.getLang());
return null;
* 微信翻译
* @param accessToken
* @param lfrom 源语言,zh_CN 或 en_US
* @param lto 目标语言,zh_CN 或 en_US
* @param text 需要翻译的文字
public static String translateText(String accessToken,String lfrom,String lto,String text){
String result = null;
String requestUrl = TRANSLATE_TEXT_URL+"access_token="+accessToken+"&lfrom="+lfrom+"<o="+lto;
logger.info("------微信翻译地址----"+ requestUrl);
logger.info("------微信翻译原文----"+ text);
JSONObject obj = httpRequest(requestUrl, "POST", text);
if(obj!=null && obj.containsKey("to_content")){
result = obj.getString("to_content");
logger.info("------微信翻译结果----"+ result);
return result;
* @param voice
private static JSONObject uploadVoice(Voice voice){
JSONObject jsonobject = new JSONObject();
File file = new File(voice.getFile());
if(!file.exists()||!file.isFile()){
jsonobject = null;
logger.info("--提交语音接口,文件不存在------");
}else{
HttpURLConnection con =null;
OutputStream out =null;
DataInputStream in = null;
String requestUrl = "http://api.weixin.qq.com/cgi-bin/media/voice/addvoicetorecofortext?access_token="+voice.getAccessToken()+"&format=mp3&voice_id=" + voice.getVoice_id() + "&lang="+voice.getLang();
logger.info("--提交语音接口请求:"+requestUrl);
URL urlObj = new URL(requestUrl);
con = (HttpURLConnection) urlObj.openConnection();
con.setRequestMethod("POST"); // 以Post方式提交表单,默认get方式
con.setDoInput(true);
con.setDoOutput(true);
con.setUseCaches(false); // post方式不能使用缓存
//设置网络超时
con.setConnectTimeout(8000);
con.setReadTimeout(8000);
con.setRequestProperty("Connection", "Keep-Alive");// 设置请求头信息
con.setRequestProperty("Charset", "UTF-8");
String BOUNDARY = "----------" + System.currentTimeMillis();// 设置边界
con.setRequestProperty("Content-Type", "multipart/form-data; boundary="+ BOUNDARY);
// 请求正文信息
// 第一部分:
StringBuilder sb = new StringBuilder();
sb.append("--"); // 必须多两道线
sb.append(BOUNDARY);
sb.append("\r\n");
sb.append("Content-Disposition: form-data;name=\"media\";filelength=\""+file.length()+"\";filename=\""+ file.getName() + "\"\r\n");
sb.append("Content-Type:application/octet-stream\r\n\r\n");
byte[] head = sb.toString().getBytes("utf-8");
// 获得输出流
out = new DataOutputStream(con.getOutputStream());
// 输出表头
out.write(head);
// 文件正文部分
// 把文件已流文件的方式 推入到url中
in = new DataInputStream(new FileInputStream(file));
int bytes = 0;
byte[] bufferOut = new byte[1024];
while ((bytes = in.read(bufferOut)) != -1) {
out.write(bufferOut, 0, bytes);
in.close();
// 结尾部分
byte[] foot = ("\r\n--" + BOUNDARY + "--\r\n").getBytes("utf-8");// 定义最后数据分隔线
out.write(foot);
out.flush();
out.close();
StringBuffer buffer = new StringBuffer();
BufferedReader reader = null;
// 定义BufferedReader输入流来读取URL的响应
reader = new BufferedReader(new InputStreamReader(con.getInputStream()));
String line = null;
while ((line = reader.readLine()) != null) {
buffer.append(line);
if(result==null){
result = buffer.toString();
logger.info("--提交语音接口返回:"+buffer.toString());
} catch (Exception e) {
logger.info(e.getMessage());
}finally {
if(reader!=null){
reader.close();
jsonobject = JSONObject.parseObject(result);
}finally{
if(in!=null){
if(out!=null){
if(con!=null){
con.disconnect();
return jsonobject;
* 获取语音识别结果
* @param voice_id
* @param lang
private static String getVoiceResult(String accessToken,String voice_id,String lang){
lang = (lang==null ||"".equals(lang))?"zh_CN":lang;
String requestUrl = VOICE_RESULT_URL+"access_token="+accessToken+"&voice_id="+voice_id+"&lang="+lang;
logger.info("--获取语音识别结果请求参数:"+requestUrl);
JSONObject result =httpRequest(requestUrl, "POST",null);
if(result!=null){
logger.info("--获取语音识别结果---"+result);
logger.info("--获取语音识别结果为空---");
Object error = result.get(WeiXinConstant.RETURN_ERROR_INFO_CODE);
if(error == null){
return result.getString("result");
private static JSONObject httpRequest(String requestUrl,
String requestMethod, String outputStr) {
JSONObject jsonObject = null;
HttpURLConnection httpUrlConn = null;
// 创建SSLContext对象,并使用我们指定的信任管理器初始化
URL url = new URL(requestUrl);
httpUrlConn = (HttpURLConnection) url.openConnection();
httpUrlConn.setDoOutput(true);
httpUrlConn.setDoInput(true);
httpUrlConn.setUseCaches(false);
httpUrlConn.setConnectTimeout(500000);
// httpUrlConn.setRequestProperty("content-type", "application/json");
// 设置请求方式(GET/POST)
httpUrlConn.setRequestMethod(requestMethod);
if ("GET".equalsIgnoreCase(requestMethod))
httpUrlConn.connect();
// 当有数据需要提交时
if (null != outputStr) {
OutputStream outputStream = httpUrlConn.getOutputStream();
// 注意编码格式,防止中文乱码
outputStream.write(outputStr.getBytes("UTF-8"));
outputStream.close();
// 将返回的输入流转换成字符串
InputStream inputStream = httpUrlConn.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(
inputStream, "utf-8");
BufferedReader bufferedReader = new BufferedReader(
inputStreamReader);
String str = null;
while ((str = bufferedReader.readLine()) != null) {
buffer.append(str);
bufferedReader.close();
inputStreamReader.close();
// 释放资源
inputStream.close();
inputStream = null;
httpUrlConn.disconnect();
logger.info(buffer.toString());
//jsonObject = JSONObject.parseObject(buffer.toString());
jsonObject = JSONObject.parseObject(buffer.toString());
} catch (ConnectException ce) {
ce.printStackTrace();
logger
.info("Weixin server connection timed out.");
logger.info("https request error:{}"
+ e.getMessage());
}catch (Exception e) {
logger.info("http close error:{}"+ e.getMessage());
return jsonObject;
public static void main(String[] args) {
String lfrom = "zh_CN", lto = "en_US";
String file = "D:\\work-sb\\demo\\src\\main\\resources\\static\\test3.mp3";
String accessToken = WxTokenUtil.genToken();
String voice_id = System.currentTimeMillis() + "-" + System.nanoTime();
Voice voice = new Voice(accessToken, "mp3", voice_id, lto, file);
String voiceContent = translateVoice(voice);
System.out.println(voiceContent);
System.out.println(voice_id);
String text = "我是中国人啊";
String text2 = "I'm Chinese, you know?";
translateText(accessToken, lfrom, lto, text);
translateText(accessToken, lto, lfrom, text2);
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
这是相关实现代码
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
import com.alibaba.fastjson.JSONObject;
import org.apache.log4j.Logger;
import java.io.*;
import java.net.ConnectException;
import java.net.HttpURLConnection;
import java.net.URL;
/**
* 微信--AI开放接口
*
*/
public class JwAIApi {
/**
* 提交语音
*/
public static final String ADD_VOICE_URL = "http://api.weixin.qq.com/cgi-bin/media/voice/addvoicetorecofortext?";
/**
* 获取语音翻译结果
*/
public static final String VOICE_RESULT_URL = "http://api.weixin.qq.com/cgi-bin/media/voice/queryrecoresultfortext?";
/**
* 翻译接口
*/
public static final String TRANSLATE_TEXT_URL = "http://api.weixin.qq.com/cgi-bin/media/voice/translatecontent?";
private static Logger logger = Logger.getLogger(JwAIApi.class);
/**
* 微信翻译语音<br>
* 参数voice请用带参构造器创建对象,若用默认构造器则需要赋值属性有:
* accessToken,
* format(只支持mp3,16k,单声道,最大1M),
* voice_id(语音唯一标识),
* file(文件地址),
* lang(语言,zh_CN 或 en_US,默认中文 非必填)
* @return
*/
public static String translateVoice(Voice voice){
JSONObject json = uploadVoice(voice);
if(json!=null && json.containsKey("errcode")&&"0".equals(json.getString("errcode"))){
try {
Thread.sleep(voice.getWaitMill());
} catch (InterruptedException e) {
e.printStackTrace();
}
return getVoiceResult(voice.getAccessToken(), voice.getVoice_id(),voice.getLang());
}
return null;
}
/**
* 微信翻译
* @param accessToken
* @param lfrom 源语言,zh_CN 或 en_US
* @param lto 目标语言,zh_CN 或 en_US
* @param text 需要翻译的文字
* @return
*/
public static String translateText(String accessToken,String lfrom,String lto,String text){
String result = null;
String requestUrl = TRANSLATE_TEXT_URL+"access_token="+accessToken+"&lfrom="+lfrom+"<o="+lto;
logger.info("------微信翻译地址----"+ requestUrl);
logger.info("------微信翻译原文----"+ text);
JSONObject obj = httpRequest(requestUrl, "POST", text);
if(obj!=null && obj.containsKey("to_content")){
result = obj.getString("to_content");
}
logger.info("------微信翻译结果----"+ result);
return result;
}
/**
* 提交语音
* @param voice
* @return
*/
private static JSONObject uploadVoice(Voice voice){
JSONObject jsonobject = new JSONObject();
String result = null;
File file = new File(voice.getFile());
if(!file.exists()||!file.isFile()){
jsonobject = null;
logger.info("--提交语音接口,文件不存在------");
}else{
HttpURLConnection con =null;
OutputStream out =null;
DataInputStream in = null;
String requestUrl = "http://api.weixin.qq.com/cgi-bin/media/voice/addvoicetorecofortext?access_token="+voice.getAccessToken()+"&format=mp3&voice_id=" + voice.getVoice_id() + "&lang="+voice.getLang();
logger.info("--提交语音接口请求:"+requestUrl);
try {
URL urlObj = new URL(requestUrl);
con = (HttpURLConnection) urlObj.openConnection();
con.setRequestMethod("POST"); // 以Post方式提交表单,默认get方式
con.setDoInput(true);
con.setDoOutput(true);
con.setUseCaches(false); // post方式不能使用缓存
//设置网络超时
con.setConnectTimeout(8000);
con.setReadTimeout(8000);
con.setRequestProperty("Connection", "Keep-Alive");// 设置请求头信息
con.setRequestProperty("Charset", "UTF-8");
String BOUNDARY = "----------" + System.currentTimeMillis();// 设置边界
con.setRequestProperty("Content-Type", "multipart/form-data; boundary="+ BOUNDARY);
// 请求正文信息
// 第一部分:
StringBuilder sb = new StringBuilder();
sb.append("--"); // 必须多两道线
sb.append(BOUNDARY);
sb.append("\r\n");
sb.append("Content-Disposition: form-data;name=\"media\";filelength=\""+file.length()+"\";filename=\""+ file.getName() + "\"\r\n");
sb.append("Content-Type:application/octet-stream\r\n\r\n");
byte[] head = sb.toString().getBytes("utf-8");
// 获得输出流
out = new DataOutputStream(con.getOutputStream());
// 输出表头
out.write(head);
// 文件正文部分
// 把文件已流文件的方式 推入到url中
in = new DataInputStream(new FileInputStream(file));
int bytes = 0;
byte[] bufferOut = new byte[1024];
while ((bytes = in.read(bufferOut)) != -1) {
out.write(bufferOut, 0, bytes);
}
in.close();
// 结尾部分
byte[] foot = ("\r\n--" + BOUNDARY + "--\r\n").getBytes("utf-8");// 定义最后数据分隔线
out.write(foot);
out.flush();
out.close();
StringBuffer buffer = new StringBuffer();
BufferedReader reader = null;
try {
// 定义BufferedReader输入流来读取URL的响应
reader = new BufferedReader(new InputStreamReader(con.getInputStream()));
String line = null;
while ((line = reader.readLine()) != null) {
buffer.append(line);
}
if(result==null){
result = buffer.toString();
}
logger.info("--提交语音接口返回:"+buffer.toString());
} catch (Exception e) {
logger.info(e.getMessage());
e.printStackTrace();
}finally {
if(reader!=null){
reader.close();
}
}
jsonobject = JSONObject.parseObject(result);
} catch (Exception e) {
logger.info(e.getMessage());
e.printStackTrace();
}finally{
try {
if(in!=null){
in.close();
}
if(out!=null){
out.close();
}
if(con!=null){
con.disconnect();
}
} catch (Exception e) {
}
}
}
return jsonobject;
}
/**
* 获取语音识别结果
* @param accessToken
* @param voice_id
* @param lang
* @return
*/
private static String getVoiceResult(String accessToken,String voice_id,String lang){
lang = (lang==null ||"".equals(lang))?"zh_CN":lang;
String requestUrl = VOICE_RESULT_URL+"access_token="+accessToken+"&voice_id="+voice_id+"&lang="+lang;
logger.info("--获取语音识别结果请求参数:"+requestUrl);
JSONObject result =httpRequest(requestUrl, "POST",null);
if(result!=null){
logger.info("--获取语音识别结果---"+result);
}else{
logger.info("--获取语音识别结果为空---");
}
Object error = result.get(WeiXinConstant.RETURN_ERROR_INFO_CODE);
if(error == null){
return result.getString("result");
}
return null;
}
private static JSONObject httpRequest(String requestUrl,
String requestMethod, String outputStr) {
JSONObject jsonObject = null;
StringBuffer buffer = new StringBuffer();
HttpURLConnection httpUrlConn = null;
try {
// 创建SSLContext对象,并使用我们指定的信任管理器初始化
URL url = new URL(requestUrl);
httpUrlConn = (HttpURLConnection) url.openConnection();
httpUrlConn.setDoOutput(true);
httpUrlConn.setDoInput(true);
httpUrlConn.setUseCaches(false);
httpUrlConn.setConnectTimeout(500000);
// httpUrlConn.setRequestProperty("content-type", "application/json");
// 设置请求方式(GET/POST)
httpUrlConn.setRequestMethod(requestMethod);
if ("GET".equalsIgnoreCase(requestMethod))
httpUrlConn.connect();
// 当有数据需要提交时
if (null != outputStr) {
OutputStream outputStream = httpUrlConn.getOutputStream();
// 注意编码格式,防止中文乱码
outputStream.write(outputStr.getBytes("UTF-8"));
outputStream.close();
}
// 将返回的输入流转换成字符串
InputStream inputStream = httpUrlConn.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(
inputStream, "utf-8");
BufferedReader bufferedReader = new BufferedReader(
inputStreamReader);
String str = null;
while ((str = bufferedReader.readLine()) != null) {
buffer.append(str);
}
bufferedReader.close();
inputStreamReader.close();
// 释放资源
inputStream.close();
inputStream = null;
httpUrlConn.disconnect();
logger.info(buffer.toString());
//jsonObject = JSONObject.parseObject(buffer.toString());
jsonObject = JSONObject.parseObject(buffer.toString());
} catch (ConnectException ce) {
ce.printStackTrace();
logger
.info("Weixin server connection timed out.");
} catch (Exception e) {
e.printStackTrace();
logger.info("https request error:{}"
+ e.getMessage());
}finally{
try {
httpUrlConn.disconnect();
}catch (Exception e) {
e.printStackTrace();
logger.info("http close error:{}"+ e.getMessage());
}
}
return jsonObject;
}
public static void main(String[] args) {
String lfrom = "zh_CN", lto = "en_US";
String file = "D:\\work-sb\\demo\\src\\main\\resources\\static\\test3.mp3";
String accessToken = WxTokenUtil.genToken();
String voice_id = System.currentTimeMillis() + "-" + System.nanoTime();
Voice voice = new Voice(accessToken, "mp3", voice_id, lto, file);
String voiceContent = translateVoice(voice);
System.out.println(voiceContent);
System.out.println(voice_id);
String text = "我是中国人啊";
String text2 = "I'm Chinese, you know?";
translateText(accessToken, lfrom, lto, text);
translateText(accessToken, lto, lfrom, text2);
}
}
这是相关实现代码