2009-07-21 5 views

답변

0

타사 텍스트 음성 변환 엔진이 있습니다

나는 이런 식으로 뭔가를 할 수있는 API가 있습니다. 소문에 의하면 도넛에는 TTS (텍스트 음성 변환) 엔진이 포함되어있어 향후 Android 버전에서 사용할 수 있다고합니다. 그 외에도, 텍스트 음성 변환을 위해 Android에는 아무 것도 내장되어 있지 않습니다.

+1

1.6이 있기 때문에 이것은 더 이상 true가 아닙니다. – gregm

0

도넛은 이것을 가지고 있습니다 : android.speech.tts 패키지를보십시오.

3

TTS를 사용하는 것은 예상보다 조금 복잡하지만 원하는 API를 제공하는 래퍼를 작성하는 것은 쉽습니다.

제대로 작동하려면 여러 가지 문제가 있습니다.

그들은 다음과 같습니다

  1. 항상 (OnUtteranceCompleted이 가 호출되지 않거나 다른 )을 UtteranceId
  2. 설정 (연설 시스템이 제대로 초기화 후에 만)
청취자를 OnUtteranceCompleted 설정

public class TextSpeakerDemo implements OnInitListener 
{ 
    private TextToSpeech tts; 
    private Activity activity; 

    private static HashMap DUMMY_PARAMS = new HashMap(); 
    static 
    { 
     DUMMY_PARAMS.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "theUtId"); 
    } 
    private ReentrantLock waitForInitLock = new ReentrantLock(); 

    public TextSpeakerDemo(Activity parentActivity) 
    { 
     activity = parentActivity; 
     tts = new TextToSpeech(activity, this);  
     //don't do speak until initing 
     waitForInitLock.lock(); 
    } 

    public void onInit(int version) 
    {  //unlock it so that speech will happen 
     waitForInitLock.unlock(); 
    } 

    public void say(WhatToSay say) 
    { 
     say(say.toString()); 
    } 

    public void say(String say) 
    { 
     tts.speak(say, TextToSpeech.QUEUE_FLUSH, null); 
    } 

    public void say(String say, OnUtteranceCompletedListener whenTextDone) 
    { 
     if (waitForInitLock.isLocked()) 
     { 
      try 
      { 
       waitForInitLock.tryLock(180, TimeUnit.SECONDS); 
      } 
      catch (InterruptedException e) 
      { 
       Log.e("speaker", "interruped"); 
      } 
      //unlock it here so that it is never locked again 
      waitForInitLock.unlock(); 
     } 

     int result = tts.setOnUtteranceCompletedListener(whenTextDone); 
     if (result == TextToSpeech.ERROR) 
     { 
      Log.e("speaker", "failed to add utterance listener"); 
     } 
     //note: here pass in the dummy params so onUtteranceCompleted gets called 
     tts.speak(say, TextToSpeech.QUEUE_FLUSH, DUMMY_PARAMS); 
    } 

    /** 
    * make sure to call this at the end 
    */ 
    public void done() 
    { 
     tts.shutdown(); 
    } 
} 
1

좋은 사용 예는 다음과 같습니다. "프로 안드로이드 2 도서"에서 찾을 수 있습니다. 15 장의 소스 코드를 살펴보십시오.

관련 문제