2012-03-12 6 views
4

내 활동에서 안드로이드의 음성 기술에 텍스트를 구현하려고하지만 이상한 오류가 있습니다. 내 코드에서 아무 소리도들을 수 없다. speak 메서드는 onInit 메서드에 넣을 때만 작동합니다. 그렇지 않으면 말할 수 없습니다. 다음과 같이Android TTS는 말하지 않습니다

내 코드는 다음과 같습니다

public class GameOverActivity extends Activity implements OnInitListener { 
private TextToSpeech talker; 
.... 
talker = new TextToSpeech(this, this); 
say("Something",false); 
... 
    public void onInit(int status) { 
     if (status == TextToSpeech.SUCCESS) { 
      talker.setLanguage(Locale.US); 
     } 
     else if (status == TextToSpeech.ERROR) { 
      Toast.makeText(this,"Error occurred while initializing Text-To-Speech engine", Toast.LENGTH_LONG).show(); 
     } 

void say(String text, boolean flush) { 
     if(flush == true) 
     { 
     talker.speak(text,TextToSpeech.QUEUE_FLUSH,null); 
     } 
     if(flush == false) 
     { 
     talker.speak(text,TextToSpeech.QUEUE_ADD,null); 
     }   
    } 

이상한 것은 내가의 onInit의 말 방법을 배치하면, 그것은 잘 작동한다는 것입니다! TTS는 AudioTrack이 EN-US succusfully 설정 음성 속도 100

에로드 TTSService.setLanguage 을 시작로드)

TtsService.OnCreate (:

나는 결과입니다 로그 캣 신중하고 여기에 감시 그런 다음 아무 일도 일어나지 않습니다.

위의 코드가 잘못된 이유는 무엇입니까?

미리 감사드립니다.

+0

초기화를 시작할 때 flush 값은 무엇입니까? – Brian

+0

진실 또는 거짓으로 만들면 아무런 차이가 없습니다. – Nick

답변

10

코드를 살펴본 후 TTS 엔진 초기화에 약간의 시간이 걸리는 것으로 나타났습니다. 초기화가 끝나지 않으면 말하기 메서드 호출이 실패합니다.

버튼을 클릭 할 때 "말하십시오"라고 말하면 버튼을 누르기 전에 생각할 시간이 필요하고 초기화가 끝나기 때문에 버튼 클릭에 대해 "말하십시오"라고 말하면 아마도 필요하지 않을 것입니다.

당신이 뭔가 빨리, 완료를 경우 초기화 코드를 사용 "말"하려면 : 당신이 당신의 주요 활동에서 TextToSpeech.OnInitListener을 구현하는 것이 좋습니다

talker = new TextToSpeech(this, new TextToSpeech.OnInitListener() { 

     @Override 
     public void onInit(int arg0) { 
     if(arg0 == TextToSpeech.SUCCESS) 
      { 
     talker.setLanguage(Locale.US); 
      say(gameover,true); 
      say(line,false); 
      say(definition_string,false); 
      } 
     } 
    }); 
0

내가 Text-To-Speech에서 한 가지 문제는 SD 카드에 설치하면 USB가 연결되었을 때 작동하지 않는다는 것입니다. 따라서 USB에서 테스트 장치의 플러그를 뽑아보고 문제가 해결되는지 확인하십시오.

시도해 볼 수있는 또 다른 방법은 프로그램을 단계별로 실행하고 실수로 텍스트 음성 변환 개체를 변경하고 있는지 확인하는 것입니다. 코드의 말하기 부분에 중단 점을 설정하고 대화자 객체의 모든 변수를 살펴보십시오.

3

합니다. 내가 페르시아어에 대한 의미하지 않는다 (가끔 삼성 폰의 기본 TTS 엔진은 페르시아어와 같은 일부 언어에서 작동하지 않는 SAMSUNG 엔진입니다, 당신의 TTS 엔진을 수이

public class GameOverActivity extends Activity implements TextToSpeech.OnInitListener { 

@Override 
public void onInit(int status) { 
    if (status == TextToSpeech.SUCCESS) { 

     int result = mTts.setLanguage(Locale.US); 
     // Try this someday for some interesting results. 
     // int result mTts.setLanguage(Locale.FRANCE); 
     if (result == TextToSpeech.LANG_MISSING_DATA || 
       result == TextToSpeech.LANG_NOT_SUPPORTED) { 
      // Lanuage data is missing or the language is not supported. 
      //Log.e(TAG, "Language is not available."); 
     } else { 
      // Check the documentation for other possible result codes. 
      // For example, the language may be available for the locale, 
      // but not for the specified country and variant. 

      // The TTS engine has been successfully initialized. 
      // Allow the user to press the button for the app to speak again. 
      // mAgainButton.setEnabled(true); 
      // Greet the user. 
      //sayHello(); 
     } 
    } else { 
     // Initialization failed. 

    } 

} 

private TextToSpeech mTts; 
} 
0

이 문제의 음 다른 원인을 시도 텍스트, 영어 텍스트를 읽으려고해도 여전히 작동하지 않습니다. 이상합니다.하지만 일어납니다.) 이를 해결하려면 코드에 TTS 엔진을 설정하거나 (수동으로 Setting -> Language input -> Text to speech -> Google Text-to-speech을 선택하십시오)

관련 문제