Android 基于百度语音的语音交互功能

项目里面用到了语音唤醒功能,前面一直在用讯飞的语音识别,本来打算也是直接用讯飞的语音唤醒,但是讯飞的语音唤醒要收费,试用版只有35天有效期。只好改用百度语音,百度语音所有功能免费,功能也比较简单实用,包括语音识别,语音合成和语音唤醒,正好可以组成一套完整的语音交互功能。

效果图:

这里写图片描述

首先是语音唤醒功能,说出关键词即可叫语音识别,唤醒成功会有语音提示,这里采用了百度语音的合成功能。然后百度语音识别会根据wifi情况自动切换在线或者离线识别,但是离线识别只能识别已经导入的关键词,而且离线第一次识别需要联网,识别成功,同样会有语音提示。效果图gif没有声音,Toast显示的时候就是语音提示的内容。

这里说一点,百度语音的demo里给的语音唤醒是在onResume()开始唤醒监听,唤醒成功后在onPause()里就停止唤醒监听。而我现在要在唤醒成功后弹出语音识别的UI界面,所以弹出UI的同时就会停止唤醒监听。如果语音识别成功,UI界面消失,唤醒监听会重新开始,此时说出唤醒词即可重新唤醒。但是如果识别失败,封装好的UI界面会变成下图情况,这时候就要手动点击重试或者取消才可以,不符合全语音交互的理念。为了解决这个情况,要将停止唤醒监听写到onStop()里,这样即使语音识别失败,也可以重新唤醒。

这里写图片描述

具体的集成步骤官方文档里都有,也可以参考下面的文章

http://blog.csdn.net/kjunchen/article/details/51093134

注:我这里语音识别和语音合成都用到了,所以官网下的两个sdk都要导入到工程里,这里还有个小问题,正常来说,Jar包导入到工程之后,还要将assert和jniLibs文件夹放到工程里,我这里只放了语音识别的assert文件夹,jniLibs文件夹我都没放入工程里,这样可以使用。如果我将语音识别和语音合成的assert和jniLibs都放到工程里,反而会报下面的错误,不知道为什么。

java.lang.UnsatisfiedLinkError: Native method not found: com.baidu.speech.easr.easrNativeJni.WakeUpFree:()I

MainActivity:

package com.example.administrator.baiduvoicetest;

import android.content.Intent;
import android.os.Bundle;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.util.AndroidRuntimeException;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.baidu.speech.EventListener;
import com.baidu.speech.EventManager;
import com.baidu.speech.EventManagerFactory;
import com.baidu.tts.auth.AuthInfo;
import com.baidu.tts.client.SpeechError;
import com.baidu.tts.client.SpeechSynthesizer;
import com.baidu.tts.client.SpeechSynthesizerListener;
import com.baidu.tts.client.TtsMode;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;

public class MainActivity extends AppCompatActivity {
   
    private TextView txtResult;
    private EditText mInput;

    private EventManager mWpEventManager;


    private SpeechSynthesizer mSpeechSynthesizer;
    private String mSampleDirPath;
    private static final String SAMPLE_DIR_NAME = "baiduTTS";
    private static final String SPEECH_FEMALE_MODEL_NAME = "bd_etts_speech_female.dat";
    private static final String SPEECH_MALE_MODEL_NAME = "bd_etts_speech_male.dat";
    private static final String TEXT_MODEL_NAME = "bd_etts_text.dat";
    private static final String LICENSE_FILE_NAME = "temp_license";
    private static final String ENGLISH_SPEECH_FEMALE_MODEL_NAME = "bd_etts_speech_female_en.dat";
    private static final String ENGLISH_SPEECH_MALE_MODEL_NAME = "bd_etts_speech_male_en.dat";
    private static final String ENGLISH_TEXT_MODEL_NAME = "bd_etts_text_en.dat";
    private static final String TAG = "MainActivity";


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        txtResult = (TextView) findViewById(R.id.txtResult);
        txtResult.setText("请说唤醒词:  小度你好或者百度一下\n\n"+
                "离在线语法识别(首次使用需要联网授权)\n"+
                "语音识别开始后你可以说(可以根据语法自行定义离线说法):\n" +
                " 1. 打电话给张三(离线)\n" +
                " 2. 打电话给李四(离线)\n" +
                " 3. 打开计算器(离线)\n" +
                " 4. 明天天气怎么样(需要联网)\n" +
                " ..." +
                "\n");


        mInput= (EditText) findViewById(R.id.input);
        mInput.setVisibility(View.GONE);
        initialEnv();
        initialTts();
    }

    @Override
    
  • 8
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
百度地图是一款非常受欢迎的手机导航应用,它提供了丰富的导航功能,包括语音导航。在Android平台上,百度地图的语音导航功能支持外置语音开发。 外置语音开发是指在导航应用中,通过与外部语音识别引擎进行交互,以实现更高质量的语音导航功能。百度地图支持与外部语音引擎进行对接,例如可以与科大讯飞等第三方语音引擎进行集成。 通过外置语音开发,可以实现更加智能的语音导航功能。用户可以使用自己喜欢的语音助手,例如“小度同学”或者其他第三方语音助手,与百度地图进行集成,实现更加个性化的语音导航体验。 同时,外置语音开发还可以提供更多的语音交互功能。用户不仅可以通过语音指令进行导航,还可以进行其他操作,例如查询周边信息、调节导航设置等等,从而提升用户的使用便利性和体验。 外置语音开发还可以加强导航的准确性和响应速度。通过与高质量的语音识别引擎进行对接,可以提高导航中语音指令的识别准确率,并且加快导航系统的响应速度,从而让用户获得更好的导航体验。 总而言之,百度地图的外置语音开发为用户提供了更加智能、个性化的语音导航功能,提升了导航的准确性和用户体验。用户可以根据自己的需求选择合适的语音助手,并通过语音交互进行更加方便快捷的导航操作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值