[update] use aliyun andriod sdk

This commit is contained in:
2025-08-15 09:37:53 +08:00
parent 24a3a6bd62
commit 1302cd34a9
4 changed files with 93 additions and 66 deletions

View File

@@ -6,11 +6,13 @@ import android.util.Log;
import io.flutter.embedding.android.FlutterActivity;
import io.flutter.embedding.engine.FlutterEngine;
import io.flutter.plugin.common.MethodChannel;
import com.alibaba.fastjson.JSONException;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.idst.nui.Constants;
import com.alibaba.idst.nui.INativeStreamInputTtsCallback;
import com.alibaba.idst.nui.NativeNui;
import com.example.ai_chat_assistant.token.AccessToken;
import java.util.Map;
@@ -18,7 +20,8 @@ public class MainActivity extends FlutterActivity {
private static final String CHANNEL = "com.example.ai_chat_assistant/tts";
private static final String TAG = "StreamInputTts";
private static final String APP_KEY = "bXFFc1V65iYbW6EF";
private static final String TOKEN = "9ae5be92a9fa4fb3ac9bcd56eba69437";
private static final String ACCESS_KEY = "LTAI5t71JHxXRvt2mGuEVz9X";
private static final String ACCESS_KEY_SECRET = "WQOUWvngxmCg4CxIG0qkSlkcH5hrVT";
private static final String URL = "wss://nls-gateway-cn-beijing.aliyuncs.com/ws/v1";
private final NativeNui streamInputTtsInstance = new NativeNui(Constants.ModeType.MODE_STREAM_INPUT_TTS);
@@ -44,21 +47,25 @@ public class MainActivity extends FlutterActivity {
new MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger(), CHANNEL)
.setMethodCallHandler((call, result) -> {
Map<String, Object> args = (Map<String, Object>) call.arguments;
switch (call.method) {
case "startTts":
boolean isSuccess = startTts();
case "start":
Object isChinese = args.get("isChinese");
if (isChinese == null || isChinese.toString().isBlank()) {
return;
}
boolean isSuccess = start(Boolean.parseBoolean(isChinese.toString()));
result.success(isSuccess);
break;
case "sendTts":
Map<String, Object> args = (Map<String, Object>) call.arguments;
case "send":
Object textArg = args.get("text");
if (textArg == null || textArg.toString().isBlank()) {
return;
}
sendTts(textArg.toString());
send(textArg.toString());
break;
case "stopTts":
stopTts();
case "stop":
stop();
result.success("已停止");
break;
default:
@@ -81,7 +88,7 @@ public class MainActivity extends FlutterActivity {
streamInputTtsInstance.stopStreamInputTts();
}
private boolean startTts() {
private boolean start(boolean isChinese) {
int ret = streamInputTtsInstance.startStreamInputTts(new INativeStreamInputTtsCallback() {
@Override
public void onStreamInputTtsEventCallback(INativeStreamInputTtsCallback.StreamInputTtsEvent event, String task_id, String session_id, int ret_code, String error_msg, String timestamp, String all_response) {
@@ -117,13 +124,7 @@ public class MainActivity extends FlutterActivity {
mAudioTrack.setAudioData(data);
}
}
@Override
public void onStreamInputTtsLogTrackCallback(Constants.LogLevel level, String log) {
Log.i(TAG, "onStreamInputTtsLogTrackCallback log level:" + level + ", message -> " + log);
}
}, genTicket(), genParameters(), "", Constants.LogLevel.toInt(Constants.LogLevel.LOG_LEVEL_VERBOSE), true);
}, genTicket(), genParameters(isChinese), "", Constants.LogLevel.toInt(Constants.LogLevel.LOG_LEVEL_NONE), false);
if (Constants.NuiResultCode.SUCCESS != ret) {
Log.i(TAG, "start tts failed " + ret);
return false;
@@ -132,11 +133,11 @@ public class MainActivity extends FlutterActivity {
}
}
private void sendTts(String text) {
private void send(String text) {
streamInputTtsInstance.sendStreamInputTts(text);
}
private void stopTts() {
private void stop() {
streamInputTtsInstance.cancelStreamInputTts();
mAudioTrack.stop();
}
@@ -144,20 +145,16 @@ public class MainActivity extends FlutterActivity {
private String genTicket() {
String str = "";
try {
//获取账号访问凭证:
Auth.GetTicketMethod method = Auth.GetTicketMethod.GET_TOKEN_IN_CLIENT_FOR_ONLINE_FEATURES;
Auth.GetTicketMethod method = Auth.GetTicketMethod.GET_ACCESS_IN_CLIENT_FOR_ONLINE_FEATURES;
Auth.setAppKey(APP_KEY);
Auth.setToken(TOKEN);
Auth.setAccessKey(ACCESS_KEY);
Auth.setAccessKeySecret(ACCESS_KEY_SECRET);
Log.i(TAG, "Use method:" + method);
JSONObject object = Auth.getTicket(method);
if (!object.containsKey("token") && !object.containsKey("sts_token")) {
Log.e(TAG, "Cannot get token or sts_token!!!");
}
object.put("url", URL);
//过滤SDK内部日志通过回调送回到用户层
object.put("log_track_level", String.valueOf(Constants.LogLevel.toInt(Constants.LogLevel.LOG_LEVEL_INFO)));
str = object.toString();
} catch (JSONException e) {
e.printStackTrace();
@@ -166,15 +163,14 @@ public class MainActivity extends FlutterActivity {
return str;
}
private String genParameters() {
private String genParameters(boolean isChinese) {
String str = "";
try {
JSONObject object = new JSONObject();
object.put("enable_subtitle", true);
object.put("voice", "zhixiaoxia");
object.put("voice", isChinese ? "zhimiao_emo" : "beth");
object.put("format", "pcm");
object.put("sample_rate", 16000);
object.put("volume", 50);
object.put("volume", 100);
object.put("speech_rate", 0);
object.put("pitch_rate", 0);
str = object.toString();