1. 程式人生 > >Android 科大訊飛語音整合,文字轉語音

Android 科大訊飛語音整合,文字轉語音

前言:

記錄一下科大訊飛的文字轉語音功能的sdk的整合過程,希望能夠幫助到大家。

1. 登入官網,應用註冊。

訊飛開放平臺,進行簡單的開發者註冊。進入個人中心,註冊應用。
這裡寫圖片描述
註冊完成後,我們可以看到自己的appid。選擇自己要開通的功能,然後下載sdk。

2. 專案整合

官網下載的程式碼包含了lib,document,sample,(沒有AS版本真的有點low)
將lib的so檔案和jar放入你的專案中,

這裡寫圖片描述

檢視doc中的文件,

這裡寫圖片描述

主要是箭頭所指那個,有詳細的介紹。
文字轉語音的demo程式碼主要是:

這裡寫圖片描述

3.專案程式碼

看看我的專案中是如何整合該程式碼的。

1.許可權(自己看)

2.appid註冊。
在application的初始化中進行註冊(千萬不能忘記)

SpeechUtility.createUtility(getApplicationContext(), SpeechConstant.APPID +"=appid");

3.工具類

public class VoiceUtils {
    private static VoiceUtils mVoice;
    public static VoiceUtils getInstance(){
        synchronized (VoiceUtils.class){
            if
(null==mVoice){ mVoice=new VoiceUtils(); } return mVoice; } } // 語音合成物件 private SpeechSynthesizer mTts; // 預設發音人 private String voicer = "xiaoyan"; //初始化監聽器 private InitListener Listener; //播放監聽器 private SynthesizerListener mSynthesizerListener; public
void initmTts(Context context, final String msg){ if(null==Listener){ Listener=new InitListener() { @Override public void onInit(int code) { if (code != ErrorCode.SUCCESS) { } else { // 初始化成功,之後可以呼叫startSpeaking方法 // 注:有的開發者在onCreate方法中建立完合成物件之後馬上就呼叫startSpeaking進行合成, // 正確的做法是將onCreate中的startSpeaking呼叫移至這裡 mTts.startSpeaking(msg,mSynthesizerListener); } } }; } if(null==mSynthesizerListener){ mSynthesizerListener= new SynthesizerListener() { @Override public void onSpeakBegin() { } @Override public void onBufferProgress(int i, int i1, int i2, String s) { } @Override public void onSpeakPaused() { } @Override public void onSpeakResumed() { } @Override public void onSpeakProgress(int i, int i1, int i2) { } @Override public void onCompleted(SpeechError speechError) { } @Override public void onEvent(int i, int i1, int i2, Bundle bundle) { } }; } if(null==mTts){ mTts=SpeechSynthesizer.createSynthesizer(context, Listener); mTts.setParameter(SpeechConstant.VOICE_NAME,voicer); mTts.setParameter(SpeechConstant.SPEED,"50"); mTts.setParameter(SpeechConstant.VOLUME,"80"); mTts.setParameter(SpeechConstant.ENGINE_TYPE,SpeechConstant.TYPE_CLOUD); }else { mTts.startSpeaking(msg,mSynthesizerListener); } } }

單例很重要,不然只有第一次有用,mTts.setParameter(SpeechConstant.ENGINE_TYPE,SpeechConstant.TYPE_CLOUD);不能寫成
mTts.setParameter(SpeechConstant.ENGINE_TYPE,SpeechConstant.TYPE_LOCAL);會出錯。