[update] use aliyun andriod sdk
This commit is contained in:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user