訊飛語音語音合成輔助類

個人網站:極客時代

下載訊飛語音的SDK,例子中的代碼都是在Activity中實現的,只針對那一個Activity,但是我們實際開發的時候,有時候會在多個地方用到,所以,把這些代碼單獨拿出來,會比較利於代碼的複用,提高開發效率,減少代碼冗餘。

下面貼出語音合成的代碼:

package com.Ray.assistwModel;

import android.content.Context;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.widget.Toast;

import com.iflytek.cloud.ErrorCode;
import com.iflytek.cloud.InitListener;
import com.iflytek.cloud.SpeechConstant;
import com.iflytek.cloud.SpeechError;
import com.iflytek.cloud.SpeechSynthesizer;
import com.iflytek.cloud.SynthesizerListener;


public class ReadContent {
    // Log標籤
    private static final String TAG = "tag";
    // 上下文
    private Context mContext;
    // 語音合成對象
    private static SpeechSynthesizer mTts;

    /**
     * 發音人
     */
    public final static String[] COLOUD_VOICERS_ENTRIES = {"小燕", "小宇", "凱瑟琳", "亨利", "瑪麗", "小研", "小琪", "小峯", "小梅", "小莉", "小蓉", "小芸", "小坤", "小強 ", "小瑩",
            "小新", "楠楠", "老孫",};
    public final static String[] COLOUD_VOICERS_VALUE = {"xiaoyan", "xiaoyu", "catherine", "henry", "vimary", "vixy", "xiaoqi", "vixf", "xiaomei",
            "xiaolin", "xiaorong", "xiaoqian", "xiaokun", "xiaoqiang", "vixying", "xiaoxin", "nannan", "vils",};


    /**
     * 構造方法
     *
     * @param context
     */
    public ReadContent(Context context) {
        // 上下文
        mContext = context;
        // 初始化合成對象
        mTts = SpeechSynthesizer.createSynthesizer(mContext, new InitListener() {
            @Override
            public void onInit(int code) {
                if (code != ErrorCode.SUCCESS) {
                    Log.i(TAG, "初始化失敗,錯誤碼:" + code);
                }
            }
        });
    }

    /**
     * 開始合成
     *
     * @param text
     */
    public void speaking(String text) {
        // 非空判斷
        if (TextUtils.isEmpty(text)) {
            return;
        }
        int code = mTts.startSpeaking(text, mTtsListener);
        if (code != ErrorCode.SUCCESS) {
            if (code == ErrorCode.ERROR_COMPONENT_NOT_INSTALLED) {
                Toast.makeText(mContext, "沒有安裝語音+ code = " + code, Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(mContext, "語音合成失敗,錯誤碼: " + code, Toast.LENGTH_SHORT).show();
            }
        }


    }

    /*
     * 停止語音播報
     */
    public static void stopSpeaking() {
        // 對象非空並且正在說話
        if (null != mTts && mTts.isSpeaking()) {
            // 停止說話
            mTts.stopSpeaking();
        }
    }

    /**
     * 判斷當前有沒有說話
     *
     * @return
     */
    public static boolean isSpeaking() {
        if (null != mTts) {
            return mTts.isSpeaking();
        } else {
            return false;
        }
    }

    /**
     * 合成回調監聽。
     */
    private SynthesizerListener mTtsListener = new SynthesizerListener() {
        @Override
        public void onSpeakBegin() {
            Log.i(TAG, "開始播放");
        }

        @Override
        public void onSpeakPaused() {
            Log.i(TAG, "暫停播放");
        }

        @Override
        public void onSpeakResumed() {
            Log.i(TAG, "繼續播放");
        }

        @Override
        public void onBufferProgress(int percent, int beginPos, int endPos, String info) {
            // TODO 緩衝的進度
            Log.i(TAG, "緩衝 : " + percent);
        }

        @Override
        public void onSpeakProgress(int percent, int beginPos, int endPos) {
            // TODO 說話的進度
            Log.i(TAG, "合成 : " + percent);
        }

        @Override
        public void onCompleted(SpeechError error) {
            if (error == null) {
                Log.i(TAG, "播放完成");

            } else if (error != null) {
                Log.i(TAG, error.getPlainDescription(true));
            }

        }

        @Override
        public void onEvent(int eventType, int arg1, int arg2, Bundle obj) {

        }
    };

    /**
     * 參數設置
     *
     * @return
     */
    private void setParam() {
        // 清空參數
        mTts.setParameter(SpeechConstant.PARAMS, null);
        // 引擎類型 網絡
        mTts.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_CLOUD);
        // 設置發音人
        mTts.setParameter(SpeechConstant.VOICE_NAME, COLOUD_VOICERS_VALUE[0]);
        // 設置語速
        mTts.setParameter(SpeechConstant.SPEED, "50");
        // 設置音調
        mTts.setParameter(SpeechConstant.PITCH, "50");
        // 設置音量
        mTts.setParameter(SpeechConstant.VOLUME, "100");
        // 設置播放器音頻流類型
        mTts.setParameter(SpeechConstant.STREAM_TYPE, "3");

       
    }
}

使用方法:直接聲明一個該類的對象,傳入context對象:

如ReadContent readContent=new ReadContent(getActivity());

然後調用speaking方法:readContent.speaking();


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