zoukankan      html  css  js  c++  java
  • 使用安卓中的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(); // 关闭,释放资源
        }
    }
  • 相关阅读:
    API文档大集合
    jenkins 构建 job 并获取其状态的实现
    jenkins 插件乱码处理与文件上传
    更优雅的配置:docker/运维/业务中的环境变量
    部署仓库中 nginx 下游依赖配置改进
    dotnet core 在 MIPS64 下的移值进度:EA 版本已经发布
    tmux 编译安装过程
    各数据源的时间/日期的提取能力对比
    关于若干性能指标的阐述
    为缓存、外部接口调用添加超时处理
  • 原文地址:https://www.cnblogs.com/lizhanqi/p/5847306.html
Copyright © 2011-2022 走看看