一文教你智能交互音频如何直传OSS
1. 背景
这一次带来的是做需求的一次记录。最近在做AI直播间的语音翻译。那么本次用到了阿里云的只能语音交互和阿里云的oss服务。
首先就是阿里云的只能语音交互:nls-portal.console.aliyun.com/overview。
oss服务就直接去阿里云的官方搜索就好了,这个用的比较多。
2. 技术概述
2.1. 概述
- 当用于进入到直播间时。前端会检测到xxx用户进入直播间。捕获到这个信息以后。前端将用户用户昵称传给服务端。
- 服务端将昵称与配置好的欢迎文案拼接好,调用阿里云智能语音生成音频。
- 阿里云智能语音根据指定的音频合成模型,生成对应的音频文件。
- 服务端拿到对应的音频流,调用oss服务将音频流上传到对应的服务端。
- 上传完成以后,将音频链接返回给前端。前端播放对应的音频文件。
2.2. 创建音频项目
- nls-portal.console.aliyun.com/applist 登录阿里云以后开通只能语音交互。
- 创建对应的项目
- 修改配置
- 选择自己想要合成的语音
3. 技术实现
3.1. 生成token
/**
* 获取token
*
* @return
* @throws IOException
*/
private static String getToken() throws IOException {
AccessToken accessToken = new AccessToken("accessKeyId", "accessKeySecret");
accessToken.apply();
String token = accessToken.getToken();
return token;
}
3.2. 生成对应的音频流文件
private void processGETRequest(String appkey, String accessToken, String text, String format, int sampleRate, String voice, String filePath) {
/**
* 设置HTTPS GET请求:
* 1.使用HTTPS协议
* 2.语音识别服务域名:nls-gateway-cn-shanghai.aliyuncs.com
* 3.语音识别接口请求路径:/stream/v1/tts
* 4.设置必须请求参数:appkey、token、text、format、sample_rate
* 5.设置可选请求参数:voice、volume、speech_rate、pitch_rate
*/
String url = "https://nls-gateway-cn-shanghai.aliyuncs.com/stream/v1/tts";
url = url + "?appkey=" + appkey;
url = url + "&token=" + accessToken;
url = url + "&text=" + text;
url = url + "&format=" + format;
url = url + "&voice=" + voice;
url = url + "&sample_rate=" + sampleRate;
/**
* 发送HTTPS GET请求,处理服务端的响应。
*/
Request request = new Request.Builder().url(url).get().build();
try {
OkHttpClient client = new OkHttpClient();
Response response = client.newCall(request).execute();
String contentType = response.header("Content-Type");
if ("audio/mpeg".equals(contentType)) {
byte[] bytes = response.body().bytes();
ossService.ossUploadByStream(filePath, new ByteArrayInputStream(bytes));
} else {
String errorMessage = response.body().string();
}
response.close();
} catch (Exception e) {
e.printStackTrace();
}
}
3.3. 音频流文件上传到oss
public void ossUploadByStream(String filePath, InputStream input) {
OSS ossClient = new OSSClientBuilder().build(aLiYunConfig.getEndpoint(), aLiYunConfig.getAccessKeyId(),
aLiYunConfig.getSecretAccessKey());
PutObjectRequest putObjectRequest = new PutObjectRequest(aLiYunConfig.getBucketName(), filePath, input);
ossClient.putObject(putObjectRequest);
ossClient.shutdown();
}
4. 总结
- 对于音频的生成,直接保存到oss,这样就不需要占用服务器的内存。直接上传到oss服务。更加的方便使用。
- 需要注意的是,音频的生成需要自己多读读文档。官方也提供了sdk。也可以直接使用。
转载自:https://juejin.cn/post/7229368008363999292