Enable to stop TTS generation (#1041)

This commit is contained in:
Fangjun Kuang
2024-06-22 18:18:36 +08:00
committed by GitHub
parent 96ab843173
commit 9dd0e03568
32 changed files with 249 additions and 70 deletions

View File

@@ -186,14 +186,42 @@ Java_com_k2fsa_sherpa_onnx_OfflineTts_generateWithCallbackImpl(
const char *p_text = env->GetStringUTFChars(text, nullptr);
SHERPA_ONNX_LOGE("string is: %s", p_text);
std::function<void(const float *, int32_t, float)> callback_wrapper =
std::function<int32_t(const float *, int32_t, float)> callback_wrapper =
[env, callback](const float *samples, int32_t n, float /*progress*/) {
jclass cls = env->GetObjectClass(callback);
jmethodID mid = env->GetMethodID(cls, "invoke", "([F)V");
#if 0
// this block is for debugging only
// see also
// https://jnjosh.com/posts/kotlinfromcpp/
jmethodID classMethodId =
env->GetMethodID(cls, "getClass", "()Ljava/lang/Class;");
jobject klassObj = env->CallObjectMethod(callback, classMethodId);
auto klassObject = env->GetObjectClass(klassObj);
auto nameMethodId =
env->GetMethodID(klassObject, "getName", "()Ljava/lang/String;");
jstring classString =
(jstring)env->CallObjectMethod(klassObj, nameMethodId);
auto className = env->GetStringUTFChars(classString, NULL);
SHERPA_ONNX_LOGE("name is: %s", className);
env->ReleaseStringUTFChars(classString, className);
#endif
jmethodID mid =
env->GetMethodID(cls, "invoke", "([F)Ljava/lang/Integer;");
if (mid == nullptr) {
SHERPA_ONNX_LOGE("Failed to get the callback. Ignore it.");
return 1;
}
jfloatArray samples_arr = env->NewFloatArray(n);
env->SetFloatArrayRegion(samples_arr, 0, n, samples);
env->CallVoidMethod(callback, mid, samples_arr);
jobject should_continue =
env->CallObjectMethod(callback, mid, samples_arr);
jclass jklass = env->GetObjectClass(should_continue);
jmethodID int_value_mid = env->GetMethodID(jklass, "intValue", "()I");
return env->CallIntMethod(should_continue, int_value_mid);
};
auto audio = reinterpret_cast<sherpa_onnx::OfflineTts *>(ptr)->Generate(