2010-06-17 6 views
39

Ich bin neu auf der Android-Plattform. Jetzt arbeite ich an TTS(Text to Speech). Wenn ich den Text in einem TextArea eingeben und ich möchte, dass es in Sprache konvertiert wird, wenn ich auf die Schaltfläche "Sprechen" klicke.Text zu Sprache (TTS) -Android

Kann mir jemand helfen?

Antwort

65

Text zu Sprache ist in Android 1.6+ integriert. Hier ist ein einfaches Beispiel, wie es gemacht wird.

TextToSpeech tts = new TextToSpeech(this, this); 
tts.setLanguage(Locale.US); 
tts.speak("Text to say aloud", TextToSpeech.QUEUE_ADD, null); 

Weitere Informationen: http://android-developers.blogspot.com/2009/09/introduction-to-text-to-speech-in.html


Here are instructions, wie Beispielcode aus dem Android SDK-Manager zum Download:

  1. Starten Sie das Android SDK-Manager.

    a. Doppelklicken Sie unter Windows auf die Datei SDK Manager.exe im Stammverzeichnis des Android SDK-Verzeichnisses.

    b. Öffnen Sie unter Mac oder Linux ein Terminal für das Verzeichnis tools/im Android SDK, und führen Sie dann android sdk aus.

  2. Erweitern Sie die Liste der Pakete für die neueste Android-Plattform.

  3. Wählen und laden Sie Samples für SDK. Wenn der Download abgeschlossen ist, können Sie den Quellcode für alle Proben an diesem Ort finden:

/sdk/samples/Android-Version/

(i.e. \android-sdk-windows\samples\android-16\ApiDemos\src\com\example\android\apis\app\TextToSpeechActivity.java) 
+0

+1 Für den besten Ansatz für jede Plattform Version Hinweis. Die Beispiele für SDK. – Milton

+4

Ich bekomme ein 'sprechen' ist im Moment veraltet – msysmilu

+1

es ist, weil das, das nicht veraltet ist:' sprechen (CharSequence Text, int QueueMode, Bundle-Parameter, String ÄußerungId) ' – msysmilu

34
package com.example.texttospeech; 

import java.util.Locale; 

import android.os.Bundle; 
import android.app.Activity; 
import android.content.SharedPreferences.Editor; 
import android.speech.tts.TextToSpeech; 
import android.util.Log; 
import android.view.Menu; 
import android.view.View; 
import android.widget.EditText; 

public class MainActivity extends Activity { 

    String text; 
    EditText et; 
    TextToSpeech tts; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     et=(EditText)findViewById(R.id.editText1); 
     tts=new TextToSpeech(MainActivity.this, new TextToSpeech.OnInitListener() { 

      @Override 
      public void onInit(int status) { 
       // TODO Auto-generated method stub 
       if(status == TextToSpeech.SUCCESS){ 
        int result=tts.setLanguage(Locale.US); 
        if(result==TextToSpeech.LANG_MISSING_DATA || 
          result==TextToSpeech.LANG_NOT_SUPPORTED){ 
         Log.e("error", "This Language is not supported"); 
        } 
        else{ 
         ConvertTextToSpeech(); 
        } 
       } 
       else 
        Log.e("error", "Initilization Failed!"); 
      } 
     }); 


    } 

    @Override 
    protected void onPause() { 
     // TODO Auto-generated method stub 

     if(tts != null){ 

      tts.stop(); 
      tts.shutdown(); 
     } 
     super.onPause(); 
    } 

    public void onClick(View v){ 

     ConvertTextToSpeech(); 

    } 

    private void ConvertTextToSpeech() { 
     // TODO Auto-generated method stub 
     text = et.getText().toString(); 
     if(text==null||"".equals(text)) 
     { 
      text = "Content not available"; 
      tts.speak(text, TextToSpeech.QUEUE_FLUSH, null); 
     }else 
      tts.speak(text+"is saved", TextToSpeech.QUEUE_FLUSH, null); 
    } 

} 



<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context=".MainActivity" > 

    <Button 
     android:id="@+id/button1" 
     style="?android:attr/buttonStyleSmall" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="177dp" 
     android:onClick="onClick" 
     android:text="Button" /> 

    <EditText 
     android:id="@+id/editText1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignBottom="@+id/button1" 
     android:layout_centerHorizontal="true" 
     android:layout_marginBottom="81dp" 
     android:ems="10" > 

     <requestFocus /> 
    </EditText> 

</RelativeLayout> 
+1

