2011-03-05 12 views
3

私はアンドロイド用のTTSアプリケーションを実装しようとしています。ここで私はこれまでに書いたコードされていますAndroid - TTS音声が出ない

import android.app.Activity; 
import android.content.Intent; 
import android.view.View.OnClickListener; 
import android.os.Bundle; 
import android.speech.tts.TextToSpeech; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 
import java.util.Locale; 

public class AlarmActivity extends Activity implements OnClickListener, TextToSpeech.OnInitListener { 

    private TextToSpeech mTts; 
    private static final String TAG = "TextToSpeechDemo"; 
    private static final int MY_DATA_CHECK_CODE = 1234; 
    @Override 
    public void onCreate(Bundle icicle) { 
     super.onCreate(icicle); 
     setContentView(R.layout.alarm); 

     Button btnAdd = (Button) findViewById(R.id.btnAdd); 
     btnAdd.setOnClickListener(this); 
     btnAdd.setEnabled(false); 

     TextView txt = (TextView) findViewById(R.id.txt); 
     txt.setText("OnCreate"); 

     // Fire off an intent to check if a TTS engine is installed 
     Intent checkIntent = new Intent(); 
     checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA); 
     startActivityForResult(checkIntent, MY_DATA_CHECK_CODE); 
    } 
    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) 
    { 
     TextView txt = (TextView) findViewById(R.id.txt); 
     if (requestCode == MY_DATA_CHECK_CODE) 
     { 
      if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) 
      { 
       // success, create the TTS instance 
       txt.setText("Done result"); 
       mTts = new TextToSpeech(this, this); 
       mTts.setLanguage(Locale.US); 
       Button btnAdd = (Button) findViewById(R.id.btnAdd); 
       btnAdd.setEnabled(true); 

      } 
      else 
      { 
       txt.setText("Missing"); 
       // missing data, install it 
       Intent installIntent = new Intent(); 
       installIntent.setAction(
         TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA); 
       startActivity(installIntent); 
      } 
     } 
    } 

    @Override 
    public void onDestroy() 
    { 
     // Don't forget to shutdown! 
     if (mTts != null) 
     { 
      mTts.stop(); 
      mTts.shutdown(); 
     } 
     super.onDestroy(); 
    } 

    @Override 
    public void onClick(View v) { 

     TextView txt = (TextView) findViewById(R.id.txt); 
       txt.setText("Click"); 

     String myText1 = "Did you sleep well?"; 
     String myText2 = "I hope so, because it's time to wake up."; 
     mTts.speak(myText1, TextToSpeech.QUEUE_FLUSH, null); 
     mTts.speak(myText2, TextToSpeech.QUEUE_ADD, null); 
    } 
    @Override 
    public void onInit(int status) { 
     TextView txt = (TextView) findViewById(R.id.txt); 
     txt.setText("status 0"); 
     if (status == TextToSpeech.SUCCESS) { 
       txt.setText("status 1"); 
      int result = mTts.setLanguage(Locale.US); 
      if (result == TextToSpeech.LANG_MISSING_DATA || 
       result == TextToSpeech.LANG_NOT_SUPPORTED) { 
       txt.setText("status 2"); 
      } else { 
       Button btnAdd = (Button) findViewById(R.id.btnAdd); 
       btnAdd.setEnabled(true); 
       txt.setText("status 3"); 
      } 
      } else { 
      txt.setText("status 4"); 
      Log.e(TAG, "Could not initialize TextToSpeech."); 
     } 
    } 
} 

マイレイアウトを:

13:08:41.314 163 INFO ActivityManager Starting activity: Intent { act=android.speech.tts.engine.CHECK_TTS_DATA cmp=com.svox.pico/.CheckVoiceData } 
13:08:41.504 163 INFO ActivityManager Displayed activity org.me.talkingdroid/.MainActivity: 2790 ms (total 2790 ms) 
13:08:41.544 163 WARN ActivityManager Binding with unknown activity: [email protected] 
13:08:41.634 264 DEBUG [ScrollKPI] drawScreenCache takes 222ms, drawThumbnailCache takes 106ms 
13:08:43.214 163 VERBOSE KeyInputQueue Enqueueing: MotionEvent{470684e0 action=0 x=310.26947 y=438.86896 pressure=0.15294118 size=0.13333334} 
13:08:43.214 163 INFO WindowManager dispatchPointer MotionEvent{470684e0 action=0 x=310.26947 y=438.86896 pressure=0.15294118 size=0.13333334} 
13:08:43.214 163 INFO WindowManager Delivering pointer QueuedEvent{470bdcb8 MotionEvent{470684e0 action=0 x=310.26947 y=438.86896 pressure=0.15294118 size=0.13333334}} to Window{46e0c640 org.me.talkingdroid/org.me.talkingdroid.MainActivity paused=false} 
13:08:43.264 163 VERBOSE KeyInputQueue Enqueueing: MotionEvent{470684e0 action=1 x=310.26947 y=438.86896 pressure=0.15294118 size=0.13333334} 
13:08:43.264 163 INFO WindowManager dispatchPointer MotionEvent{470684e0 action=1 x=310.26947 y=438.86896 pressure=0.15294118 size=0.13333334} 
13:08:43.264 163 INFO WindowManager Delivering pointer QueuedEvent{46f34300 MotionEvent{470684e0 action=1 x=310.26947 y=438.86896 pressure=0.15294118 size=0.13333334}} to Window{46e0c640 org.me.talkingdroid/org.me.talkingdroid.MainActivity paused=false} 
13:08:43.284 10637 INFO TTS received: Did you sleep well? 
13:08:43.284 10637 INFO TTS received: I hope so, because it's time to wake up. 
13:08:46.714 10038 DEBUG dalvikvm GC_EXPLICIT freed 417 objects/26192 bytes in 82ms 
13:08:47.994 10637 DEBUG dalvikvm Debugger has detached; object registry had 398 entries 

