讯飞语音的使用(android studio)

最近在做项目中有一个需求就是要将语音转化为文字,所以就选择使用了讯飞语音,教程虽然看起开来简单,可是里面的坑还是有的,搞了半天才算完工。

首先,在讯飞平台登录,然后在产品服务那块选择在线语音合成,然后点击使用服务,创建你的应用,注意:应用名要与你的本地应用名义一致,然后就可以选择你想下载的SDK。下载完之后进行解压,把文件中的libs文件夹下的Jar包放到你的项目的jar包,然添加一下。在main目录下创建名字为jniLibs文件,再把除了Jar包的其他文件放到这个目录下。在清单配置文件添加相对应的权限:

 <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.CAMERA"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.RECORD_AUDIO"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <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"/>
    <uses-permission android:name="android.permission.WRITE_SETTINGS"/>
    <uses-permission android:name="android.permission.LOCATION_HARDWARE"/>
接下来开始写代码:

(1)初始化语音引擎:

SpeechUtility.createUtility(this, SpeechConstant.APPID + "=你当时创建应用的appid");
(2)设置参数:
	SpeechRecognizer mIat = SpeechRecognizer.createRecognizer(this, null);
        mIat.setParameter(SpeechConstant.DOMAIN, "iat");
        mIat.setParameter(SpeechConstant.LANGUAGE, "zh_ch");//中文
        mIat.setParameter(SpeechConstant.ACCENT, "mandarin");//普通话
参数的设置可以参考它提供的使用手册,在你下载的doc文件夹中。

(3)开始语音:

	mIat.startListening(mListener);
这里需要传入一个监听,代码为:
 private RecognizerListener mListener = new RecognizerListener() {
        //转化结果	isLast:true表示语音结束
        @Override
        public void onResult(RecognizerResult result, boolean isLast) {
            Log.i("TAG", "onResult: " + result.getResultString());
            Log.i("TAG", "onResult: 哈哈哈哈哈");
        }

        //语音音量 :i:音量
        @Override
        public void onVolumeChanged(int i, byte[] bytes) {

        }

        //开始
        @Override
        public void onBeginOfSpeech() {
            Log.i("TAG", "onBeginOfSpeech: ");
        }

        //结束
        @Override
        public void onEndOfSpeech() {
            Log.i("TAG", "onEndOfSpeech: ");
        }

        //会话发生错误
        @Override
        public void onError(SpeechError speechError) {
            Log.e("TAG", "onError: "+speechError.toString());
        }
	//留给扩展用的
        @Override
        public void onEvent(int i, int i1, int i2, Bundle bundle) {

        }
    };
每个方法的作用都对应有注释。

我们还可以使用它提供给我们的语音交互弹窗动画,初始化步骤跟前面一样:

 	//UI交互动画
        RecognizerDialog iatDialog=new RecognizerDialog(this,initListner);
        iatDialog.setParameter(SpeechConstant.DOMAIN, "iat");
        iatDialog.setParameter(SpeechConstant.LANGUAGE, "zh_ch");
        iatDialog.setParameter(SpeechConstant.ACCENT, "mandarin");

        iatDialog.setListener(dialogListner);
        iatDialog.show();
其中RecognizerDialog传入的第二个参数是初始化监听,可以不用在实现做任何操作为:
	InitListener initListner=new InitListener() {
        @Override
        public void onInit(int i) {

        }
    };
dialogListener是交互的监听:
 RecognizerDialogListener dialogListner=new RecognizerDialogListener() {
        @Override
        public void onResult(RecognizerResult result, boolean isLast) {
            Log.i("SENDI", "onResult: "+result.getResultString());
        }

        @Override
        public void onError(SpeechError speechError) {
		Log.i("TAG", "onError: "+speechError.getMessage());
        }
    };

关于语音转文字获得的数据视为Json格式的,所以可以根据它返回的数据模型进行相应的封装和解析。

我的解析是这样的:

先将封装成一个对象

/**
 * 语音信息
 * Created by Administrator on 2017/5/25.
 */

public class VoiceData {
    /**
     * sn : 2
     * ls : true
     * bg : 0
     * ed : 0
     * ws : [{"bg":0,"cw":[{"sc":0,"w":"小花"}]},{"bg":0,"cw":[{"sc":0,"w":"猫"}]},{"bg":0,"cw":[{"sc":0,"w":"。"}]}]
     */

    private List<WsBean> ws;

    public List<WsBean> getWs() {
        return ws;
    }

    public void setWs(List<WsBean> ws) {
        this.ws = ws;
    }

    public static class WsBean {
        /**
         * bg : 0
         * cw : [{"sc":0,"w":"小花"}]
         */

        private List<CwBean> cw;

        @Override
        public String toString() {
            return "WsBean{" +
                    "cw=" + cw +
                    '}';
        }

        public List<CwBean> getCw() {
            return cw;
        }

        public void setCw(List<CwBean> cw) {
            this.cw = cw;
        }

        public static class CwBean {
            /**
             * sc : 0.0
             * w : 小花
             */

            private String w;

            public String getW() {
                return w;
            }

            public void setW(String w) {
                this.w = w;
            }

            @Override
            public String toString() {
                return "CwBean{" +
                        "w='" + w + '\'' +
                        '}';
            }
        }
    }

    @Override
    public String toString() {
        return "VoiceData{" +
                "ws=" + ws +
                '}';
    }
}
然后用Gson将数据转成该对象:
 public static String getWord(String result){
        Gson gson=new Gson();
        VoiceData vData=gson.fromJson(result, VoiceData.class);
        StringBuffer sb=new StringBuffer();
        for (VoiceData.WsBean ws : vData.getWs()) {
            for (VoiceData.WsBean.CwBean cw: ws.getCw()) {
                sb.append(cw.getW());
            }
        }

        return sb.toString();
    }

附上使用时各个错误的 编码表



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值