文本到语音(TTS)-Android

bha*_*thi 59 android text-to-speech

我是Android平台的新手.现在我正在努力.TTS(Text to Speech)如果我在TextArea中输入文本,我希望在单击"说出"按钮时将其转换为语音.

谁能帮我吗?

小智 89

Android 1.6+内置了文本到语音.这是一个如何做到的简单示例.

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

更多信息:http://android-developers.blogspot.com/2009/09/introduction-to-text-to-speech-in.html


以下是有关如何从Android SDK Manager下载示例代码的说明:

  1. 启动Android SDK Manager.

    一个.在Windows上,双击Android SDK目录根目录下的SDK Manager.exe文件.

    湾 在Mac或Linux上,打开Android SDK中tools /目录的终端,然后执行android sdk.

  2. 展开最新Android平台的软件包列表.

  3. 选择并下载SDK样本.下载完成后,您可以在此位置找到所有样本的源代码:

/ SDK /样品/ Android的版本/

(i.e. \android-sdk-windows\samples\android-16\ApiDemos\src\com\example\android\apis\app\TextToSpeechActivity.java)
Run Code Online (Sandbox Code Playgroud)

  • 我现在已经弃用了`speak` (5认同)
  • 这是因为没有弃用的是:`speak(CharSequence text,int queueMode,Bundle params,String utteranceId)` (2认同)
  • 您必须等待 TTS 初始化。 (2认同)

小智 59

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>
Run Code Online (Sandbox Code Playgroud)

  • 这是一个更完整的例子.它包括接受的答案中缺少的TextToSpeech.OnInitListener的实现.好东西!+1 (5认同)

Sim*_*mon 5

快速测试 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);
            }
        }
   });
}
Run Code Online (Sandbox Code Playgroud)

如果您不使用本地化消息textToSpeechSystem.setLanguage(..)也很重要,因为您的用户可能并非都将英语设置为他们的默认语言,因此单词的发音将是错误的。但是对于一般测试 TTS 这个片段就足够了

相关链接:https : //developer.android.com/reference/android/speech/tts/TextToSpeech