1. 背景
今回は要件の記録をもたらします。最近はAI生放送室で音声翻訳をしています。そこで今回はAlibaba Cloudの音声のみのインタラクションとAlibaba Cloudのossサービスを利用しました。
1 つ目は、Alibaba Cloud の音声のみの対話です: nls-portal.console.aliyun.com/overview。
oss サービスについては、より頻繁に使用される Alibaba Cloud の公式検索に直接アクセスしてください。
2. 技術概要
2.1. 概要
- ライブルームに入るとき。フロント エンドは、xxx ユーザーがライブ ブロードキャスト ルームに入ることを検出します。この情報を取得した後。フロントエンドは、ユーザーのニックネームをサーバーに送信します。
- サーバーはニックネームと構成されたウェルカム コピーを接合し、Alibaba Cloud Smart Voice を呼び出して音声を生成します。
- Alibaba Cloud Smart Voice は、指定された音声合成モデルに従って、対応する音声ファイルを生成します。
- サーバーは対応するオーディオ ストリームを取得し、oss サービスを呼び出してオーディオ ストリームを対応するサーバーにアップロードします。
- アップロードが完了したら、オーディオ リンクをフロント エンドに戻します。フロントエンドは、対応するオーディオ ファイルを再生します。
2.2. オーディオ プロジェクトの作成
- Alibaba Cloud にログインした後、 nls-portal.console.aliyun.com/ applist では音声対話のみを有効にできます。
- 対応するプロジェクトを作成する
- 設定を変更
- 合成したい声を選ぶ
3. 技術的な実装
3.1. トークンの生成
/**
* 获取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も提供されています。直接使用することもできます。