日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关于安卓的语音包

發布時間:2024/3/24 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于安卓的语音包 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我這個項目中需要的是語音合成功能 然后我就用的百度語音包
主要操作如下:

  • 引用lib
  • 引用asset
    ★注意的一點是:要在project模式下建立 否則顯示不粗來
  • 在manifest里要加上如下代碼
  • <uses-permission android:name="android.permission.INTERNET"/><!--離線語音包--><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.WRITE_SETTINGS" /><uses-permission android:name="android.permission.READ_PHONE_STATE" /><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> //百度語音合成客戶端public SpeechSynthesizer mSpeechSynthesizer;private String mSampleDirPath;private static final String SAMPLE_DIR_NAME = "baiduTTS";private static final String SPEECH_FEMALE_MODEL_NAME = "bd_etts_speech_female.dat";private static final String SPEECH_MALE_MODEL_NAME = "bd_etts_speech_male.dat";private static final String TEXT_MODEL_NAME = "bd_etts_text.dat";private static final String LICENSE_FILE_NAME = "temp_license_2016-04-05";private static final String ENGLISH_SPEECH_FEMALE_MODEL_NAME = "bd_etts_speech_female_en.dat";private static final String ENGLISH_SPEECH_MALE_MODEL_NAME = "bd_etts_speech_male_en.dat";private static final String ENGLISH_TEXT_MODEL_NAME = "bd_etts_text_en.dat";private static final String APP_ID = "10180883";//請更換為自己創建的應用private static final String API_KEY = "zfCv5heatrBGSWq1juASHGcX";//請更換為自己創建的應用private static final String SECRET_KEY = "GdXLRxh4W79um1s43IQEzYU2WQqcu98Q";//請更換為自己創建的應用

    主要語音包程序

    //語音合成/*** 初始化語音合成客戶端并啟動*/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);

    總結

    以上是生活随笔為你收集整理的关于安卓的语音包的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。