1. 程式人生 > >【Android語音合成TTS】雲知聲離線TTS使用詳解

【Android語音合成TTS】雲知聲離線TTS使用詳解

PS.

雲知聲是2012年創立的,雖然只有1年多的發展歷程,但其語音識別技術核心團隊已經從業十餘年,積累頗豐,這也是為什麼能夠短短一年時間能夠在語音識別領域內做得風生水起的緣故。微語音外掛、搜狗語音助手、樂視超級電視、老羅錘子作業系統、觸寶輸入法,還有網易+電信推出的的易信,用的是雲知聲的語音識別。2013年,雲知聲在資本市場的認可度非常高,極受追捧。

目前雲知聲提供免費的離線TTS,但API比較少,功能也比較簡單,合成的語音也比較生硬,如果對合成的語音要求不高的話可以考慮接入。

整合方法:

匯入雲知聲TTS相關jar包和so檔案

如圖:

為了方便使用我這裡將百度語音合成引擎做了進一步的封裝,封裝成了

SpeechUtilOffline以方便呼叫:

package comjph.tts.usc;

import android.content.Context;
import android.media.AudioManager;
import android.util.Log;
import cn.yunzhisheng.tts.offline.TTSPlayerListener;
import cn.yunzhisheng.tts.offline.basic.ITTSControl;
import cn.yunzhisheng.tts.offline.basic.TTSFactory;

/**
 * 離線語音解析
 * 
 * @author JPH
 * @date 2015-4-14 下午7:20:25
 */
public class SpeechUtilOffline implements TTSPlayerListener {
	public static final String appKey = "_appKey_";
	public static final String  secret = "_secret_";
	private ITTSControl mTTSPlayer;
	private Context context;

	public SpeechUtilOffline(Context context) {
		this.context = context;
		init();
	}

	/**
	 * 初始化引擎
	 * @author JPH
	 * @date 2015-4-14 下午7:32:58
	 */
	private void init() {
		mTTSPlayer = TTSFactory.createTTSControl(context, appKey);// 初始化語音合成物件
		mTTSPlayer.setTTSListener(this);// 設定回撥監聽
		mTTSPlayer.setStreamType(AudioManager.STREAM_MUSIC);//設定音訊流
		mTTSPlayer.setVoiceSpeed(2.5f);//設定播報語速,播報語速,數值範圍 0.1~2.5 預設為 1.0
		mTTSPlayer.setVoicePitch(1.1f);//設定播報音高,調節音高,數值範圍 0.9~1.1 預設為 1.0
		mTTSPlayer.init();// 初始化合成引擎
	}
	/**
	 * 停止播放
	 * @author JPH
	 * @date 2015-4-14 下午7:50:35
	 */
	public void stop(){
		mTTSPlayer.stop();
	}

	/**
	 * 播放
	 * 
	 * @author JPH
	 * @date 2015-4-14 下午7:29:24
	 */
	public void play(String content) {
		mTTSPlayer.play(content);
	}

	/**
	 * 釋放資源
	 * 
	 * @author JPH
	 * @date 2015-4-14 下午7:27:56
	 */
	public void release() {
		// 主動釋放離線引擎
		mTTSPlayer.release();
	}

	@Override
	public void onPlayEnd() {
		// 播放完成回撥
		Log.i("msg", "onPlayEnd");
	}

	@Override
	public void onPlayBegin() {
		// 開始播放回調
		Log.i("msg", "onPlayBegin");
	}

	@Override
	public void onInitFinish() {
		// 初始化成功回撥
		Log.i("msg", "onInitFinish");
	}

	@Override
	public void onError(cn.yunzhisheng.tts.offline.common.USCError arg0) {
		// 語音合成錯誤回撥
		Log.i("msg", "onError");
	}

	@Override
	public void onCancel() {
		// 取消播放回調
		Log.i("msg", "onCancel");
	}

	@Override
	public void onBuffer() {
		// 開始緩衝回撥
		Log.i("msg", "onBuffer");

	}
}

使用方法:

package comjph.tts.usc;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.EditText;

public class TTSOfflineActivity extends Activity implements OnClickListener {
	private EditText mTTSText;
	private SpeechUtilOffline offline;
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_offline_tts);
		mTTSText = (EditText) findViewById(R.id.textViewResult);
		offline=new SpeechUtilOffline(this);
	}
	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.btnPlay:
			offline.play(mTTSText.getText().toString());
			break;
		case R.id.btnStop:
			offline.stop();
			break;
		default:
			break;
		}

	}
}
推薦閱讀: