|
|
|
@ -34,35 +34,124 @@ public class AppletApiTTServiceImpl implements AppletApiTTService { |
|
|
|
private IAppletTtsPlayLogService appletTtsPlayLogService; |
|
|
|
|
|
|
|
@Override |
|
|
|
public byte[] textToVoice(String text, Float speed, Integer voiceType, Float volume, String codec) { |
|
|
|
public String textToVoice(String text, Float speed, Integer voiceType, Float volume, String codec) { |
|
|
|
return textToVoice(text, speed, voiceType, volume, codec, null); |
|
|
|
} |
|
|
|
|
|
|
|
public byte[] textToVoice(String text, Float speed, Integer voiceType, Float volume, String codec, String userId) { |
|
|
|
// public byte[] textToVoice(String text, Float speed, Integer voiceType, Float volume, String codec, String userId) { |
|
|
|
// long startTime = System.currentTimeMillis(); |
|
|
|
// |
|
|
|
// try { |
|
|
|
// // 创建认证对象 |
|
|
|
// Credential cred = new Credential(secretId, secretKey); |
|
|
|
// |
|
|
|
// // 实例化一个http选项,可选的,没有特殊需求可以跳过 |
|
|
|
// HttpProfile httpProfile = new HttpProfile(); |
|
|
|
// httpProfile.setEndpoint("tts.tencentcloudapi.com"); |
|
|
|
// |
|
|
|
// // 实例化一个client选项,可选的,没有特殊需求可以跳过 |
|
|
|
// ClientProfile clientProfile = new ClientProfile(); |
|
|
|
// clientProfile.setHttpProfile(httpProfile); |
|
|
|
// |
|
|
|
// // 实例化要请求产品的client对象 |
|
|
|
// TtsClient client = new TtsClient(cred, "", clientProfile); |
|
|
|
// |
|
|
|
// // 实例化一个请求对象 |
|
|
|
// TextToVoiceRequest req = new TextToVoiceRequest(); |
|
|
|
// |
|
|
|
// // 设置必填参数 |
|
|
|
// req.setText(text); |
|
|
|
// req.setSessionId(UUID.randomUUID().toString()); |
|
|
|
// |
|
|
|
// // 设置可选参数 |
|
|
|
// if (speed != null) { |
|
|
|
// req.setSpeed(speed); |
|
|
|
// } |
|
|
|
// if (voiceType != null) { |
|
|
|
// req.setVoiceType(voiceType.longValue()); |
|
|
|
// } |
|
|
|
// if (volume != null) { |
|
|
|
// req.setVolume(volume); |
|
|
|
// } |
|
|
|
// if (codec != null && !codec.isEmpty()) { |
|
|
|
// req.setCodec(codec); |
|
|
|
// } else { |
|
|
|
// req.setCodec("wav"); // 默认wav格式 |
|
|
|
// } |
|
|
|
// |
|
|
|
// // 设置其他默认参数 |
|
|
|
// req.setModelType(1L); // 默认模型 |
|
|
|
// req.setPrimaryLanguage(2L); // 中文 |
|
|
|
// req.setSampleRate(16000L); // 16k采样率 |
|
|
|
// |
|
|
|
// // 返回的resp是一个TextToVoiceResponse的实例,与请求对象对应 |
|
|
|
// TextToVoiceResponse resp = client.TextToVoice(req); |
|
|
|
// |
|
|
|
// // 计算耗时 |
|
|
|
// long endTime = System.currentTimeMillis(); |
|
|
|
// double elapsedTime = (endTime - startTime) / 1000.0; |
|
|
|
// |
|
|
|
// // 获取base64编码的音频数据并解码为二进制 |
|
|
|
// String audioBase64 = resp.getAudio(); |
|
|
|
// byte[] audioData = null; |
|
|
|
// |
|
|
|
// if (audioBase64 != null && !audioBase64.isEmpty()) { |
|
|
|
// audioData = java.util.Base64.getDecoder().decode(audioBase64); |
|
|
|
// |
|
|
|
// // 记录成功的TTS调用日志 |
|
|
|
// savePlayLog(userId, text, voiceType, volume != null ? volume.doubleValue() : null, |
|
|
|
// speed != null ? speed.doubleValue() : null, elapsedTime, true); |
|
|
|
// |
|
|
|
// log.info("TTS调用成功,文本长度: {}, 耗时: {}秒", text != null ? text.length() : 0, elapsedTime); |
|
|
|
// return audioData; |
|
|
|
// } else { |
|
|
|
// // 记录失败的TTS调用日志 |
|
|
|
// savePlayLog(userId, text, voiceType, volume != null ? volume.doubleValue() : null, |
|
|
|
// speed != null ? speed.doubleValue() : null, elapsedTime, false); |
|
|
|
// |
|
|
|
// log.warn("TTS返回的音频数据为空"); |
|
|
|
// return null; |
|
|
|
// } |
|
|
|
// |
|
|
|
// } catch (Exception e) { |
|
|
|
// // 计算耗时 |
|
|
|
// long endTime = System.currentTimeMillis(); |
|
|
|
// double elapsedTime = (endTime - startTime) / 1000.0; |
|
|
|
// |
|
|
|
// // 记录失败的TTS调用日志 |
|
|
|
// savePlayLog(userId, text, voiceType, volume != null ? volume.doubleValue() : null, |
|
|
|
// speed != null ? speed.doubleValue() : null, elapsedTime, false); |
|
|
|
// |
|
|
|
// log.error("调用腾讯云TTS接口失败: {}", e.getMessage(), e); |
|
|
|
// return null; |
|
|
|
// } |
|
|
|
// } |
|
|
|
|
|
|
|
public String textToVoice(String text, Float speed, Integer voiceType, Float volume, String codec, String userId) { |
|
|
|
long startTime = System.currentTimeMillis(); |
|
|
|
|
|
|
|
|
|
|
|
try { |
|
|
|
// 创建认证对象 |
|
|
|
Credential cred = new Credential(secretId, secretKey); |
|
|
|
|
|
|
|
|
|
|
|
// 实例化一个http选项,可选的,没有特殊需求可以跳过 |
|
|
|
HttpProfile httpProfile = new HttpProfile(); |
|
|
|
httpProfile.setEndpoint("tts.tencentcloudapi.com"); |
|
|
|
|
|
|
|
|
|
|
|
// 实例化一个client选项,可选的,没有特殊需求可以跳过 |
|
|
|
ClientProfile clientProfile = new ClientProfile(); |
|
|
|
clientProfile.setHttpProfile(httpProfile); |
|
|
|
|
|
|
|
|
|
|
|
// 实例化要请求产品的client对象 |
|
|
|
TtsClient client = new TtsClient(cred, "", clientProfile); |
|
|
|
|
|
|
|
|
|
|
|
// 实例化一个请求对象 |
|
|
|
TextToVoiceRequest req = new TextToVoiceRequest(); |
|
|
|
|
|
|
|
|
|
|
|
// 设置必填参数 |
|
|
|
req.setText(text); |
|
|
|
req.setSessionId(UUID.randomUUID().toString()); |
|
|
|
|
|
|
|
|
|
|
|
// 设置可选参数 |
|
|
|
if (speed != null) { |
|
|
|
req.setSpeed(speed); |
|
|
|
@ -78,50 +167,47 @@ public class AppletApiTTServiceImpl implements AppletApiTTService { |
|
|
|
} else { |
|
|
|
req.setCodec("wav"); // 默认wav格式 |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 设置其他默认参数 |
|
|
|
req.setModelType(1L); // 默认模型 |
|
|
|
req.setPrimaryLanguage(2L); // 中文 |
|
|
|
req.setSampleRate(16000L); // 16k采样率 |
|
|
|
|
|
|
|
|
|
|
|
// 返回的resp是一个TextToVoiceResponse的实例,与请求对象对应 |
|
|
|
TextToVoiceResponse resp = client.TextToVoice(req); |
|
|
|
|
|
|
|
|
|
|
|
// 计算耗时 |
|
|
|
long endTime = System.currentTimeMillis(); |
|
|
|
double elapsedTime = (endTime - startTime) / 1000.0; |
|
|
|
|
|
|
|
|
|
|
|
// 获取base64编码的音频数据并解码为二进制 |
|
|
|
String audioBase64 = resp.getAudio(); |
|
|
|
byte[] audioData = null; |
|
|
|
|
|
|
|
|
|
|
|
if (audioBase64 != null && !audioBase64.isEmpty()) { |
|
|
|
audioData = java.util.Base64.getDecoder().decode(audioBase64); |
|
|
|
|
|
|
|
// 记录成功的TTS调用日志 |
|
|
|
savePlayLog(userId, text, voiceType, volume != null ? volume.doubleValue() : null, |
|
|
|
speed != null ? speed.doubleValue() : null, elapsedTime, true); |
|
|
|
|
|
|
|
savePlayLog(userId, text, voiceType, volume != null ? volume.doubleValue() : null, |
|
|
|
speed != null ? speed.doubleValue() : null, elapsedTime, true); |
|
|
|
|
|
|
|
log.info("TTS调用成功,文本长度: {}, 耗时: {}秒", text != null ? text.length() : 0, elapsedTime); |
|
|
|
return audioData; |
|
|
|
return audioBase64; |
|
|
|
} else { |
|
|
|
// 记录失败的TTS调用日志 |
|
|
|
savePlayLog(userId, text, voiceType, volume != null ? volume.doubleValue() : null, |
|
|
|
speed != null ? speed.doubleValue() : null, elapsedTime, false); |
|
|
|
|
|
|
|
savePlayLog(userId, text, voiceType, volume != null ? volume.doubleValue() : null, |
|
|
|
speed != null ? speed.doubleValue() : null, elapsedTime, false); |
|
|
|
|
|
|
|
log.warn("TTS返回的音频数据为空"); |
|
|
|
return null; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} catch (Exception e) { |
|
|
|
// 计算耗时 |
|
|
|
long endTime = System.currentTimeMillis(); |
|
|
|
double elapsedTime = (endTime - startTime) / 1000.0; |
|
|
|
|
|
|
|
|
|
|
|
// 记录失败的TTS调用日志 |
|
|
|
savePlayLog(userId, text, voiceType, volume != null ? volume.doubleValue() : null, |
|
|
|
speed != null ? speed.doubleValue() : null, elapsedTime, false); |
|
|
|
|
|
|
|
savePlayLog(userId, text, voiceType, volume != null ? volume.doubleValue() : null, |
|
|
|
speed != null ? speed.doubleValue() : null, elapsedTime, false); |
|
|
|
|
|
|
|
log.error("调用腾讯云TTS接口失败: {}", e.getMessage(), e); |
|
|
|
return null; |
|
|
|
} |
|
|
|
|