Dies ist ein vollständigeres Beispiel. Es enthält die Implementierung von TextToSpeech.OnInitListener, die in der akzeptierten Antwort fehlt. Tolles Zeug! +1 – Yster

1
public class Texttovoice extends ActionBarActivity implements OnInitListener { 
private TextToSpeech tts; 
private Button btnSpeak; 
private EditText txtText; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_texttovoice); 
    tts = new TextToSpeech(this, this); 

    // Refer 'Speak' button 
    btnSpeak = (Button) findViewById(R.id.btnSpeak); 
    // Refer 'Text' control 
    txtText = (EditText) findViewById(R.id.txtText); 
    // Handle onClick event for button 'Speak' 
    btnSpeak.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View arg0) { 
      // Method yet to be defined 
      speakOut(); 
     } 

    }); 

} 

private void speakOut() { 
    // Get the text typed 
    String text = txtText.getText().toString(); 
    // If no text is typed, tts will read out 'You haven't typed text' 
    // else it reads out the text you typed 
    if (text.length() == 0) { 
     tts.speak("You haven't typed text", TextToSpeech.QUEUE_FLUSH, null); 
    } else { 
     tts.speak(text, TextToSpeech.QUEUE_FLUSH, null); 

    } 

} 

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

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.texttovoice, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 
    if (id == R.id.action_settings) { 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 

public void onInit(int status) { 
    // TODO Auto-generated method stub 
    // TTS is successfully initialized 
    if (status == TextToSpeech.SUCCESS) { 
     // Setting speech language 
     int result = tts.setLanguage(Locale.US); 
     // If your device doesn't support language you set above 
     if (result == TextToSpeech.LANG_MISSING_DATA 
       || result == TextToSpeech.LANG_NOT_SUPPORTED) { 
      // Cook simple toast message with message 
      Toast.makeText(getApplicationContext(), "Language not supported", 
        Toast.LENGTH_LONG).show(); 
      Log.e("TTS", "Language is not supported"); 
     } 
     // Enable the button - It was disabled in main.xml (Go back and 
     // Check it) 
     else { 
      btnSpeak.setEnabled(true); 
     } 
     // TTS is not initialized properly 
    } else { 
     Toast.makeText(this, "TTS Initilization Failed", Toast.LENGTH_LONG) 
       .show(); 
     Log.e("TTS", "Initilization Failed"); 
    } 
} 
    //-------------------------------XML--------------- 

    <?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:background="#ffffff" 
android:orientation="vertical" 
tools:ignore="HardcodedText" > 

    <TextView 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:gravity="center" 
    android:padding="15dip" 
    android:text="listen your text" 
    android:textColor="#0587d9" 
    android:textSize="26dip" 
    android:textStyle="bold" /> 

<EditText 
    android:id="@+id/txtText" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_margin="10dip" 
    android:layout_marginTop="20dip" 
    android:hint="Enter text to speak" /> 

<Button 
    android:id="@+id/btnSpeak" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_margin="10dip" 
    android:enabled="false" 
    android:text="Speak" 
    android:onClick="speakout"/> 

2

Versuchen Sie dies, es ist einfach: ** speakout.xml: **

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="#3498db" 
android:weightSum="1" 
android:orientation="vertical" > 
<TextView 
android:id="@+id/txtheader" 
android:layout_width="match_parent" 
android:layout_height="0dp" 
android:layout_gravity="center" 
android:layout_weight=".1" 
android:gravity="center" 
android:padding="3dp" 
android:text="Speak Out!!!" 
android:textColor="#fff" 
android:textSize="25sp" 
android:textStyle="bold" /> 
<EditText 
android:id="@+id/edtTexttoSpeak" 
android:layout_width="match_parent" 
android:layout_weight=".5" 
android:background="#fff" 
android:textColor="#2c3e50" 
android:text="Hi there!!!" 
android:padding="5dp" 
android:gravity="top|left" 
android:layout_height="0dp"/> 
<Button 
android:id="@+id/btnspeakout" 
android:layout_width="match_parent" 
android:layout_height="0dp" 
android:layout_weight=".1" 
android:background="#e74c3c" 
android:textColor="#fff" 
android:text="SPEAK OUT"/> 
</LinearLayout> 

und Ihre SpeakOut.java:

import android.app.Activity; 
import android.os.Bundle; 
import android.speech.tts.TextToSpeech; 
import android.speech.tts.TextToSpeech.OnInitListener; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
public class SpeakOut extends Activity implements OnInitListener { 
private TextToSpeech repeatTTS; 
Button btnspeakout; 
EditText edtTexttoSpeak; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.speakout); 
btnspeakout = (Button) findViewById(R.id.btnspeakout); 
edtTexttoSpeak = (EditText) findViewById(R.id.edtTexttoSpeak); 
repeatTTS = new TextToSpeech(this, this); 
btnspeakout.setOnClickListener(new View.OnClickListener() { 
@Override 
public void onClick(View v) { 
repeatTTS.speak(edtTexttoSpeak.getText().toString(), 
TextToSpeech.QUEUE_FLUSH, null); 
} 
}); 
} 
@Override 
public void onInit(int arg0) { 
// TODO Auto-generated method stub 
} 
} 

