TextToSpeech将文本转为语音的简单使用

今天拿到一个数据库文件,里面有很多英语单词的音标,看到别人的软件既可以显示音标又可以朗读单词就以为是有什么插件能根据音标发音,后来问了很多群,结果没人回答,查了很多资料之后才知道有这么一个TTS,就是将文本转为语音。刚好安卓帮助文档里面又看到有TextToSpeech,就跟着别人的以及帮助文档摸索的测试了一下,果不其然,真的能读。部分代码及注释:

main.xml

    <?xml version="1.0" encoding="utf-8"?>  
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
        android:layout_width="fill_parent"  
        android:layout_height="fill_parent"  
        android:orientation="vertical" >  
      
        <TextView  
            android:id="@+id/speechTxt"  
            android:layout_width="fill_parent"  
            android:layout_height="fill_parent"  
            android:text="you are very good !" />  
      
        <Button  
            android:id="@+id/speechBtn"  
            android:layout_width="wrap_content"  
            android:layout_height="wrap_content"  
            android:layout_alignParentLeft="true"  
            android:layout_alignParentTop="true"  
            android:layout_marginTop="22dp"  
            android:text="text to speech" />  
      
    </RelativeLayout>  

 

MainAty.java

Java代码
    package fly.aty;  
      
    import java.util.Locale;  
      
    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.view.View.OnClickListener;  
    import android.widget.Button;  
    import android.widget.TextView;  
    import android.widget.Toast;  
      
    public class MainAty extends Activity implements OnClickListener, OnInitListener{  
      
        private Button speechBtn; // 按钮控制开始朗读  
        private TextView speechTxt; // 需要朗读的内容  
        private TextToSpeech textToSpeech; // TTS对象  
      
        @Override  
        public void onCreate(Bundle savedInstanceState) {  
            super.onCreate(savedInstanceState);  
            setContentView(R.layout.main);  
      
            speechBtn = (Button) findViewById(R.id.speechBtn);  
            speechBtn.setOnClickListener(this);  
      
            speechTxt = (TextView) findViewById(R.id.speechTxt);  
            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.US);  
                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.5f);// 设置音调,值越大声音越尖(女生),值越小则变成男声,1.0是常规  
                textToSpeech.speak(speechTxt.getText().toString(),  
                        TextToSpeech.QUEUE_FLUSH, null);  
            }  
        }  
      
        @Override  
        protected void onStop() {  
            super.onStop();  
            textToSpeech.stop(); // 不管是否正在朗读TTS都被打断  
            textToSpeech.shutdown(); // 关闭,释放资源  
        }  
    }  

 

版权声明:本文为a15838319826原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。