科大訊飛文字轉語音功能
首先,操作思路:
1.下載科大訊飛的msg.jar,.so.兩個檔案。
2.如何使用jar包中的內容:
private static String TAG = "TtsDemo";
// 語音合成物件
private SpeechSynthesizer mTts;
// 預設發音人
private String voicer="xiaoyan";
private String[] cloudVoicersEntries;
private String[] cloudVoicersValue ;
//緩衝進度
private int mPercentForBuffering = 0;
//播放進度
private int mPercentForPlaying = 0;
// 雲端/本地選擇按鈕
private RadioGroup mRadioGroup;
// 引擎型別
private String mEngineType = SpeechConstant.TYPE_CLOUD;
// 語音+安裝助手類
//ApkInstaller mInstaller ;
private Toast mToast;
private SharedPreferences mSharedPreferences;
@SuppressLint("ShowToast")
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.ttsdemo);
initLayout();
// 初始化合成物件
mTts = SpeechSynthesizer.createSynthesizer(this, mTtsInitListener);
mSharedPreferences = getSharedPreferences("com.iflytek.setting", Activity.MODE_PRIVATE);
mToast = Toast.makeText(this,"",Toast.LENGTH_SHORT);
}
/**
* 初始化Layout。
*/
private void initLayout() {
findViewById(R.id.tts_play).setOnClickListener(this);
findViewById(R.id.tts_cancel).setOnClickListener(this);
findViewById(R.id.tts_pause).setOnClickListener(this);
findViewById(R.id.tts_resume).setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch(view.getId()) {
// 開始合成
case R.id.tts_play:
String text = ((EditText) findViewById(R.id.tts_text)).getText().toString();
// 設定引數
setParam();
int code = mTts.startSpeaking(text, mTtsListener);
if (code != ErrorCode.SUCCESS) {
if(code == ErrorCode.ERROR_COMPONENT_NOT_INSTALLED){
//未安裝則跳轉到提示安裝頁面
//mInstaller.install();
}else {
showTip("語音合成失敗,錯誤碼: " + code);
}
}
break;
// 取消合成
case R.id.tts_cancel:
mTts.stopSpeaking();
break;
// 暫停播放
case R.id.tts_pause:
mTts.pauseSpeaking();
break;
// 繼續播放
case R.id.tts_resume:
mTts.resumeSpeaking();
break;
}
}
/**
* 初期化監聽。
*/
private InitListener mTtsInitListener = new InitListener() {
@Override
public void onInit(int code) {
Log.d(TAG, "InitListener init() code = " + code);
if (code != ErrorCode.SUCCESS) {
showTip("初始化失敗,錯誤碼:"+code);
}
}
};
/**
* 合成回撥監聽。
*/
private SynthesizerListener mTtsListener = new SynthesizerListener() {
@Override
public void onSpeakBegin() {
showTip("開始播放");
}
@Override
public void onSpeakPaused() {
showTip("暫停播放");
}
@Override
public void onSpeakResumed() {
showTip("繼續播放");
}
@Override
public void onBufferProgress(int percent, int beginPos, int endPos,
String info) {
mPercentForBuffering = percent;
mToast.setText(String.format(getString(R.string.tts_toast_format),
mPercentForBuffering, mPercentForPlaying));
mToast.show();
}
@Override
public void onSpeakProgress(int percent, int beginPos, int endPos) {
mPercentForPlaying = percent;
showTip(String.format(getString(R.string.tts_toast_format),
mPercentForBuffering, mPercentForPlaying));
}
@Override
public void onCompleted(SpeechError error) {
if(error == null)
{
showTip("播放完成");
}
else if(error != null)
{
showTip(error.getPlainDescription(true));
}
}
@Override
public void onEvent(int eventType, int arg1, int arg2, Bundle obj) {
}
};
private void showTip(final String str){
runOnUiThread(new Runnable() {
@Override
public void run() {
mToast.setText(str);
mToast.show();
}
});
}
/**
* 引數設定
* @param param
* @return
*/
private void setParam(){
//設定合成
if(mEngineType.equals(SpeechConstant.TYPE_CLOUD))
{
mTts.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_CLOUD);
//設定發音人
mTts.setParameter(SpeechConstant.VOICE_NAME,voicer);
}else {
mTts.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_LOCAL);
//設定發音人 voicer為空預設通過語音+介面指定發音人。
mTts.setParameter(SpeechConstant.VOICE_NAME,"");
}
//設定語速
mTts.setParameter(SpeechConstant.SPEED,mSharedPreferences.getString("speed_preference", "30"));
//設定音調
mTts.setParameter(SpeechConstant.PITCH,mSharedPreferences.getString("pitch_preference", "50"));
//設定音量
mTts.setParameter(SpeechConstant.VOLUME,mSharedPreferences.getString("volume_preference", "80"));
//設定播放器音訊流型別
mTts.setParameter(SpeechConstant.STREAM_TYPE,mSharedPreferences.getString("stream_preference", "3"));
}
@Override
protected void onDestroy() {
super.onDestroy();
mTts.stopSpeaking();
// 退出時釋放連線
mTts.destroy();
}
3.其中要申請一個使用線上引擎的appid號,如果申請,請查資料。
4.文字轉語音的效果就實現了(科大訊飛是中英文轉義準確率最高的(我試過的));
佈局介面很簡單。自己想想就知道了。寫的可疑處,請交流。