壹、涉及到的文章(关键)
Java基础—实现微服务模块接收Http请求回调数据
贰、实现长文本语音合成代码
1、pom.xml
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>3.9.1</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.49</version>
</dependency>
2、java代码
package com.alibaba.nls.client;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class SpeechLongSynthesizerRestfulDemo {
private static Logger logger = LoggerFactory.getLogger(SpeechLongSynthesizerRestfulDemo.class);
private String accessToken;
private String appkey;
public SpeechLongSynthesizerRestfulDemo(String appkey, String token) {
this.appkey = appkey;
this.accessToken = token;
}
public void processPOSTRequest(String text, String format, int sampleRate, String voice) {
String url = "https://nls-gateway.cn-shanghai.aliyuncs.com/rest/v1/tts/async";
JSONObject context = new JSONObject();
context.put("device_id", "my_device_id");
JSONObject header = new JSONObject();
header.put("appkey", appkey);
header.put("token", accessToken);
JSONObject tts = new JSONObject();
tts.put("text", text);
tts.put("voice", voice);
tts.put("format", format);
tts.put("sample_rate", sampleRate);
tts.put("enable_subtitle", true);
JSONObject payload = new JSONObject();
payload.put("enable_notify", false);
payload.put("notify_url", "http://123.com");
payload.put("tts_request", tts);
JSONObject json = new JSONObject();
json.put("context", context);
json.put("header", header);
json.put("payload", payload);
String bodyContent = json.toJSONString();
logger.info("POST Body Content: " + bodyContent);
RequestBody reqBody = RequestBody.create(MediaType.parse("application/json"), bodyContent);
Request request = new Request.Builder()
.url(url)
.header("Content-Type", "application/json")
.post(reqBody)
.build();
try {
OkHttpClient client = new OkHttpClient();
Response response = client.newCall(request).execute();
String contentType = response.header("Content-Type");
System.out.println("contentType = " + contentType);
String result = response.body().string();
response.close();
System.out.println("result = " + result);
JSONObject resultJson = JSON.parseObject(result);
if(resultJson.containsKey("error_code") && resultJson.getIntValue("error_code") == 20000000) {
logger.info("Request Success! task_id = " + resultJson.getJSONObject("data").getString("task_id"));
String task_id = resultJson.getJSONObject("data").getString("task_id");
String request_id = resultJson.getString("request_id");
}else {
logger.error("Request Error: status=" + resultJson.getIntValue("status")
+ ", error_code=" + resultJson.getIntValue("error_code")
+ ", error_message=" + resultJson.getString("error_message"));
}
} catch (Exception e) {
e.printStackTrace();
}
}
private void waitLoop4Complete(String url, String appkey, String token, String task_id, String request_id) {
String fullUrl = url + "?appkey=" + appkey + "&task_id=" + task_id + "&token=" + token + "&request_id=" + request_id;
System.out.println("query url = " + fullUrl);
while(true) {
Request request = new Request.Builder().url(fullUrl).get().build();
try {
OkHttpClient client = new OkHttpClient();
Response response = client.newCall(request).execute();
String result = response.body().string();
response.close();
System.out.println("waitLoop4Complete = " + result);
JSONObject resultJson = JSON.parseObject(result);
if(resultJson.containsKey("error_code")
&& resultJson.getIntValue("error_code") == 20000000
&& resultJson.containsKey("data")
&& resultJson.getJSONObject("data").getString("audio_address") != null) {
logger.info("Tts Finished! task_id = " + resultJson.getJSONObject("data").getString("task_id"));
logger.info("Tts Finished! audio_address = " + resultJson.getJSONObject("data").getString("audio_address"));
break;
}else {
logger.info("Tts Queuing...");
}
Thread.sleep(10000);
} catch (Exception e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
String token = "token";
String appkey = "appkey";
SpeechLongSynthesizerRestfulDemo demo = new SpeechLongSynthesizerRestfulDemo(appkey, token);
String text = "我家的后面有一个很大的园,相传叫作百草园。现在是早已并屋子一起卖给朱文公的子孙了,连那最末次的相见也已经隔了七八年,其中似乎确凿只有一些野草;但那时却是我的乐园。";
String format = "wav";
int sampleRate = 16000;
String voice = "siyue";
demo.processPOSTRequest(text, format, sampleRate, voice);
}
}
叁、启动测试
1、请求侧

2、回调侧
