使用Android自帶的TTS實現語音播報(電話號碼)功能
事先宣告:該文章參考以下幾篇文章,如果大家想看,可直接點選進入:
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
以上只是做一個簡單的記錄,如有什麼不正確的地方,請指教,謝謝!