当前位置:首页 > > 充电吧
[导读]1.简介实战而建立在实战一的基础上,只加了一个 Spinner ,给上一个 Demo 增加语言选择功能,可以使用 TTS 引擎支持的English、French、German、Italian和Span

1.简介

实战而建立在实战一的基础上,只加了一个 Spinner ,给上一个 Demo 增加语言选择功能,可以使用 TTS 引擎支持的English、French、German、Italian和Spanish这5大语言来进行相应的语音合成,并用这5种外语向她说出“我爱你”。让全世界都知道我爱你~-~wlh

2.实例

xml布局代码




Java代码



package com.example.androidttsdemo2;

import java.util.Locale;
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.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.AdapterView.OnItemSelectedListener;

public class MainActivity extends Activity implements OnInitListener {
    /**
     * Called when the activity is first created.
     */
    private EditText inputText = 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 Spinner langSelect = null;
    private String languages[] = {"English", "French", "German", "Italian", "Spanish"};

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

        //检查TTS数据是否已经安装并且可用
        Intent checkIntent = new Intent();
        checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
        startActivityForResult(checkIntent, REQ_TTS_STATUS_CHECK);

        inputText = (EditText) findViewById(R.id.inputText);
        speakBtn = (Button) findViewById(R.id.speakBtn);
        inputText.setText("This is an example of speech synthesis.");
        speakBtn.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                // TODO Auto-generated method stub
                mTts.speak(inputText.getText().toString(), TextToSpeech.QUEUE_ADD, null);
                //朗读输入框里的内容
            }
        });

        langSelect = (Spinner) findViewById(R.id.langSelect);

        inputText.setText("I love you");

        ArrayAdapteradapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item, languages);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        langSelect.setAdapter(adapter);
        langSelect.setSelection(0);
        langSelect.setOnItemSelectedListener(new OnItemSelectedListener() {

            public void onItemSelected(AdapterView parent, View view,
                                       int position, long id) {
                // TODO Auto-generated method stub
                int pos = langSelect.getSelectedItemPosition();
                int result = -1;
                switch (pos) {
                    case 0: {
                        inputText.setText("I love you");
                        result = mTts.setLanguage(Locale.US);
                    }

                    break;
                    case 1: {
                        inputText.setText("Je t'aime");
                        result = mTts.setLanguage(Locale.FRENCH);
                    }
                    break;
                    case 2: {
                        inputText.setText("Ich liebe dich");
                        result = mTts.setLanguage(Locale.GERMAN);
                    }
                    break;
                    case 3: {
                        inputText.setText("Ti amo");
                        result = mTts.setLanguage(Locale.ITALIAN);
                    }
                    break;
                    case 4: {
                        inputText.setText("Te quiero");
                        result = mTts.setLanguage(new Locale("spa", "ESP"));
                    }
                    break;
                    default:
                        break;
                }
                //设置发音语言
                if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED)
                //判断语言是否可用
                {
                    Log.v(TAG, "Language is not available");
                    speakBtn.setEnabled(false);
                } else {
                    speakBtn.setEnabled(true);
                }
            }

            public void onNothingSelected(AdapterView arg) {
                // TODO Auto-generated method stub

            }
        });
    }

    //实现TTS初始化接口
    @Override
    public void onInit(int status) {
        // TODO Auto-generated method stub
        //TTS Engine初始化完成
        if (status == TextToSpeech.SUCCESS) {
            int result = mTts.setLanguage(Locale.US);
            //设置发音语言
            if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED)
            //判断语言是否可用
            {
                Log.v(TAG, "Language is not available");
                speakBtn.setEnabled(false);
            } else {
                mTts.speak("This is an example of speech synthesis.", TextToSpeech.QUEUE_ADD, null);
                speakBtn.setEnabled(true);
            }
        }

    }

    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 Engine可以用
                {
                    mTts = new TextToSpeech(this, this);
                    Log.v(TAG, "TTS Engine is installed!");

                }

                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:
                    //缺少需要语言的发音数据
                {
                    //这三种情况都表明数据有错,重新下载安装需要的数据
                    Log.v(TAG, "Need language stuff:" + resultCode);
                    Intent dataIntent = new Intent();
                    dataIntent.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
                    startActivity(dataIntent);

                }
                break;
                case TextToSpeech.Engine.CHECK_VOICE_DATA_FAIL:
                    //检查失败
                default:
                    Log.v(TAG, "Got a failure. TTS apparently not available");
                    break;
            }
        } else {
            //其他Intent返回的结果
        }
    }

    @Override
    protected void onPause() {
        // TODO Auto-generated method stub
        super.onPause();
        if (mTts != null)
        //activity暂停时也停止TTS
        {
            mTts.stop();
        }
    }

    @Override
    protected void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
        //释放TTS的资源
        mTts.shutdown();
    }
}




在选择不同的item时,为inputText设置不同语言“我爱你”对应的文本,并且为TTS实例设置语言。
为TTS引擎设置语言的API为
public int setLanguage (Locale loc);
使用Locale这个表示语言及国家区域的类来设置语言,目前支持English、French、German、Italian和Spanish这5大语言,返回的结果为
LANG_AVAILABLE, LANG_COUNTRY_AVAILABLE, LANG_COUNTRY_VAR_AVAILABLE, LANG_MISSING_DATA 和LANG_NOT_SUPPORTED。
其中LANG_MISSING_DATA 和LANG_NOT_SUPPORTED表示无法使用当前进行设置的语言,另外的几个表示设置的语言有效。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