PS.
云知声是创立的,虽然只有1年多的发展历程,但其语音识别技术核心团队已经从业十余年,积累颇丰,这也是为什么能够短短一年时间能够在语音识别领域内做得风生水起的缘故。微语音插件、搜狗语音助手、乐视超级电视、老罗锤子操作系统、触宝输入法,还有网易+电信推出的的易信,用的是云知声的语音识别。,云知声在资本市场的认可度非常高,极受追捧。
目前云知声提供免费的离线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 -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 -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 -4-14 下午7:50:35
*/
public void stop(){
mTTSPlayer.stop();
}
/**
* 播放
*
* @author JPH
* @date -4-14 下午7:29:24
*/
public void play(String content) {
mTTSPlayer.play(content);
}
/**
* 释放资源
*
* @author JPH
* @date -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(mon.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;
}
}
}
Demo下载地址.
推荐阅读: