Android系統從1.6版本開始就支持TTS(Text-To-Speech),即語音合成。可是android系統默認的TTS引擎:Pic TTS不支持中文。因此咱們得安裝本身的TTS引擎和語音包。html
在項目中,一開始用的是手說TTS,免費版的,感受聲音很不僵硬,不天然,不連貫。付費版的還要錢激活,若是不激活,限制每次只能度5個字,並且比免費版也好不了多少。最後採用了訊飛語音TTS1.0,發音連貫天然,我的感受很不錯了,之後就用它。java
介紹下使用方法:android
1.首先下載訊飛的語音包apk,以及語音引擎apk,安裝在手機上。api
連接:http://pan.baidu.com/s/1mgL7elU 提取碼:oelh微信
2.進入系統設置-->語音輸入輸出設置-->勾選「訊飛語音合成" , 默認引擎「訊飛語音合成」, 語言「中文"。app
調用android自帶的TTS api,就可實現中文版語音合成。ide
package com.example.testxunfeitts; import java.util.Locale; import android.app.Activity; import android.os.Bundle; import android.speech.tts.TextToSpeech; import android.text.Editable; import android.text.TextWatcher; import android.view.View; import android.widget.Button; import android.widget.CheckBox; import android.widget.EditText; import android.widget.Toast; public class MainActivity extends Activity { private EditText mEditText = null; private Button readButton = null; private Button saveButton = null; private CheckBox mCheckBox = null; private TextToSpeech mTextToSpeech=null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mEditText = (EditText)this.findViewById(R.id.edittext); readButton = (Button)this.findViewById(R.id.rbutton); saveButton = (Button)this.findViewById(R.id.sbutton); mCheckBox = (CheckBox)this.findViewById(R.id.checkbox); //實例並初始化TTS對象 mTextToSpeech=new TextToSpeech(this, new TextToSpeech.OnInitListener() { @Override public void onInit(int status) { if (status==TextToSpeech.SUCCESS) { //設置朗讀語言 int supported=mTextToSpeech.setLanguage(Locale.US); if ((supported!=TextToSpeech.LANG_AVAILABLE)&&(supported!=TextToSpeech.LANG_COUNTRY_AVAILABLE)) { Toast.makeText(MainActivity.this, "不支持當前語言!", 1).show(); } } } }); //朗讀監聽按鈕 readButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { //朗讀EditText裏的內容 mTextToSpeech.speak(mEditText.getText().toString(), TextToSpeech.QUEUE_FLUSH, null); } }); //保存按鈕監聽 saveButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { //將EditText裏的內容保存爲語音文件 int r = mTextToSpeech.synthesizeToFile(mEditText.getText().toString(), null, "/mnt/sdcard/speak.wav"); if (r==TextToSpeech.SUCCESS) { Toast.makeText(MainActivity.this, "保存成功!", 1).show(); } } }); //EditText內容變化監聽 mEditText.addTextChangedListener(mTextWatcher); } @Override protected void onDestroy() { super.onDestroy(); if (mTextToSpeech!=null) { mTextToSpeech.shutdown();//關閉TTS } } private TextWatcher mTextWatcher = new TextWatcher(){ @Override public void afterTextChanged(Editable s) { //若是是邊寫邊讀 if(mCheckBox.isChecked()&&(s.length()!=0)){ //得到EditText的全部內容 String t = s.toString(); mTextToSpeech.speak(t.substring(s.length()-1), TextToSpeech.QUEUE_FLUSH, null); } } @Override public void beforeTextChanged(CharSequence s, int start, int before, int count) { // TODO Auto-generated method stub } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { // TODO Auto-generated method stub } }; }
中文語音合成(TTS)能夠分爲兩類:this
1.跟系統接口吻合的spa
跟系統接口吻合的,都是把TTS引擎跟語音包數據分開。像系統默認的Pico TTS,SVOX,科大訊飛等就是這樣的。code
優勢:能夠經過系統提供的接口去使用TTS功能,以便於作多國語言的擴展。
缺點:設置語音朗讀的角色和設置語速的快慢就得經過系統的接口去設置。
2.不與系統接口吻合的
不與系統接口吻合的,都是會把引擎和語音包打包成一個apk,而後安裝完以後,經過指定的接口去調用其所提供的中文語音合成功能。
除了這兩類方法以外,還有一些是直接把TTS功能作成共享庫so文件,而後經過NDK去調用TTS的功能。這一種就比較好,由於不須要額外的再安裝TTS引擎跟語音包,而且能夠直接在應用裏面設置朗讀人是男聲仍是女聲,語速等。想舊版的科大訊飛就是以這種形式出現的,比較有表明的應用是「據說」或者"vBook"。
分析下市面上有名的中文語音合成TTS各自的差別:
1、跟系統接口吻合的。
1.訊飛語音TTS1.0
這個原來訊飛是沒有這個與系統接口吻合的TTS的,原來是以動態庫的形式的,最近才以這種apk的形式華麗登場,合成的效果清晰流暢,不生硬,英文也讀得挺好的,聽起來很舒服。
2.SVOX
這個也作得很強大,N多的語言支持,中文不只支持普通話,還支持廣東話!不過有一些感受吐字不是很清晰,聽感不是很好,不過還好,由於大部分是能夠聽得懂的,下載地址:http://www.coolapk.com/apk-4192-com.svox.classic.langpack.cmn_chn_fem/
3.三星TTS
支持韓文,中文跟英文,每一字吐字還比較清晰,可是連起來的時候,不是很順暢。
安裝apk,而後把SMT文件夾整個拷貝到SD卡的根目錄
下載地址是:http://115.com/file/e7z2iliv
2、是以獨立的apk形式存在的主要在下面的兩種
1.捷通華聲
捷通華聲也是中文語音作得比較好的,跟科大訊飛有得一拼。它的調用方法是使用java的反射機制來使用已經安裝的TTS類。
捷通華聲TTS語音包下載地址:http://www.yingyong.so/app/3/1917.htm
2.手說TTS
手說也是獨立安裝的一個TTS引擎,目前好像只支持中文語言。它接口公開,語音質量還行。本人作過手說TTS的,感受聲音很不僵硬,不天然,連貫。
它的使用方法在例程裏面有很詳細的介紹,手說的主頁:http://shoushuo.com/index.html
對於第一種做爲切合系統接口的TTS中文引擎,安裝以後,須要安裝語言包,而後還得簡單的設置一下才可使用,方法以下:
設置-》語音輸入與輸出-》文字轉語音設置,把對應的TTS引擎後面的勾,勾上,再在「默認引擎」裏面設置你所須要的TTS,而後就能夠聆聽示例了。
而對於第二種,通常都會帶有一個activity能夠聆聽示例的。
推薦使用科大訊飛的中文TTS,跟捷通華聲的音色都比較天然,應該是目前全部的中文TTS裏面最好的了。
若是此文對您有幫助,微信打賞我一下吧~