2012-01-06 3 views
0

기본적으로 나는 TextToSpeech android에서 여전히 문제가있다. exlipse와 같은 구현 된 음성에 대해 한 번 두 번 버튼을 입력했다. implemetend OnClickListener, 버튼에 대한 맨 아래 액션을 꺼내더라도 게임을하고 싶지 않습니다. 왜요? idk 그냥 내 EditText 필드에 무엇을 말하고 싶지 않아 난 왜 그것을 원하지 않는 이유가없고 내가 여러 번 물었습니다하지만 난 그렇게 일한 대답 havent goten 누군가가 내게 무엇을 설명 할 수 잘못 나는 그것을 매우 고맙게 생각합니다. 고마워요.아직도 내 텍스트에 문제가있어 나에게 말하고 싶지 않다.

 package com.write.it; 

    import java.util.HashMap; 
    import java.util.StringTokenizer; 
    import android.app.Activity; 
    import android.content.Intent; 
    import android.os.Bundle; 
    import android.speech.tts.TextToSpeech; 
    import android.speech.tts.TextToSpeech.OnInitListener; 
    import android.speech.tts.TextToSpeech.OnUtteranceCompletedListener; 
    import android.util.Log; 
    import android.view.View; 
    import android.view.View.OnClickListener; 
     import android.widget.Button; 
    import android.widget.EditText; 

    public class Speech extends Activity implements OnInitListener, OnUtteranceCompletedListener, OnClickListener { 
private EditText words = null; 
private Button speakBtn = null; 
private static final int REQ_TTS_STATUS_CHECK = 0; 
private static final String TAG = "TTS Demo"; 
private TextToSpeech mTts; 

private int uttCount = 0; 
private HashMap<String, String> params = new HashMap<String, String>(); 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    words = (EditText)findViewById(R.id.wordsToSpeak); 
    speakBtn = (Button)findViewById(R.id.speak); 



    // Check to be sure that TTS exists and is okay to use 
    Intent checkIntent = new Intent(); 
    checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA); 
    startActivityForResult(checkIntent, REQ_TTS_STATUS_CHECK); 
} 



public void doSpeak(View view) { 
    StringTokenizer st = new StringTokenizer(words.getText().toString(),",."); 
    while (st.hasMoreTokens()) { 
     params.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, 
       String.valueOf(uttCount++)); 
     mTts.speak(st.nextToken(), TextToSpeech.QUEUE_ADD, params); 
    } 

    speakBtn.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View v) { 
      switch (v.getId()) { 
      case R.id.speak: 
       doSpeak(v); 
       break; 
      } 
     } 
}); 



} 

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == REQ_TTS_STATUS_CHECK) { 
     switch (resultCode) { 
     case TextToSpeech.Engine.CHECK_VOICE_DATA_PASS: 
      // TTS is up and running 
      mTts = new TextToSpeech(this, this); 
      Log.v(TAG, "Pico is installed okay"); 
      break; 
     case TextToSpeech.Engine.CHECK_VOICE_DATA_BAD_DATA: 
     case TextToSpeech.Engine.CHECK_VOICE_DATA_MISSING_DATA: 
     case TextToSpeech.Engine.CHECK_VOICE_DATA_MISSING_VOLUME: 
      // missing data, install it 
      Log.v(TAG, "Need language stuff: " + resultCode); 
      Intent installIntent = new Intent(); 
      installIntent.setAction(
       TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA); 
      startActivity(installIntent); 
      break; 
     case TextToSpeech.Engine.CHECK_VOICE_DATA_FAIL: 
     default: 
      Log.e(TAG, "Got a failure. TTS not available"); 
     } 
    } 
    else { 
     // Got something else 
    } 
} 

public void onInit(int status) { 
    // Now that the TTS engine is ready, we enable the button 
    if(status == TextToSpeech.SUCCESS) { 
     mTts.setOnUtteranceCompletedListener(this); 
     speakBtn.setEnabled(true); 
    } 
} 

@Override 
public void onPause() 
{ 
    super.onPause(); 
    // if we're losing focus, stop talking 
    if(mTts != null) 
     mTts.stop(); 
} 

@Override 
public void onDestroy() 
{ 
    super.onDestroy(); 
    mTts.shutdown(); 
} 

public void onUtteranceCompleted(String uttId) { 
    Log.v(TAG, "Got completed message for uttId: " + uttId); 
    Integer.parseInt(uttId); 
} 

public void onClick(View v) { 
    // TODO Auto-generated method stub 
    switch (v.getId()) { 
    case R.id.speak: 
     doSpeak(v); 
     break; 
    } 
} 
} 

답변

0

하나의 메소드 호출로 텍스트를 말하기를 시도 했습니까? 이처럼

mTts.speak(aString, TextToSpeech.QUEUE_ADD, null); 

잘 작동합니다. 내가 사용하는 초기화 작업은 사용자 작업과 동일합니다. 유일한 차이점은 다음과 같습니다 (TTS를 작동시킬 필요가 없습니다) :

 this.speaker.setSpeechRate(0.9f); 
     this.speaker.setPitch(0.9f); 
+0

ok 메신저 해 주셔서 감사합니다. 답변을 주셔서 감사 드리며 작동하는지 알려 드리겠습니다. –

+0

이 mTts.speak을 doSpeal() 메서드에 추가했습니다. 올바른 영역인지 확인하고 싶었습니까? 그리고 그것은 아직도 일을 didnt한다. .. 나는 정말로 무엇이 계속하고 있는지에 관해 안다. .. –