訊飛離線語音合成(離線資源套件)

來源:互聯網
上載者:User

標籤:語音合成   訊飛   android studio   離線包   

訊飛離線語音合成(離線資源套件)

訊飛的語音合成有三種方式

  1. 線上語音合成(免費)

  2. 離線使用語記語音合成(免費,需要本地裝一個語記App並且下載離線資源)

  3. 使用訊飛離線語音包(付費)

這裡使用離線資源套件實現離線語音合成,因為正式版是要付費的,所以這裡使用試用的離線包(35天試用期、3個裝機量)。

源碼

(Android Studio工程):http://download.csdn.net/detail/q4878802/9063779

開通服務,下載SDK

之前已經介紹過,地址:http://blog.csdn.net/q4878802/article/details/47762169#t8

將SDK裡提供的jar包、so庫、離線資源都拷貝到我們的工程(Android Studio工程)

建立的工程預設可能沒有jniLibs和assets目錄,我們要自己在main下建立這兩個目錄

初始化

在資訊清單檔中application標籤下添加name屬性

android:name=".InitApplication"

初始化

package com.example.kongqw.kqwspeechcompounddemo;import android.app.Application;import android.widget.Toast;import com.iflytek.cloud.SpeechConstant;import com.iflytek.cloud.SpeechUtility;/** * Created by kongqw on 2015/8/29. */public class InitApplication extends Application {    @Override    public void onCreate() {        Toast.makeText(this, "InitApplication", Toast.LENGTH_LONG).show();        // 應用程式入口處調用,避免手機記憶體過小,殺死後台進程後通過曆史intent進入Activity造成SpeechUtility對象為null        // 如在Application中調用初始化,需要在Mainifest中註冊該Applicaiton        // 注意:此介面在非主進程調用會返回null對象,如需在非主進程使用語音功能,請增加參數:SpeechConstant.FORCE_LOGIN+"=true"        // 參數間使用“,”分隔。        // 設定你申請的應用appid        StringBuffer param = new StringBuffer();        param.append("appid=55d33f09");        param.append(",");        param.append(SpeechConstant.ENGINE_MODE + "=" + SpeechConstant.MODE_MSC);        // param.append(",");        // param.append(SpeechConstant.FORCE_LOGIN + "=true");        SpeechUtility.createUtility(InitApplication.this, param.toString());        super.onCreate();    }}
語音合成工具類
package com.example.kongqw.kqwspeechcompounddemo.engine;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;import com.iflytek.cloud.util.ResourceUtil;import com.iflytek.cloud.util.ResourceUtil.RESOURCE_TYPE;import android.content.Context;import android.os.Bundle;import android.util.Log;import android.widget.Toast;/** * 語音合成器 * * @author kongqw */public class KqwSpeechSynthesizer {    // Log標籤    private static final String TAG = "KqwSpeechSynthesizer";    private Context mContext;    // 語音合成對象    private SpeechSynthesizer mTts;    public KqwSpeechSynthesizer(Context context) {        mContext = context;        // 初始化合成對象        mTts = SpeechSynthesizer.createSynthesizer(context, new InitListener() {            @Override            public void onInit(int code) {                Log.d(TAG, "InitListener init() code = " + code);                if (code != ErrorCode.SUCCESS) {                    Toast.makeText(mContext, "初始化失敗,錯誤碼:" + code, Toast.LENGTH_SHORT).show();                }            }        });    }    /**     * 開始語音合成     *     * @param text     */    public void start(String text) {        // 設定參數        setParam();        int code = mTts.startSpeaking(text, mTtsListener);        if (code != ErrorCode.SUCCESS) {            Toast.makeText(mContext, "語音合成失敗,錯誤碼: " + code, Toast.LENGTH_SHORT).show();        }    }    /**     * 合成回調監聽。     */    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) {            Log.i(TAG, "傳衝進度 :" + percent);        }        @Override        public void onSpeakProgress(int percent, int beginPos, int endPos) {            Log.i(TAG, "合成進度 : " + percent);        }        @Override        public void onCompleted(SpeechError error) {            if (error == null) {                Log.i(TAG, "合成完成");            } else if (error != null) {                Log.i(TAG, "error : " + error.toString());            }        }        @Override        public void onEvent(int arg0, int arg1, int arg2, Bundle arg3) {            // TODO Auto-generated method stub        }    };    /**     * 參數設定     *     * @return     */    private void setParam() {        // 清空參數        mTts.setParameter(SpeechConstant.PARAMS, null);        // 設定使用本地引擎        mTts.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_LOCAL);        // 設定發音人資源路徑        mTts.setParameter(ResourceUtil.TTS_RES_PATH, getResourcePath());        // 設定發音人        mTts.setParameter(SpeechConstant.VOICE_NAME, "xiaoyan");        // 設定語速        mTts.setParameter(SpeechConstant.SPEED, "50");        // 設定音調        mTts.setParameter(SpeechConstant.PITCH, "50");        // 設定音量        mTts.setParameter(SpeechConstant.VOLUME, "50");        // 設定播放器音頻流類型        mTts.setParameter(SpeechConstant.STREAM_TYPE, "3");    }    // 擷取發音人資源路徑    private String getResourcePath() {        StringBuffer tempBuffer = new StringBuffer();        // 合成通用資源        tempBuffer.append(ResourceUtil.generateResourcePath(mContext, RESOURCE_TYPE.assets, "tts/common.jet"));        tempBuffer.append(";");        // 發音人資源        tempBuffer.append(ResourceUtil.generateResourcePath(mContext, RESOURCE_TYPE.assets, "tts/xiaoyan.jet"));        return tempBuffer.toString();    }}
測試類別
package com.example.kongqw.kqwspeechcompounddemo;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.widget.EditText;import android.widget.Toast;import com.example.kongqw.kqwspeechcompounddemo.engine.KqwSpeechSynthesizer;public class MainActivity extends Activity {    private EditText mEtText;    private KqwSpeechSynthesizer mKqwSpeechSynthesizer;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mEtText = (EditText) findViewById(R.id.et_text);        // 初始化語音合成對象        mKqwSpeechSynthesizer = new KqwSpeechSynthesizer(this);    }    /**     * 開始合成     *     * @param view     */    public void start(View view) {        Toast.makeText(this, "開始合成 : " + mEtText.getText().toString().trim(), Toast.LENGTH_SHORT).show();        mKqwSpeechSynthesizer.start(mEtText.getText().toString().trim());    }}
XML頁面配置
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context=".MainActivity">    <EditText        android:id="@+id/et_text"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:hint="語音合成的內容"        android:textSize="20dp" />    <Button        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_below="@+id/et_text"        android:gravity="center"        android:onClick="start"        android:text="語音合成"        android:textSize="20dp" /></RelativeLayout>
說明

因為我用的是離線資源套件,試用期是有35天並且只有3個裝機量,所以如果直接使用我的demo可能會有問題,如果要自己再建立一個工程,千萬不要忘記替換APPID、庫、離線資源。

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。所有文章,任何一個技術點,無論是原創還是轉載,都是在程式中使用過或者Demo測試過才發表!博主QQ:4878802。

訊飛離線語音合成(離線資源套件)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.