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);會出錯。

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