1. 程式人生 > >科大訊飛(語音合成和語音聽寫)

科大訊飛(語音合成和語音聽寫)


由於google的自帶的TTS不支援中文轉語音。所以很無奈的只能選擇語音龍頭中的科大訊飛了

本文章只是簡單的實現語音合成和語音聽寫

package com.example.viocedemo;

import com.iflytek.cloud.speech.RecognizerResult;
import com.iflytek.cloud.speech.SpeechConstant;
import com.iflytek.cloud.speech.SpeechError;
import com.iflytek.cloud.speech.SpeechListener;
import com.iflytek.cloud.speech.SpeechSynthesizer;
import com.iflytek.cloud.speech.SpeechUser;
import com.iflytek.cloud.speech.SynthesizerListener;
import com.iflytek.cloud.ui.RecognizerDialog;
import com.iflytek.cloud.ui.RecognizerDialogListener;

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

public class MainActivity extends Activity implements OnClickListener,SynthesizerListener{
	private EditText editText;
	private Button button1;
	private Button button2;
	//合成物件
	private SpeechSynthesizer speechSynthesizer;
	//識別視窗
	private RecognizerDialog recognizerDialog;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		SpeechUser.getUser().login(MainActivity.this, null, null, "appid=5317e26a", listener);
		init();
		setParam();
		
	}
	
	public void init()
	{
		editText = (EditText) findViewById(R.id.editText1);
		button1 = (Button) findViewById(R.id.button1);
		button2 = (Button) findViewById(R.id.button2);
		button1.setOnClickListener(this);
		button2.setOnClickListener(this);
	}
	
	public void setParam()
	{
		speechSynthesizer = SpeechSynthesizer.createSynthesizer(this);
		speechSynthesizer.setParameter(SpeechConstant.VOICE_NAME, "xiaoyan");
		speechSynthesizer.setParameter(SpeechConstant.SPEED, "50");
		speechSynthesizer.setParameter(SpeechConstant.VOLUME, "50");
		speechSynthesizer.setParameter(SpeechConstant.PITCH, "50");
	}
	
	public void setDialog()
	{
		recognizerDialog = new RecognizerDialog(this);
		recognizerDialog.setParameter(SpeechConstant.DOMAIN, "iat");
		recognizerDialog.setParameter(SpeechConstant.SAMPLE_RATE, "16000");
		editText.setText(null);
		//顯示Dialog
		recognizerDialog.setListener(dialogListener);
		recognizerDialog.show();
	}
	
	/**
	 * 識別回撥監聽器
	 */
	private RecognizerDialogListener dialogListener = new RecognizerDialogListener() {
		//識別結果回撥
		@Override
		public void onResult(RecognizerResult arg0, boolean arg1) {
			// TODO Auto-generated method stub
			String text = JsonParser.parseIatResult(arg0.getResultString());
			editText.append(text);
			editText.setSelection(editText.length());
		}
		
		//識別結束回撥
		@Override
		public void onError(SpeechError arg0) {
			// TODO Auto-generated method stub
			
		}
	};

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		switch (v.getId()) {
		case R.id.button1:
			String text = editText.getText().toString();
			speechSynthesizer.startSpeaking(text, this);
			break;
		case R.id.button2:
			setDialog();
			break;
		default:
			break;
		}
	}
	
	//緩衝進度回撥通知
	@Override
	public void onBufferProgress(int arg0, int arg1, int arg2, String arg3) {
		// TODO Auto-generated method stub
		
	}
	
	//結束回撥
	@Override
	public void onCompleted(SpeechError arg0) {
		// TODO Auto-generated method stub
		
	}
	//開始播放
	@Override
	public void onSpeakBegin() {
		// TODO Auto-generated method stub
		
	}
	//暫停播放
	@Override
	public void onSpeakPaused() {
		// TODO Auto-generated method stub
		
	}
	//播放進度
	@Override
	public void onSpeakProgress(int arg0, int arg1, int arg2) {
		// TODO Auto-generated method stub
		
	}
	//繼續播放
	@Override
	public void onSpeakResumed() {
		// TODO Auto-generated method stub
		
	}
	
	/**
	 * 通用回撥介面
	 */
	private SpeechListener listener = new SpeechListener() {
		
		//訊息回撥
		@Override
		public void onEvent(int arg0, Bundle arg1) {
			// TODO Auto-generated method stub
			
		}
		
		//資料回撥
		@Override
		public void onData(byte[] arg0) {
			// TODO Auto-generated method stub
			
		}
		
		//結束回撥(沒有錯誤)
		@Override
		public void onCompleted(SpeechError arg0) {
			// TODO Auto-generated method stub
			
		}
	};

}