Android 系統(tǒng)里內(nèi)置了PicoTTS,對中文的支持很不給力。但是我們可以安裝“訊飛語記”TTS,中文就不是問題了。 首先介紹下核心方法speak()及其參數(shù)
public int speak(final String text, final int queueMode, final HashMap<String, String> params) { return runAction(new Action<Integer>()text 需要轉(zhuǎn)成語音的文字 queueMode 隊(duì)列方式: QUEUE_ADD:播放完之前的語音任務(wù)后才播報本次內(nèi)容 QUEUE_FLUSH:丟棄之前的播報任務(wù),立即播報本次內(nèi)容 params 設(shè)置TTS參數(shù),可以是null。 KEY_PARAM_STREAM:音頻通道,可以是:STREAM_MUSIC、STREAM_NOTIFICATION、STREAM_RING等 KEY_PARAM_VOLUME:音量大小,0-1f 返回值:int SUCCESS = 0,int ERROR = -1。
以下是Demo代碼
package com.interjoy.demoqrcode;import android.os.Bundle;import android.speech.tts.TextToSpeech;import android.support.v7.app.AppCompatActivity;import android.text.TextUtils;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;import android.widget.Toast;import java.util.Locale;public class MainActivity extends AppCompatActivity { PRivate Button btn_to_speak; private TextToSpeech mSpeech; private EditText et_input; private static final String TAG_TTS = "MainActivity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); } private <T> T f(int resId) { return (T) findViewById(resId); } private void init() { btn_to_speak = f(R.id.btn_to_speak); et_input = f(R.id.et_input); speechInit(); btn_to_speak.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String text = et_input.getText().toString(); if (TextUtils.isEmpty(text)) text = "請輸入要測試的內(nèi)容"; playTTS(text); } }); } /** * 初始化TextToSpeech,在onCreate中調(diào)用 */ private void speechInit() { if (mSpeech != null) { mSpeech.stop(); mSpeech.shutdown(); mSpeech = null; } // 創(chuàng)建TTS對象 mSpeech = new TextToSpeech(MainActivity.this, new TTSListener()); } /** * 將文本用TTS播放 * * @param str 播放的文本內(nèi)容 */ private void playTTS(String str) { if (mSpeech == null) mSpeech = new TextToSpeech(this, new TTSListener()); mSpeech.speak(str, TextToSpeech.QUEUE_FLUSH, null); Log.i(TAG_TTS, "播放語音為:" + str); } private final class TTSListener implements TextToSpeech.OnInitListener { @Override public void onInit(int status) { Log.e(TAG_TTS, "初始化結(jié)果:" + (status == TextToSpeech.SUCCESS)); int result = mSpeech.setLanguage(Locale.CHINESE); //如果返回值為-2,說明不支持這種語言 Log.e(TAG_TTS, "是否支持該語言:" + (result != TextToSpeech.LANG_NOT_SUPPORTED)); } } @Override protected void onDestroy() { if (mSpeech != null) { mSpeech.stop(); mSpeech.shutdown(); mSpeech = null; } super.onDestroy(); }}注意:1.安裝訊飛語記之后,需要設(shè)置為把它設(shè)置為默認(rèn)TTS,就像安裝搜狗輸入法后要設(shè)置手機(jī)輸入法默認(rèn)為搜狗才能用一樣。我使用華為榮耀5A具體設(shè)置步驟:設(shè)置->輔助功能->文字轉(zhuǎn)語音(TTS)輸出->訊飛語記

2.不用時需要及時關(guān)閉釋放tts對象 mSpeech.shutdown();
新聞熱點(diǎn)
疑難解答
圖片精選