语音识别、语音合成使用基础(讯飞开放平台)

1.在http://www.xfyun.cn进入讯飞开放平台。

  创建应用  创建完毕  下载SDK(单个或组合下载):选择服务 选择平台 选择自己之前创的应用

2.下载完毕后,将(F:\讯飞开放平台\Android_voice_1098_574d92ab\libs)libs里面的Msc.jar、armeabi复制到项目中

其中在官网的资料库-开发集成-Android平台有教你怎么使用。

例子:

1.布局分布如下

<LinearLayout 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:orientation="vertical"
    tools:context="com.example.yzxvoice.MainActivity" >

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="listen"
        android:text="语音听写(音转句)无提示" />
     <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="listenui"
        android:text="语音听写有(音转句)提示" />

     <TextView
         android:id="@+id/UI1"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:text="tv" />

      <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="speak"
        android:text="语音合成(句转音)" />

</LinearLayout>

2.在工程AndroidManifest.xml文件中添加如下权限:

<!--连接网络权限,用于执行云端语音能力 -->  
<uses-permission android:name="android.permission.INTERNET"/>  
<!--获取手机录音机使用权限,听写、识别、语义理解需要用到此权限 -->  
<uses-permission android:name="android.permission.RECORD_AUDIO"/>  
<!--读取网络信息状态 -->  
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>  
<!--获取当前wifi状态 -->  
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>  
<!--允许程序改变网络连接状态 -->  
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>  
<!--读取手机信息权限 -->  
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>  
<!--读取联系人权限,上传联系人需要用到此权限 -->  
<uses-permission android:name="android.permission.READ_CONTACTS"/>  

3.MainActivity.java

package com.example.yzxvoice;

import com.iflytek.cloud.RecognizerListener;
import com.iflytek.cloud.RecognizerResult;
import com.iflytek.cloud.SpeechConstant;
import com.iflytek.cloud.SpeechError;
import com.iflytek.cloud.SpeechRecognizer;
import com.iflytek.cloud.SpeechSynthesizer;
import com.iflytek.cloud.SpeechUtility;
import com.iflytek.cloud.SynthesizerListener;
import com.iflytek.cloud.ui.RecognizerDialog;
import com.iflytek.cloud.ui.RecognizerDialogListener;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 将“12345678”替换成您申请的APPID,申请地址:http://open.voicecloud.cn
        SpeechUtility.createUtility(this, SpeechConstant.APPID + "=574d92ab");
    }

    /*
     * 语音合成
     */
    public void speak(View v) {
        // 1.创建SpeechSynthesizer对象, 第二个参数:本地合成时传InitListener
        SpeechSynthesizer mTts = SpeechSynthesizer.createSynthesizer(this, null);
        // 2.合成参数设置,详见《科大讯飞MSC API手册(Android)》SpeechSynthesizer 类
        mTts.setParameter(SpeechConstant.VOICE_NAME, "xiaoyan");// 设置发音人
        mTts.setParameter(SpeechConstant.SPEED, "50");// 设置语速
        mTts.setParameter(SpeechConstant.VOLUME, "80");// 设置音量,范围0~100
        mTts.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_CLOUD); // 设置云端
        // 设置合成音频保存位置(可自定义保存位置),保存在“./sdcard/iflytek.pcm”
        // 保存在SD卡需要在AndroidManifest.xml添加写SD卡权限
        // 如果不需要保存合成音频,注释该行代码
        mTts.setParameter(SpeechConstant.TTS_AUDIO_PATH, "./sdcard/iflytek.pcm");
        // 3.开始合成
        mTts.startSpeaking("床前明月光,疑是地上霜,举头望明月,低头思故乡", new MySynListener());
    }

    class MySynListener implements SynthesizerListener {
        // 缓冲进度回调
        // percent为缓冲进度0~100,beginPos为缓冲音频在文本中开始位置,endPos表示缓冲音频在文本中结束位置,info为附加信息。
        @Override
        public void onBufferProgress(int percent, int beginPos, int endPos, String info) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onCompleted(SpeechError arg0) {
            // TODO Auto-generated method stub

        }

        // 会话事件回调接口
        @Override
        public void onEvent(int arg0, int arg1, int arg2, Bundle arg3) {
            // TODO Auto-generated method stub

        }

        // 开始播放
        @Override
        public void onSpeakBegin() {
            // TODO Auto-generated method stub

        }

        // 暂停播放
        @Override
        public void onSpeakPaused() {
            // TODO Auto-generated method stub

        }

        // 播放进度回调
        // percent为播放进度0~100,beginPos为播放音频在文本中开始位置,endPos表示播放音频在文本中结束位置.
        @Override
        public void onSpeakProgress(int percent, int beginPos, int endPos) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onSpeakResumed() {
            // TODO Auto-generated method stub

        }

    }

    /*
     * 语音听写(有提示)
     */
    public void listenui(View v) {
        // 1.创建SpeechRecognizer对象,第二个参数:本地听写时传InitListener
        RecognizerDialog iatDialog = new RecognizerDialog(this, null);
        // 2.设置听写参数,同上节
        iatDialog.setParameter(SpeechConstant.DOMAIN, "iat");
        iatDialog.setParameter(SpeechConstant.LANGUAGE, "zh_cn");
        iatDialog.setParameter(SpeechConstant.ACCENT, "mandarin ");
        // 3.设置回调接口
        iatDialog.setListener(new MyRecognizerDialogListener());
        // 4.开始听写
        iatDialog.show();
    }

    class MyRecognizerDialogListener implements RecognizerDialogListener {

        @Override
        public void onError(SpeechError arg0) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onResult(RecognizerResult result, boolean arg1) {
            // TODO Auto-generated method stub
            System.out.println("ui:" + result.getResultString());
            TextView tv = (TextView) findViewById(R.id.UI1);
            tv.append(result.getResultString());
        }

    }

    /*
     * 语音听写(无提示)
     */
    public void listen(View v) {
        // 1.创建SpeechRecognizer对象,第二个参数:本地听写时传InitListener
        SpeechRecognizer mIat = SpeechRecognizer.createRecognizer(this, null);
        // 2.设置听写参数,详见《科大讯飞MSC API手册(Android)》SpeechConstant类
        mIat.setParameter(SpeechConstant.DOMAIN, "iat");
        mIat.setParameter(SpeechConstant.LANGUAGE, "zh_cn");
        mIat.setParameter(SpeechConstant.ACCENT, "mandarin ");
        // 3.开始听写
        mIat.startListening(new MyRecoListenerListener());
        // 听写监听器
    }

    class MyRecoListenerListener implements RecognizerListener {

        @Override
        public void onBeginOfSpeech() {
            // TODO Auto-generated method stub

        }

        // 结束录音
        @Override
        public void onEndOfSpeech() {
            // TODO Auto-generated method stub

        }

        @Override
        public void onError(SpeechError arg0) {
            // TODO Auto-generated method stub

        }

        // 扩展用接口
        @Override
        public void onEvent(int arg0, int arg1, int arg2, Bundle arg3) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onResult(RecognizerResult result, boolean arg1) {
            // TODO Auto-generated method stub
            System.out.println(result.getResultString());
        }

        // 音量值0~30
        @Override
        public void onVolumeChanged(int volume, byte[] arg1) {
            // TODO Auto-generated method stub

        }

    }
}

  

posted @ 2016-06-01 14:10  沉默的羊癫疯  阅读(3522)  评论(0编辑  收藏  举报