• 使用安卓中的TextToSpeech控件实现朗读文字


    首先感谢原文的博主,本文中的代码均来自该博主:(原文地址)http://flycatdeng.iteye.com/blog/1827245

    朗读文字不需要任何的权限,这个控件的好处是首先不要权限,其次不用联网避免了如讯飞的联网登权限(讯飞其实也不错,比较智能,该控件只能读取简单的文字)

    布局文件

    <?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="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        tools:context="com.lizhanqi.www.androidtexttospeech.MainActivity">
        <EditText
            android:id="@+id/editText"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="请输入要朗诵的字" />
        <Button
            android:id="@+id/btn_read"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="读" />
    </LinearLayout>

    //代码

    package com.lizhanqi.www.androidtexttospeech;
    import android.os.Bundle;
    import android.speech.tts.TextToSpeech;
    import android.support.v7.app.AppCompatActivity;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.Toast;
    import java.util.Locale;
    public class MainActivity extends AppCompatActivity  implements View.OnClickListener, TextToSpeech.OnInitListener {
        private Button speechBtn; // 按钮控制开始朗读
        private EditText speechTxt; // 需要朗读的内容
        private TextToSpeech textToSpeech; // TTS对象
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            speechBtn = (Button) findViewById(R.id.btn_read);
            speechBtn.setOnClickListener(this);
            speechTxt = (EditText) findViewById(R.id.editText);
            textToSpeech = new TextToSpeech(this, this); // 参数Context,TextToSpeech.OnInitListener
        }
        /**
         * 用来初始化TextToSpeech引擎
         * status:SUCCESS或ERROR这2个值
         * setLanguage设置语言,帮助文档里面写了有22种
         * TextToSpeech.LANG_MISSING_DATA:表示语言的数据丢失。
         * TextToSpeech.LANG_NOT_SUPPORTED:不支持
         */
        @Override
        public void onInit(int status) {
            if (status == TextToSpeech.SUCCESS) {
                int result = textToSpeech.setLanguage(Locale.CHINA);
                if (result == TextToSpeech.LANG_MISSING_DATA
                        || result == TextToSpeech.LANG_NOT_SUPPORTED) {
                    Toast.makeText(this, "数据丢失或不支持", Toast.LENGTH_SHORT).show();
                }
            }
        }
        @Override
        public void onClick(View v) {
            if (textToSpeech != null && !textToSpeech.isSpeaking()) {
                textToSpeech.setPitch(0.0f);// 设置音调,值越大声音越尖(女生),值越小则变成男声,1.0是常规
                textToSpeech.speak(speechTxt.getText().toString(),
                        TextToSpeech.QUEUE_FLUSH, null);
            }
        }
        @Override
        protected void onStop() {
            super.onStop();
            textToSpeech.stop(); // 不管是否正在朗读TTS都被打断
            textToSpeech.shutdown(); // 关闭,释放资源
        }
    }
  • 相关阅读:
    对虚机设备Bridge ,Vlan, VETH, TAP详细介绍
    DevStack部署Openstack环境
    Ubuntu配置 PPTP 服务器端
    Ubuntu 配置PPTP客户端
    Git学习笔记
    Mysql安装随记,整理内容来源网络
    GitHub访问慢的优化处理
    NetCore部署到Linux服务器+Supervisor的步骤及过程中踩过的坑
    JavaScript的定时器如何先触发一次再延时
    在实现文本框只能输入数字和小数点的基础上实现了价格样式(保留两位小数)
  • 原文地址:https://www.cnblogs.com/lizhanqi/p/5847306.html
Copyright © 2020-2023  润新知