テキストことそれは明らかだ:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:padding="5dp"> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Alarms" 
     android:id="@+id/txt" /> 
    <Button android:id="@+id/btnAdd" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:layout_weight="1" 
       android:text="Say" /> 
</LinearLayout> 

NetBeansのADBでは、私は次のことを見ることができるログ出力しようとしているが、ログから送信されますが、私は何も私の携帯電話から出てくるのを聞くことができます。何が問題なの?

+0

SpeechSynthesis Dataインストーラが正しくインストールされないことが判明しました。それには理由がありますか? – Maverick

答えて

3

携帯電話がUSBデバッグモードでコンピュータに接続されたため、このようなことが起こったようです。無効にすると、TTSは完全に機能します!

1

あなたのコードは、android docのようなものです。私はこのデモコードを書きました。あなたがrequestCoderesultCodeに置き換えると、それはうまくいくと私は信じています。 if (requestCode == MY_DATA_CHECK_CODE) これは私のコードです:

public class TTS_demoActivity extends Activity implements OnClickListener,OnInitListener { 
private EditText mContent; 
private Button mSpeak; 
private String mTemp; 
private static final int REQ_TTS_STATUS_CHECK = 1; 
private static final String TAG = "TTS Demo"; 
private TextToSpeech mTts; 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    mContent = (EditText) findViewById(R.id.etcontent); 
    mSpeak = (Button) findViewById(R.id.btnspeak); 
    mSpeak.setOnClickListener(this); 
    init(); 
} 
/* 
* 初始化方法检测TTS所需要的数据是否存在 
*/ 
private void init() { 
    Intent mCheckIntent=new Intent(); 
    mCheckIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA); 
    startActivityForResult(mCheckIntent, REQ_TTS_STATUS_CHECK); 

} 
/* 
* 对检测结果进行分类处理 
*/ 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if(requestCode==REQ_TTS_STATUS_CHECK) 
    { 
     switch (resultCode) { 
     case TextToSpeech.Engine.CHECK_VOICE_DATA_PASS: 
      mTts = new TextToSpeech(this, this); 
      Log.v(TAG, "tts engine is instance"); 
      break; 
     case TextToSpeech.Engine.CHECK_VOICE_DATA_BAD_DATA: 
      //文件已经损坏 
     case TextToSpeech.Engine.CHECK_VOICE_DATA_MISSING_VOLUME: 
      //缺少发音文件 
     case TextToSpeech.Engine.CHECK_VOICE_DATA_MISSING_DATA: 
      //数据文件丢失 

      //从新更新TTS数据文件 
      Intent mUpdateData=new Intent(); 
      mUpdateData.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA); 
      startActivity(mUpdateData); 

      break; 

     case TextToSpeech.Engine.CHECK_VOICE_DATA_FAIL: 
      //检测失败应该重新检测 
      Log.v(TAG, "TTS engine checked fail"); 
      break; 
     default: 
      Log.v(TAG, "Got a failure. TTS apparently not available"); 
      break; 
     } 

    } 

} 

@Override 
public void onInit(int status) { 
    if(status==TextToSpeech.SUCCESS){ 
     int result=mTts.setLanguage(Locale.US); 
     if(result==TextToSpeech.LANG_NOT_SUPPORTED||result==TextToSpeech.LANG_MISSING_DATA) 
     { 
      Log.v(TAG, "language is not available"); 

     }else{ 
      mTts.speak("start complete", TextToSpeech.QUEUE_ADD, null); 
      mSpeak.setEnabled(true); 
     } 

    } 

} 

@Override 
public void onClick(View arg0) { 
    mTemp= mContent.getText().toString(); 
    if(mTemp!=""||mTemp.trim()!=""){ 
    mTts.speak(mTemp, TextToSpeech.QUEUE_ADD,null); 
    } 
} 

@Override 
protected void onDestroy() { 
    super.onDestroy(); 
    if(mTts!=null){ 
     mTts.shutdown(); 
    } 
} 

@Override 
protected void onStop() { 
    super.onStop(); 
    if(mTts!=null){ 
     mTts.stop(); 
    } 
} 
@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
    this.finish(); 
} 
} 
1

このスレッド、音声合成データインストーラでの問題を指します。私の問題は、正しく実行されたTTSプログラム(これに似ています)の'no sound'でした。私の場合はSpeechSynthesisデータがタブレットにインストールされていないためでした。 これを私のタブレットにインストールした後、プログラムはデバッグモードでもケーブルが接続されていても機能しました。

私はTTSで新しい人たちのために、私がAndroid 4.0.4で音声合成データをインストールするために行ったことを以下に述べました。それらは他のバージョンでは異なるかもしれませんが、似ているはずです。

スタート「Settings'- 選択:」 設定>言語と入力>テキスト音声合成出力「 その後、下の 『優先エンジン、SELECT』 Googleテキスト読み上げエンジン」そのオプションのRHSにある「セットアップ」シンボルをクリックします。 これは、3つの選択肢を示しています。まず、最終的には、その後*の「Google TTSのための設定」(2)を選択し、「自動更新の声」と「利用のWi-Fiのみ」をチェックし(1)「言語」を選択します選択(3)'音声データのインストール'; (データをダウンロードするにはWi-Fiが有効になっている必要があります)

私はタブーのTTS 。私はそれが必ずしも問題であるコードではないことも学びました。

設定 - >言語と入力 - >言語:

0

私はそれを動作させるために電話で音声にテキストによってサポートされているものに私のデフォルトの言語を変更しなければなりませんでした。

サポート:英語(イギリス)&英語(米国)。
サポートされていません:英語(IE)。