android 語音合成的簡單實現

一.語音合成是什麼

         語音合成也就是TextToSpeech,簡稱TTS,即把文本轉換成語音的意思。安卓系統自帶TTS引擎,默認爲Pico引擎,如下圖所示:

      

      可惜的是Pico引擎不支持中文,  你也可以裝上支持中文的第三方引擎,比如著名的科大訊飛,然後在在默認引擎那裏把它勾選上,就可以了。

 二. 實現語音合成

     1.我們先用系統自帶的TTS來實現吧.

      代碼很簡單,創建一個TextToSpeech對象,先初始化配置,然後調用speak方法,傳入三個參數就可以了,第一個參數爲文本內容,第二個爲發音模式,第三個傳null即可. 

        // 實例並初始化TTS對象
		mTextToSpeech = new TextToSpeech(this,new TextToSpeech.OnInitListener() {
					@Override
					public void onInit(int status) {
					 	  if (status == TextToSpeech.SUCCESS) {
							 // 設置朗讀語言
							int supported = mTextToSpeech.setLanguage(Locale.ENGLISH);
							if ((supported != TextToSpeech.LANG_AVAILABLE)
									&& (supported != TextToSpeech.LANG_COUNTRY_AVAILABLE)) {
								Toast.makeText(MainActivity.this, "不支持當前語言",0).show();
							} 
						}  
					}
            	}); 
     調用speak方法

               //朗讀
		mTextToSpeech.speak(content,TextToSpeech.QUEUE_FLUSH, null);
     2.使用科大訊飛實現

      先去科大訊飛SDK官網創建應用,然後下載在線語音合成SDK,導入工程,進行一些配置。詳細可以去查官網.

      主要代碼如下:

SpeechUtility.createUtility(context, SpeechConstant.APPID + "=571dd0b9");
 	    // 1.創建SpeechSynthesizer對象, 第二個參數:本地合成時傳InitListener
		SpeechSynthesizer mTts = SpeechSynthesizer.createSynthesizer(context,
				null);
		// 2.合成參數設置,詳見《科大訊飛MSC API手冊(Android)》SpeechSynthesizer 類
		mTts.setParameter(SpeechConstant.VOICE_NAME, "xiaoyan");// 設置發音人
		mTts.setParameter(SpeechConstant.SPEED, "50");// 設置語速
		mTts.setParameter(SpeechConstant.VOLUME, "80");// 設置音量,範圍0~100
		mTts.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_CLOUD); // 設置雲端
		// 設置合成音頻保存位置(可自定義保存位置),保存在“./sdcard/iflytek.pcm”
		// 保存在SD卡需要在AndroidManifest.xml添加寫SD卡權限
		// 如果不需要保存合成音頻,註釋該行代碼
		mTts.setParameter(SpeechConstant.TTS_AUDIO_PATH, "./sdcard/iflytek.pcm");
		// 3.開始合成
		mTts.startSpeaking(content, mSynListener);
      需要傳入一個合成監聽器SynthesizerListener對象,可以監聽開始播放、暫停播放等事件.

        // 合成監聽器
	private SynthesizerListener mSynListener = new SynthesizerListener() {
		// 會話結束回調接口,沒有錯誤時,error爲null
		public void onCompleted(SpeechError error) {
		}

		// 緩衝進度回調
		// percent爲緩衝進度0~100,beginPos爲緩衝音頻在文本中開始位置,endPos表示緩衝音頻在文本中結束位置,info爲附加信息。
		public void onBufferProgress(int percent, int beginPos, int endPos,
				String info) {
		}

		// 開始播放
		public void onSpeakBegin() {
		}

		// 暫停播放
		public void onSpeakPaused() {
		}

		// 播放進度回調
		// percent爲播放進度0~100,beginPos爲播放音頻在文本中開始位置,endPos表示播放音頻在文本中結束位置.
		public void onSpeakProgress(int percent, int beginPos, int endPos) {
		}

		// 恢復播放回調接口
		public void onSpeakResumed() {
		}

		// 會話事件回調接口
		public void onEvent(int arg0, int arg1, int arg2, Bundle arg3) {
		}

	};
         這樣就可以了。科大訊飛語音SDK還有很多功能,有興趣的朋友可以去看看。

         這是我自己做的Demo截圖:

         

        附上Demo下載地址:點擊打開鏈接


 

            



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章