关于接入科大讯飞的语音sdk

来源:互联网 发布:js删除注释工具 编辑:程序博客网 时间:2024/06/17 07:51

接触了语音合成的第三方讯飞,就导入时出现的问题特记录说明:

首先我们来说一下讯飞接入的流程,大致很简单,一般的第三方接入过程:

1、将开发工具包中libs目录下的Msc.jararmeabi复制到Android工程的libs目录(如果工程无libs目录,请自行创建)中,详细图片官方网站有提供,这里注明一个地方:就是在eclipse中药添加依赖,选择build添加jar到项目。在AS中,则右键jar包,Add library或者选择file-project structure-Dependencies-加号

添加依赖

2、清单文件添加权限(官方都有提供,不做说明)

  1. <!--连接网络权限,用于执行云端语音能力 -->  
  2. <uses-permission android:name="android.permission.INTERNET"/>  
  3. <!--获取手机录音机使用权限,听写、识别、语义理解需要用到此权限 -->  
  4. <uses-permission android:name="android.permission.RECORD_AUDIO"/>  
  5. <!--读取网络信息状态 -->  
  6. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>  
  7. <!--获取当前wifi状态 -->  
  8. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>  
  9. <!--允许程序改变网络连接状态 -->  
  10. <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>  
  11. <!--读取手机信息权限 -->  
  12. <uses-permission android:name="android.permission.READ_PHONE_STATE"/>  
  13. <!--读取联系人权限,上传联系人需要用到此权限 -->  
  14. <uses-permission android:name="android.permission.READ_CONTACTS"/>  
3、关于初始化的问题,要说明的是,SpeechUtility.createUtility(context, SpeechConstant.APPID +"=12345678");  方法中,appid一定要自己申请的应用下载的sdk包和对应的appid,否则会报错用户校验失败的错误

4、对应的初始化方法,官方建议在application中初始化,这里写了一个管理类来实现,方便全局调用语音合成方法

public class MscManager {    private Context mContext;    private SpeechSynthesizer speechSynthesizer ;    private static MscManager instance;    private static final String APPID = "自己申请的id";    public static MscManager getInstance() {        if (instance == null) {            synchronized (MscManager.class) {                if (null == instance) {                    instance = new MscManager();                }            }        }        return instance;    }    public void init(Context context) {        this.mContext = context;        SpeechUtility.createUtility(context, SpeechConstant.APPID + APPID);        initTts();    }    /**     * 普通语音     *     * @param content 播放内容     */    public void speech(String content) {        if (TextUtils.isEmpty(content)) {            return;        }
speechSynthesizer.startSpeaking(content, mSynListener);
} /** * 初始化语音合成 */ private void initTts() {
speechSynthesizer= SpeechSynthesizer.createSynthesizer(mContext, null);
speechSynthesizer.setParameter(SpeechConstant.VOICE_NAME, "设置官方提供的语音人");//设置发音人
speechSynthesizer.setParameter(SpeechConstant.SPEED, "80");//设置语速
speechSynthesizer.setParameter(SpeechConstant.VOLUME, "100");//设置音量,范围0~100
speechSynthesizer.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_CLOUD); //设置云端
} /** * 语音回调 */ private SynthesizerListener mSynListener = new SynthesizerListener() { @Override public void onSpeakBegin() { } @Override public void onBufferProgress(int i, int i1, int i2, String s) { } @Override public void onSpeakPaused() { } @Override public void onSpeakResumed() { } @Override public void onSpeakProgress(int i, int i1, int i2) { } @Override public void onCompleted(SpeechError speechError) { } @Override public void onEvent(int i, int i1, int i2, Bundle bundle) { } };}
然后调用speech方法,传语音提示内容。

整个过程如果没有问题,就不需要往下看了,如果你遇到了和我一样的问题,程序导入sdk后无法正常启动,可能是此类问题

ERROR_ENGINE_NOT_SUPPORTED

21002

引擎不支持

如果你找不到问题打印日志,你可以在

private SynthesizerListener mSynListener = new SynthesizerListener() {
方法中
@Overridepublic void onCompleted(SpeechError speechError) {    Log.e("错误",speechError.toString());}打印问题原因,遇到这种情况,很可能是你的libs下的jar没有引入程序,只是你以为引入依赖而已所以每次初始化程序找不到对应的jar包
修改方法:找到你的build.gradle文件,添加
sourceSets {    main {        jniLibs.srcDir 'libs'    }
如果还有其他问题,也可以互相讨论2081992484

0 0
原创粉丝点击