地址:http://ai.baidu.com/tech/speech/tts
前台代码:
<audio id='music' src=""></audio> <script> /* #spd 选填 语速,取值0-9,默认为5中语速 #pit 选填 音调,取值0-9,默认为5中语调 #vol 选填 音量,取值0-15,默认为5中音量 #per 选填 发音人选择, 0为普通女声,1为普通男生,3为情感合成-度逍遥,4为情感合成-度丫丫,默认为普通女声 */ var spd = '${spd!""}'; var pit = '${pit!""}'; var vol = '${vol!""}'; var per = '${per!""}'; var myToken = '${myToken!""}'; var cuid = '${cuid!""}'; function play(text) { var player = document.querySelector('#music'); var url = "http://tsn.baidu.com/text2audio?lan=zh&ctp=1&cuid="+cuid+"&tok="+myToken+"&tex="+text+"&vol="+vol+"&per="+per+"&spd="+spd+"&pit=" + pit; if(player.paused ){ // 暂停中 player.src =url; player.play(); } } </script>
获取token的java类:
import org.json.JSONObject; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.util.List; import java.util.Map; /** * 获取token类 */ public class AuthService { /** * 获取权限token * @return 返回示例: * { * "access_token": "24.460da4889caad24cccdb1fea17221975.2592000.1491995545.282335-1234567", * "expires_in": 2592000 * } */ public static String getAuth() { // 官网获取的 API Key 更新为你注册的 String clientId = "ksnh3bAPPByrYGMD4MwTaMum"; // 官网获取的 Secret Key 更新为你注册的 String clientSecret = "e2LgPHXraUqzUA5N7U5OtWULq9LAZdiB "; return getAuth(clientId, clientSecret); } /** * 获取API访问token * 该token有一定的有效期,需要自行管理,当失效时需重新获取. * @param ak - 百度云官网获取的 API Key * @param sk - 百度云官网获取的 Securet Key * @return assess_token 示例: * "24.460da4889caad24cccdb1fea17221975.2592000.1491995545.282335-1234567" */ public static String getAuth(String ak, String sk) { // 获取token地址 String authHost = "https://aip.baidubce.com/oauth/2.0/token?"; String getAccessTokenUrl = authHost // 1. grant_type为固定参数 + "grant_type=client_credentials" // 2. 官网获取的 API Key + "&client_id=" + ak // 3. 官网获取的 Secret Key + "&client_secret=" + sk; try { URL realUrl = new URL(getAccessTokenUrl); // 打开和URL之间的连接 HttpURLConnection connection = (HttpURLConnection) realUrl.openConnection(); connection.setRequestMethod("GET"); connection.connect(); // 获取所有响应头字段 Map<String, List<String>> map = connection.getHeaderFields(); // 遍历所有的响应头字段 for (String key : map.keySet()) { System.err.println(key + "--->" + map.get(key)); } // 定义 BufferedReader输入流来读取URL的响应 BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); String result = ""; String line; while ((line = in.readLine()) != null) { result += line; } /** * 返回结果示例 */ System.err.println("result:" + result); JSONObject jsonObject = new JSONObject(result); String access_token = jsonObject.getString("access_token"); return access_token; } catch (Exception e) { System.err.printf("获取token失败!"); e.printStackTrace(System.err); } return null; } }
随机获取cuid的java类:
import java.util.Random; /** * 获取指定长度的随机字符串 * @author 小帅丶 * @Title RandomStringGenerator * @时间 2017-5-26下午4:58:53 */ public class RandomStringGenerator { /** * 获取一定长度的随机字符串 * @param length 指定字符串长度 * @return 一定长度的字符串 */ public static String getRandomStringByLength(int length) { String base = "abcdefghijklmnopqrstuvwxyz0123456789"; Random random = new Random(); StringBuffer sb = new StringBuffer(); for (int i = 0; i < length; i++) { int number = random.nextInt(base.length()); sb.append(base.charAt(number)); } return sb.toString(); } }