使用Android自带的TTS实现语音播报(电话号码)功能

来源:互联网 发布:olay新生塑颜系列知乎 编辑:程序博客网 时间:2024/05/14 07:42

事先声明:该文章参考以下几篇文章,如果大家想看,可直接点击进入:

https://github.com/SolveBugs/Utils/blob/master/SpeechUtils.java

http://blog.qiji.tech/archives/13040

http://blog.csdn.net/ichliebephone/article/details/5802044

https://developer.android.google.cn/reference/android/speech/tts/TextToSpeech.html


最近做的产品有一个需要边输入电话号码边进行语音播报的简单功能,一开始采用的是使用MediaPlayer事先播放,但效果与IOS相比,真的是差强人意,所以转换了种思路,在网上搜索解决方案,原来Android系统有自带的语音播报功能(TTS:TextToSpeech,以后需要多多了解Android的API了,汗颜)。


当然在写这篇文章的时候,对于整个tts包(android.speech.tts)中的所有类并不是全部了解熟悉,所有有需要的同学可以自己再去学习和了解。而使用TTS其实很简单,大概就分成三步(当然是我很浅显的理解):

1、初始化TTS对象

TextToSpeech mTts = new TextToSpeech(context, mInitListener);

context就不用说了;mInitListener指的是TextToSpeech.OnInitListener,是构造TextToSpeech对象的第二个参数,所以需要实现该接口,具体实现代码如下:

private final TextToSpeech.OnInitListener mInitListener = new TextToSpeech.OnInitListener() {        @Override        public void onInit(int status) {            if (status == TextToSpeech.SUCCESS) {                int result = mTts.setLanguage(Locale.CHINESE);                mTts.setPitch(1.0f);                mTts.setSpeechRate(1.0f);                if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED) {                    LogUtils.e("Language is not available.");                }            } else {                LogUtils.e("Could not initialize TextToSpeech.");            }        }    };

setPitch()方法用来控制音调;

setSpeechRate()用来控制语速;


当然也可参考第三个链接,会更详细;


2、调用speak()

mTts.speak(s, TextToSpeech.QUEUE_ADD, null);
但该方法已在API21废弃了,s表示要播报的字符串


3、销毁TextToSpeech对象,在无用时销毁该对像

public void closeVoice() {        if (null != mTts) {            mTts.stop();            mTts.shutdown();        }    }

注:TTS读语音数字的时候需要用空格隔开,如150需要写成1 5 0,读“一五零”,否则TTS会读成“一百五十”


源码地址:https://github.com/LomoLin/Lomo/blob/master/app/src/main/java/com/lomo/utils/VoiceUtils.java

以上只是做一个简单的记录,如有什么不正确的地方,请指教,谢谢!