Android——百度语音唤醒

来源:互联网 发布:linux 虚拟文件 编辑:程序博客网 时间:2024/04/27 19:40

这篇文章我们主要介绍一下,百度语音唤醒。所谓语音唤醒是指说出指定的语音指令(自定义的唤醒词),使程序激活某个功能的能力。百度语音唤醒支持自定义唤醒词。我做过讯飞的语音唤醒,这两个比较起来,讯飞的语音唤醒整体效果比百度要好。百度的语音唤醒功能需要使用唤醒词评估工具评估和导出唤醒资源,也就是一个名字为WakeUp.bin的文件,在评估唤醒词的过程中,对于不建议用作唤醒词的词语,唤醒效果不好。而讯飞的语音唤醒词中没有评估这一步,二是直接导出一个*.jet的文件。使用同样的唤醒词在两个平台上分别测试,总体还是讯飞更好。
自定义唤醒词制作
我们这里介绍百度的语音唤醒的主要目的在于,百度语音唤醒是免费的,好像免费的时间也不太长。

百度语音唤醒SDK和lib文件是和语音识别在一起的,上篇博文我已经介绍了关于百度语音识别相关内容,这里我就不重复了。如果大家有疑问可以看一下这篇博文。这里还要注意一点是,我们需要将上面自定义的唤醒词,也就是通过百度导出的WakeUp.bin文件放到Android工程的assets目录下。SDK会到这一目录下寻找这个文件,如果没有,你的唤醒功能将不能够实现。

百度语音唤醒功能实现主要有三个步骤:

步骤一:创建唤醒时间管理器

EventManager wakeup = EventManagerFactory.create(ActivityWakeUp.this, "wp");

步骤二:注册唤醒时间监听器

mWpEventManager.registerListener(new EventListener() {    @Override    public void onEvent(String name, String params, byte[] data, int offset, int length) {    }});

步骤三:启动唤醒功能

HashMap params = new HashMap();params.put("kws-file", "assets:///WakeUp.bin"); // 设置唤醒资源, 唤醒资源请到 http://yuyin.baidu.com/wake#m4 来评估和导出mWpEventManager.send("wp.start", new JSONObject(params).toString(), null, 0, 0);

最后还有一点:关闭唤醒

mWpEventManager.send("wp.stop", null, null, 0, 0);

完整的代码如下:

package com.BDXCW;import java.util.HashMap;import org.json.JSONException;import org.json.JSONObject;import android.content.Context;import android.util.AndroidRuntimeException;import android.util.Log;import com.baidu.speech.EventListener;import com.baidu.speech.EventManager;import com.baidu.speech.EventManagerFactory;public class MyWakeUp {    public static final String TAG = MyWakeUp.class.getSimpleName();    private EventManager mWpEventManager;    private Context context;    /**     * 唤醒构造方法     * @param context 一个上下文对象     */    public MyWakeUp(Context context) {        this.context = context;        //create方法示是一个静态方法,还有一个重载方法EventManagerFactory.create(context, name, version)        //由于百度文档没有给出每个参数具体含义,我们只能按照官网给的demo写了        mWpEventManager = EventManagerFactory.create(context, "wp");        //注册监听事件        mWpEventManager.registerListener(new MyEventListener());    }    /**     * 开启唤醒功能     */     public void start() {        HashMap<String, String> params = new HashMap<String, String>();        // 设置唤醒资源, 唤醒资源请到 http://yuyin.baidu.com/wake#m4 来评估和导出        params.put("kws-file", "assets:///WakeUp.bin");         mWpEventManager.send("wp.start", new JSONObject(params).toString(), null, 0, 0);        Log.d(TAG, "----->唤醒已经开始工作了");    }     /**      * 关闭唤醒功能      */     public void stop() {         // 具体参数的百度没有具体说明,大体需要以下参数         // send(String arg1, byte[] arg2, int arg3, int arg4)         mWpEventManager.send("wp.stop", null, null, 0, 0);         Log.d(TAG, "----->唤醒已经停止");    }    private class MyEventListener implements EventListener    {        @Override        public void onEvent(String name, String params, byte[] data, int offset, int length) {             try {                 //解析json文件                 JSONObject json = new JSONObject(params);                 if ("wp.data".equals(name)) { // 每次唤醒成功, 将会回调name=wp.data的时间, 被激活的唤醒词在params的word字段                     String word = json.getString("word"); // 唤醒词                     /*                      * 这里大家可以根据自己的需求实现唤醒后的功能,这里我们简单打印出唤醒词                      */                     Log.d(TAG, word);                 } else if ("wp.exit".equals(name)) {                     // 唤醒已经停止                 }             } catch (JSONException e) {                 throw new AndroidRuntimeException(e);             }        }    }

相比讯飞的语音唤醒,百度的语音唤醒的代码还是比较简单的,有过有时间我会把讯飞的语音唤醒整理出来。由于百度语音唤醒开放时间比较短,网上的资源也比较少,目前只有这么多,希望以上内容对你有所帮助。

版权说有,转载希望表明出处,谢谢!!

2 0
原创粉丝点击