SOURCE Parallelcodes.com's Post

0

https://drive.google.com/open?id=0BzBKpZ4nzNzUR05nVUI1aVF6N1k

package com.keshav.speechtotextexample; 

import java.util.ArrayList; 
import java.util.Locale; 

import android.app.Activity; 
import android.content.ActivityNotFoundException; 
import android.content.Intent; 
import android.os.Bundle; 
import android.speech.RecognizerIntent; 
import android.view.Menu; 
import android.view.View; 
import android.widget.ImageButton; 
import android.widget.TextView; 
import android.widget.Toast; 

public class MainActivity extends Activity { 

    private TextView txtSpeechInput; 
    private ImageButton btnSpeak; 
    private final int REQ_CODE_SPEECH_INPUT = 100; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     txtSpeechInput = (TextView) findViewById(R.id.txtSpeechInput); 
     btnSpeak = (ImageButton) findViewById(R.id.btnSpeak); 

     // hide the action bar 
     getActionBar().hide(); 

     btnSpeak.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      promptSpeechInput(); 
     } 
     }); 

    } 

    /** 
    * Showing google speech input dialog 
    * */ 
    private void promptSpeechInput() { 
     Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 
     intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, 
      RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); 
     intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault()); 
     intent.putExtra(RecognizerIntent.EXTRA_PROMPT, 
      getString(R.string.speech_prompt)); 
     try { 
     startActivityForResult(intent, REQ_CODE_SPEECH_INPUT); 
     } catch (ActivityNotFoundException a) { 
     Toast.makeText(getApplicationContext(), 
       getString(R.string.speech_not_supported), 
       Toast.LENGTH_SHORT).show(); 
     } 
    } 

    /** 
    * Receiving speech input 
    * */ 
    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 

     switch (requestCode) { 
     case REQ_CODE_SPEECH_INPUT: { 
     if (resultCode == RESULT_OK && null != data) { 

      ArrayList<String> result = data 
        .getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); 
      txtSpeechInput.setText(result.get(0)); 
     } 
     break; 
     } 

     } 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

} 


==================================================== 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@drawable/bg_gradient" 
    android:orientation="vertical"> 

    <TextView 
     android:id="@+id/txtSpeechInput" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="100dp" 
     android:textColor="@color/white" 
     android:textSize="26dp" 
     android:textStyle="normal" /> 

    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_centerHorizontal="true" 
     android:layout_marginBottom="60dp" 
     android:gravity="center" 
     android:orientation="vertical"> 

     <ImageButton 
      android:id="@+id/btnSpeak" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:background="@null" 
      android:src="@drawable/ico_mic" /> 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="10dp" 
      android:text="@string/tap_on_mic" 
      android:textColor="@color/white" 
      android:textSize="15dp" 
      android:textStyle="normal" /> 
    </LinearLayout> 

</RelativeLayout> 
=============================================================== 
<?xml version="1.0" encoding="utf-8"?> 
<resources> 

    <string name="app_name">Speech To Text</string> 
    <string name="action_settings">Settings</string> 
    <string name="hello_world">Hello world!</string> 
    <string name="speech_prompt">Say something&#8230;</string> 
    <string name="speech_not_supported">Sorry! Your device doesn\'t support speech input</string> 
    <string name="tap_on_mic">Tap on mic to speak</string> 

</resources> 
=============================================================== 
<resources> 

    <!-- 
     Base application theme, dependent on API level. This theme is replaced 
     by AppBaseTheme from res/values-vXX/styles.xml on newer devices. 
    --> 
    <style name="AppBaseTheme" parent="android:Theme.Light"> 
     <!-- 
      Theme customizations available in newer API levels can go in 
      res/values-vXX/styles.xml, while customizations related to 
      backward-compatibility can go here. 
     --> 
    </style> 

    <!-- Application theme. --> 
    <style name="AppTheme" parent="AppBaseTheme"> 
     <!-- All customizations that are NOT specific to a particular API-level can go here. --> 
    </style> 

</resources>