这篇博客主要讲解一下科大讯飞的语音唤醒的使用
科大讯飞语音唤醒可以运用到很多场景也是AI的第一步 , 比如叮咚音响 ,智能风扇一些之类的,我之前项目需要做这样的一个需求!然后根据科大讯飞的Dome去集成的!
那我们现在开始讲该怎么用了 ! 前面集成SDK就不说了,网上有很多这种集成的案列 , 或者跟着官网的API去做也可以,我这里主要写一下代码的实现!
代码:
@Override public void onCreate() { StringBuffer param = new StringBuffer(); param.append("appid=" + getString(R.string.app_id)); param.append(","); // 设置使用v5+ param.append(SpeechConstant.ENGINE_MODE + "=" + SpeechConstant.MODE_MSC); SpeechUtility.createUtility(Global.this, param.toString()); // 初始化唤醒对象 mIvw = VoiceWakeuper.createWakeuper(Global.this, null); initData(); super.onCreate(); } private void initData() { //非空判断,防止因空指针使程序崩溃 mIvw = VoiceWakeuper.getWakeuper(); if (mIvw != null) { // 清空参数 mIvw.setParameter(SpeechConstant.PARAMS, null); // 唤醒门限值,根据资源携带的唤醒词个数按照“id:门限;id:门限”的格式传入 mIvw.setParameter(SpeechConstant.IVW_THRESHOLD, "0:" + curThresh); // 设置唤醒模式 mIvw.setParameter(SpeechConstant.IVW_SST, "wakeup"); // 设置持续进行唤醒 mIvw.setParameter(SpeechConstant.KEEP_ALIVE, keep_alive); // 设置闭环优化网络模式 mIvw.setParameter(SpeechConstant.IVW_NET_MODE, ivwNetMode); // 设置唤醒资源路径 mIvw.setParameter(SpeechConstant.IVW_RES_PATH, getResource()); // 设置唤醒录音保存路径,保存最近一分钟的音频 mIvw.setParameter(SpeechConstant.IVW_AUDIO_PATH, Environment.getExternalStorageDirectory().getPath() + "/msc/ivw.wav"); mIvw.setParameter(SpeechConstant.AUDIO_FORMAT, "wav"); // 如有需要,设置 NOTIFY_RECORD_DATA 以实时通过 onEvent 返回录音音频流字节 //mIvw.setParameter( SpeechConstant.NOTIFY_RECORD_DATA, "1" ); // 启动唤醒 mIvw.startListening(mWakeuperListener); } else { } } /** * 唤醒后的回调 */ private WakeuperListener mWakeuperListener = new WakeuperListener() { /** * 唤醒完成 * @param result */ @Override public void onResult(WakeuperResult result) { //在这里面做你唤醒后的操作 } /** *唤醒失败 * @param error */ @Override public void onError(SpeechError error) { } /** * 唤醒开始 */ @Override public void onBeginOfSpeech() { } @Override public void onEvent(int eventType, int isLast, int arg2, Bundle obj) { switch (eventType) { // EVENT_RECORD_DATA 事件仅在 NOTIFY_RECORD_DATA 参数值为 真 时返回 case SpeechEvent.EVENT_RECORD_DATA: final byte[] audio = obj.getByteArray(SpeechEvent.KEY_EVENT_RECORD_DATA); Log.i(TAG, "ivw audio length: " + audio.length); break; } } @Override public void onVolumeChanged(int volume) { } }; private String getResource() { final String resPath = ResourceUtil.generateResourcePath(Global.this, ResourceUtil.RESOURCE_TYPE.assets, "ivw/" + getString(R.string.app_id) + ".jet"); Log.d(TAG, "resPath: " + resPath); return resPath; } /** * 唤醒手机屏幕并解锁 */ public void wakeUpAndUnlock() { // 获取电源管理器对象 PowerManager pm = (PowerManager) Global.this.getSystemService(Context.POWER_SERVICE); boolean screenOn = pm.isScreenOn(); if (!screenOn) { // 获取PowerManager.WakeLock对象,后面的参数|表示同时传入两个值,最后的是LogCat里用的Tag PowerManager.WakeLock wl = pm.newWakeLock( PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "bright"); wl.acquire(10000); // 点亮屏幕 wl.release(); // 释放 } // 屏幕解锁 KeyguardManager keyguardManager = (KeyguardManager) Global.this.getSystemService(KEYGUARD_SERVICE); KeyguardManager.KeyguardLock keyguardLock = keyguardManager.newKeyguardLock("unLock"); // 屏幕锁定 keyguardLock.reenableKeyguard(); keyguardLock.disableKeyguard(); // 解锁 }
以上就是唤醒的代码实现
如果还有不清楚的可以在下评论,留言!