제 3 자 tts 인 flite를 사용하는 응용 프로그램을 개발 중입니다. 나는 tts가 문장을 말하는 것과 같은 것을하고있다. 내가 말한대로 각 단어를 강조하고 싶다. 이를 위해 나는 TTS로부터 단어 수준의 콜백을 얻을 수 있었다. 워크 플로우는 다음과 같습니다 - "말하기 텍스트"버튼이 눌려졌습니다. tt 서비스를 시작한 다음 C 언어로 된 flite tts로 텍스트를 보내고 응용 프로그램과 결합되었습니다. 이제 C 코드에서 모든 단어가 끝난 후 두 가지 다른 Java 활동에 두 번의 콜백을 수행합니다. 하나를 tts 서비스에 연결하여 단어를 강조 표시하기 위해 내 테스트 Java 활동에 두 번째로 단어 을 말하십시오. 테스트 활동에서 단어 수준의 콜백을 성공적으로 받고 있지만 이후 UI 작업을 수행 할 수 없습니다.android runonuithread() 함수가 실행되지 않습니다
다음은 콜백을받을 때 실행되는 코드입니다. 이것은 C 코드에서 호출되는 함수입니다.
private void WordCallback(int isword) {// from
// callback
if (isword == -1) {
Log.d(LOG_TAG, "its not a word");
} else if (isword == -2) {
Log.d(LOG_TAG, "yeah..its the end");
} else {
Log.d(LOG_TAG, "its word no " + isword);
int word = isword;
Log.d(LOG_TAG, "highlightwords");
highlightwords(isword);
if (isword == 4) {
Log.d(LOG_TAG, "in if");
new Thread(new Runnable() {
@Override
public void run() {
Log.d(LOG_TAG, "thread started");
try {
Flitetest.this.runOnUiThread(new Runnable() {
@Override
public void run() {
Log.d(LOG_TAG, "run on ui");
textview.setText("#" + isword);
}
});
Thread.sleep(300);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}
}
}
FliteTest는 활동 이름입니다. 로그는 "스레드 시작"까지 인쇄되지만 runonuithread() 안의 코드는 실행되지 않으며 오류도 없습니다.
fatal signal 11(sigsegv) at 0x6fc64e87(code=1), thread 20292(SynthThread)
:
또한, 경우에하는 스레드와 runonuithread()없이 textview.settext("something")
쓰기, 그것은 오류를 제공합니다.
그 이유는 무엇입니까? 안드로이드 ICS (4.0+)
에
이 문제가 어떻게 해결 될지 설명해 주시겠습니까? –