web-dev-qa-db-fra.com

Synthèse vocale (TTS) -Android

Je suis nouveau sur la plate-forme Android. Maintenant, je travaille sur TTS(Text to Speech). Si j'entre le texte dans un TextArea et que je souhaite qu'il soit converti en discours lorsque je cliquez sur le bouton Parler.

Quelqu'un peut m'aider?

59
bharathi

La synthèse vocale est intégrée à Android 1.6+. Voici un exemple simple de la façon de le faire.

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

Plus d'informations: http://Android-developers.blogspot.com/2009/09/introduction-to-text-to-speech-in.html


Voici les instructions sur la façon de télécharger un exemple de code à partir du Android SDK Manager:

  1. Lancez le Android SDK Manager.

    une. Sous Windows, double-cliquez sur le fichier SDK Manager.exe à la racine du répertoire Android SDK.

    b. Sur Mac ou Linux, ouvrez un terminal dans le répertoire tools/dans le SDK Android, puis exécutez Android sdk.

  2. Développez la liste des packages pour la dernière plate-forme Android.

  3. Sélectionnez et téléchargez des exemples pour SDK. Une fois le téléchargement terminé, vous pouvez trouver le code source de tous les exemples à cet emplacement:

/sdk/samples/version Android/

(i.e. \Android-sdk-windows\samples\Android-16\ApiDemos\src\com\example\Android\apis\app\TextToSpeechActivity.Java)
87
Quantumgeek
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>
58
Sifat Ifty

Essayez ceci, c'est simple: ** 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>

Et votre 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 Message de Parallelcodes.com

3
hitesh vikani

Un exemple minimaliste pour tester rapidement le système TTS:

private TextToSpeech textToSpeechSystem;

@Override
protected void onStart() {
  super.onStart();
  textToSpeechSystem = new TextToSpeech(this, new TextToSpeech.OnInitListener() {
        @Override
        public void onInit(int status) {
            if (status == TextToSpeech.SUCCESS) {
                String textToSay = "Hello world, this is a test message!";
                textToSpeechSystem.speak(textToSay, TextToSpeech.QUEUE_ADD, null);
            }
        }
   });
}

Si vous n'utilisez pas de messages localisés, textToSpeechSystem.setLanguage(..) est également important, car vos utilisateurs n'ont probablement pas tous l'anglais comme langue par défaut, la prononciation des mots sera donc incorrecte. Mais pour tester TTS en général, cet extrait est suffisant

Liens connexes: https://developer.Android.com/reference/Android/speech/tts/TextToSpeech

3
Simon Heinen
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

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>
0
Keshav Gera