关于安卓的语音包
我這個項目中需要的是語音合成功能 然后我就用的百度語音包
主要操作如下:
★注意的一點是:要在project模式下建立 否則顯示不粗來
主要語音包程序
//語音合成/*** 初始化語音合成客戶端并啟動*/private void initialTts() {//獲取語音合成對象實例this.mSpeechSynthesizer = SpeechSynthesizer.getInstance();//設置Contextthis.mSpeechSynthesizer.setContext(this);//設置語音合成狀態監聽this.mSpeechSynthesizer.setSpeechSynthesizerListener(this);//文本模型文件路徑 (離線引擎使用)this.mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_TTS_TEXT_MODEL_FILE, mSampleDirPath + "/"+ TEXT_MODEL_NAME);//聲學模型文件路徑 (離線引擎使用)this.mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_TTS_SPEECH_MODEL_FILE, mSampleDirPath + "/"+ SPEECH_FEMALE_MODEL_NAME);//本地授權文件路徑,如未設置將使用默認路徑.設置臨時授權文件路徑,LICENCE_FILE_NAME請替換成臨時授權文件的實際路徑,//僅在使用臨時license文件時需要進行設置,如果在[應用管理]中開通了離線授權,//不需要設置該參數,建議將該行代碼刪除(離線引擎)this.mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_TTS_LICENCE_FILE, mSampleDirPath + "/"+ LICENSE_FILE_NAME);//請替換為語音開發者平臺上注冊應用得到的App ID (離線授權)this.mSpeechSynthesizer.setAppId(APP_ID);// 請替換為語音開發者平臺注冊應用得到的apikey和secretkey (在線授權)this.mSpeechSynthesizer.setApiKey(API_KEY, SECRET_KEY);//發音人(在線引擎),可用參數為0,1,2,3//發音大小this.mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_VOLUME,"9");//(服務器端會動態增加,各值含義參考文檔,以文檔說明為準。0--普通女聲,1--普通男聲,2--特別男聲,3--情感男聲。。。)this.mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_SPEAKER, "0");// 設置Mix模式的合成策略this.mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_MIX_MODE, SpeechSynthesizer.MIX_MODE_DEFAULT);// 授權檢測接口(可以不使用,只是驗證授權是否成功)AuthInfo authInfo = this.mSpeechSynthesizer.auth(TtsMode.MIX);if (authInfo.isSuccess()) {Log.i(TAG, ">>>auth success.");} else {String errorMsg = authInfo.getTtsError().getDetailMessage();Log.i(TAG, ">>>auth failed errorMsg: " + errorMsg);}// 引擎初始化tts接口mSpeechSynthesizer.initTts(TtsMode.MIX);// 加載離線英文資源(提供離線英文合成功能)int result =mSpeechSynthesizer.loadEnglishModel(mSampleDirPath + "/" + ENGLISH_TEXT_MODEL_NAME, mSampleDirPath+ "/" + ENGLISH_SPEECH_FEMALE_MODEL_NAME);Log.i(TAG, ">>>loadEnglishModel result: " + result);}@Overridepublic void onSynthesizeStart(String s) {//監聽到合成開始Log.i(TAG, ">>>onSynthesizeStart()<<< s: " + s);}@Overridepublic void onSynthesizeDataArrived(String s, byte[] bytes, int i) {//監聽到有合成數據到達Log.i(TAG, ">>>onSynthesizeDataArrived()<<< s: " + s);}@Overridepublic void onSynthesizeFinish(String s) {//監聽到合成結束Log.i(TAG, ">>>onSynthesizeFinish()<<< s: " + s);}@Overridepublic void onSpeechStart(String s) {//監聽到合成并開始播放Log.i(TAG, ">>>onSpeechStart()<<< s: " + s);}@Overridepublic void onSpeechProgressChanged(String s, int i) {//監聽到播放進度有變化Log.i(TAG, ">>>onSpeechProgressChanged()<<< s: " + s);}@Overridepublic void onSpeechFinish(String s) {//監聽到播放結束Log.i(TAG, ">>>onSpeechFinish()<<< s: " + s);}@Overridepublic void onError(String s, SpeechError speechError) {//監聽到出錯Log.i(TAG, ">>>onError()<<< description: " + speechError.description + ", code: " + speechError.code);}private void initialEnv() {if (mSampleDirPath == null) {String sdcardPath = Environment.getExternalStorageDirectory().toString();mSampleDirPath = sdcardPath + "/" + SAMPLE_DIR_NAME;}File file = new File(mSampleDirPath);if (!file.exists()) {file.mkdirs();}copyFromAssetsToSdcard(false, SPEECH_FEMALE_MODEL_NAME, mSampleDirPath + "/" + SPEECH_FEMALE_MODEL_NAME);copyFromAssetsToSdcard(false, SPEECH_MALE_MODEL_NAME, mSampleDirPath + "/" + SPEECH_MALE_MODEL_NAME);copyFromAssetsToSdcard(false, TEXT_MODEL_NAME, mSampleDirPath + "/" + TEXT_MODEL_NAME);copyFromAssetsToSdcard(false, LICENSE_FILE_NAME, mSampleDirPath + "/" + LICENSE_FILE_NAME);copyFromAssetsToSdcard(false, "english/" + ENGLISH_SPEECH_FEMALE_MODEL_NAME, mSampleDirPath + "/"+ ENGLISH_SPEECH_FEMALE_MODEL_NAME);copyFromAssetsToSdcard(false, "english/" + ENGLISH_SPEECH_MALE_MODEL_NAME, mSampleDirPath + "/"+ ENGLISH_SPEECH_MALE_MODEL_NAME);copyFromAssetsToSdcard(false, "english/" + ENGLISH_TEXT_MODEL_NAME, mSampleDirPath + "/"+ ENGLISH_TEXT_MODEL_NAME);}/*** 將工程需要的資源文件拷貝到SD卡中使用(授權文件為臨時授權文件,請注冊正式授權)** @param isCover 是否覆蓋已存在的目標文件* @param source* @param dest*/public void copyFromAssetsToSdcard(boolean isCover, String source, String dest) {File file = new File(dest);if (isCover || (!isCover && !file.exists())) {InputStream is = null;FileOutputStream fos = null;try {is = getResources().getAssets().open(source);String path = dest;fos = new FileOutputStream(path);byte[] buffer = new byte[1024];int size = 0;while ((size = is.read(buffer, 0, 1024)) >= 0) {fos.write(buffer, 0, size);}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {if (fos != null) {try {fos.close();} catch (IOException e) {e.printStackTrace();}}try {if (is != null) {is.close();}} catch (IOException e) {e.printStackTrace();}}}}@Overrideprotected void onDestroy() {this.mSpeechSynthesizer.release();//釋放資源super.onDestroy();}在主程序里寫:
lv = (ListView)findViewById( android.R.id.list );lv.setAdapter( adapter );String ct="XXXXXXX";mSpeechSynthesizer.speak(ct);總結
- 上一篇: 如何做出一份赏心悦目的PPT
- 下一篇: Vue如何支持JSX语法