0
0
Files
fys-Multi-tenant/fys-admin/src/main/java/com/fuyuanshen/app/http/ApacheHttpTtsClient.java
2026-02-02 16:06:11 +08:00

85 lines
3.2 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.fuyuanshen.app.http;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Base64;
public class ApacheHttpTtsClient {
private String accessKeyId;
private String accessKeySecret;
private String appKey;
public ApacheHttpTtsClient(String accessKeyId, String accessKeySecret, String appKey) {
this.accessKeyId = accessKeyId;
this.accessKeySecret = accessKeySecret;
this.appKey = appKey;
}
/**
* 使用Apache HttpClient调用TTS服务
*/
public byte[] synthesizeTextToMp3(String text) throws IOException {
CloseableHttpClient httpClient = HttpClients.createDefault();
try {
HttpPost httpPost = new HttpPost("https://nls-gateway.cn-shanghai.aliyuncs.com/v1/tts");
// 设置请求头
httpPost.setHeader("Content-Type", "application/json");
httpPost.setHeader("Authorization", "Bearer " + getAccessToken());
// 设置请求体
String jsonPayload = String.format(
"{\"appkey\":\"%s\",\"text\":\"%s\",\"voice\":\"zhifeng\",\"format\":\"MP3\",\"sample_rate\":24000,\"volume\":50,\"speech_rate\":0,\"pitch_rate\":0}",
appKey,
text.replace("\"", "\\\"")
);
StringEntity entity = new StringEntity(jsonPayload, "UTF-8");
httpPost.setEntity(entity);
// 执行请求
CloseableHttpResponse response = httpClient.execute(httpPost);
try {
HttpEntity responseEntity = response.getEntity();
if (response.getStatusLine().getStatusCode() == 200) {
// 读取响应数据Base64编码的音频数据
String responseStr = EntityUtils.toString(responseEntity);
// 如果返回的是Base64编码的数据
if (responseStr.startsWith("data:audio/mp3;base64,")) {
String base64Data = responseStr.substring("data:audio/mp3;base64,".length());
return Base64.getDecoder().decode(base64Data);
} else {
// 直接返回音频数据
return EntityUtils.toByteArray(responseEntity);
}
} else {
throw new IOException("请求失败: " + response.getStatusLine().getStatusCode());
}
} finally {
response.close();
}
} finally {
httpClient.close();
}
}
/**
* 获取访问令牌
*/
private String getAccessToken() {
// 实现获取阿里云访问令牌的逻辑
return "your-access-token";
}
}