Android 基础语音模块

优质
小牛编辑
187浏览
2023-12-01

1.1.1. 目录

1.1.2. 一、概述

Rokid 语音识别服务(Speech)

Rokid语音识别服务与Rokid云平台对接,为各位开发者提供包括:文字识别、语音识别两种识别服务。

文字识别可以通过开发者提供的语句返回云平台对应的技能信息。

语音识别可以通过开发者提供的音频流识别出对应的文字,并相应的返回云平台对应的技能信息。

Rokid 语音合成服务(TTS)

Rokid语音合成服务可以根据开发者提供的文字合成高质量的音频。

1.1.3. 二、SDK生成产物目录结构

config

  • speech_config.json ---- sdk需要与厂商相关的key/secret等信息,在语音识别以及tts合成时,需要用这些配置信息进行认证,会作为参数传递进SDK,可以点击语音接入创建产品,在下载 SDk 处查看key/secret。

java-libraries 文件列表

  • jdk1.7 若编译器javac版本为java 1.7.x版本
    • rokid_speech.jar
  • jdk1.8 若编译器javac版本为java 1.8.x版本
    • rokid_speech.jar

说明

  • rokid_speech.jar ---- 语音识别以及合成服务(speech/tts) 输入输出的java api接口封装

shared-libraries 文件列表

  • arm64-v8a
    • libc++_shared.so
    • librkcodec.so
    • librokid_opus_jni.so
    • librokid_speech_jni.so
    • libspeech.so
    • libuWS.so
  • armeabi-v7a
    • libc++_shared.so
    • librkcodec.so
    • librokid_opus_jni.so
    • librokid_speech_jni.so
    • libspeech.so
    • libuWS.so

1.1.4. 三、快速集成

集成前准备

获取SDK
复制文件

java-libraries文件夹下的rokid_speech.jar复制到 Android 工程下的 app/libs 文件夹中,并设置为工程的依赖库

shared-libraries文件夹下的全部文件包含文件夹复制到 Android 工程下的app/src/main/jniLibs 文件夹中

添加权限
    <!--网络访问权限-->
    <uses-permission android:name="android.permission.INTERNET" />

语音识别服务集成

用户需要在使用语音识别服务之前,调用以下代码来进行初始化

首先创建实例

        Speech speech = new Speech();

传入之前获取的相关秘钥,以及相关配置信息

        PrepareOptions prepareOptions = new PrepareOptions();
        prepareOptions.host = "apigwws.open.rokid.com";
        prepareOptions.port = 443;
        prepareOptions.branch = "/api";
        //key
        prepareOptions.key = "";
        //device_type_id
        prepareOptions.device_type_id = "";
        //secret
        prepareOptions.secret = "";
        // 设备名称,类似昵称,可自由选择,不影响认证结果
        prepareOptions.device_id = "";

        speech.prepare(prepareOptions);

在prepare后任意时刻,都可以调用config修改配置

        // 修改音频编码格式及语言,其它选项不变
        SpeechOptions opts = new SpeechOptions();
        opts.set_codec("opu");
        opts.set_lang("zh");
        speech.config(opts);

以上为初始化步骤,初始化完成后,开发者可模拟发送语音识别请求来验证是否集成成功

// 语音Speech请求
// 不设置VoiceOptions,全部使用默认值。
int id = speech.startVoice(new SpeechCallback() {
                ......
            });
speech.putVoice(id, your_voice_data);
speech.putVoice(id, more_voice_data);
speech.putVoice(id, ...);
...
speech.endVoice(id);
// 文字Speech请求
speech.putText("你好若琪", new SpeechCallback() {
            @Override
            public void onStart(int i) {
                LogUtil.d("onStart " + i);
            }

            @Override
            public void onIntermediateResult(int i, String s, String s1) {
                LogUtil.d("onIntermediateResult " + i + " " + s + " " + s1);
            }

            @Override
            public void onAsrComplete(int i, String s) {
                LogUtil.d("onAsrComplete " + i + " " + s);
            }

            @Override
            public void onComplete(int i, final String s, final String s1) {
                LogUtil.d("onComplete " + s + " " + s1);
                //需要在主线程更新ui

            }

            @Override
            public void onCancel(int i) {
                LogUtil.d("onCancel " + i);
            }

            @Override
            public void onError(int i, int i1) {
                LogUtil.d("onError " + i + " " + i1);
            }
        });

语音合成服务集成

用户需要在使用语音合成服务之前,调用以下代码来进行初始化

首先创建实例

        Tts tts = new Tts();

传入之前获取的相关秘钥,以及相关配置信息

        PrepareOptions popts = new PrepareOptions();
        popts.host = "apigwws.open.rokid.com";
        popts.port = 443;
        popts.branch = "/api";
        // 认证信息,需要申请
        popts.key = "";
        popts.device_type_id = "";
        popts.secret = "";
        // 设备名称,类似昵称,可自由选择,不影响认证结果
        popts.device_id = "";
        tts.prepare(popts);

在prepare后任意时刻,都可以调用config修改配置

        // 默认配置codec = "pcm", declaimer = "zh", samplerate = 24000
        // 下面的代码将codec修改为"opu2",declaimer、samplerate保持原状不变
        TtsOptions topts = new TtsOptions();
        topts.set_codec("opu2");
        tts.config(topts);

以上为初始化步骤,初始化完成后,开发者可以调用语音合成接口来验证是否集成成功

// 语音Speech请求
// 不设置VoiceOptions,全部使用默认值。
int id = speech.startVoice(new SpeechCallback() {
                ......
            });
speech.putVoice(id, your_voice_data);
speech.putVoice(id, more_voice_data);
speech.putVoice(id, ...);
...
speech.endVoice(id);
        tts.speak(s,
                new TtsCallback() {
                    // 在这里实现回调接口 onStart, onVoice等
                    // 在onVoice中得到语音数据,调用播放器播放
                    @Override
                    public void onStart(int i) {

                    }

                    @Override
                    public void onText(int i, String s) {

                    }

                    public void onVoice(int id, byte[] data) {
                        OpusPlayer opusPlayer = new OpusPlayer();
                        opusPlayer.play(data);
                    }

                    @Override
                    public void onCancel(int i) {

                    }

                    @Override
                    public void onComplete(int i) {

                    }

                    @Override
                    public void onError(int i, int i1) {

                    }
                });

1.1.5. 四、API 参考

语音识别服务

1)SDK 初始化

接口说明

Rokid Speech 语音合成 SDK 初始化

方法预览

返回类型方法备注
voidprepare(PrepareOptions options)使用PrepareOption 初始化

参数说明

字段类型必须?描述
optionsPrepareOptions可选选项,详见PrepareOptions数据结构

示例代码

//使用 PrepareOption 初始化
                Speech speech = new Speech();
                PrepareOptions prepareOptions = new PrepareOptions();
                prepareOptions.host = "apigwws.open.rokid.com";
                prepareOptions.port = 443;
                prepareOptions.branch = "/api";
                prepareOptions.key = Prepare.ROKID_KEY;
                prepareOptions.device_type_id = Prepare.ROKID_DEVICE_TYPE_ID;
                prepareOptions.secret = Prepare.ROKID_SECRET;
                prepareOptions.device_id = Prepare.ROKID_DEVICE_ID;
                speech.prepare(prepareOptions);
2)SDK 关闭

接口说明

关闭 Rokid Speech 语音识别服务

方法预览

返回类型方法备注
voidrelease()Speech SDK关闭

示例代码

    ...
    speech.release();
3)文本识别

接口说明

Rokid 语音识别服务允许用户直接发送文字,并根据用户发送的文本,返回对应的数据

方法预览

返回类型方法备注
intputText发起文本识别,返回值为当前发起的语音识别请求speech id

参数说明

返回类型方法备注
textStringspeech文本
cbSpeechCallbackspeech回调接口对象

示例代码


        speech.putText(s, new SpeechCallback() {
            @Override
            public void onStart(int i) {
                LogUtil.d("onStart " + i);
            }

            @Override
            public void onIntermediateResult(int i, String s, String s1) {
                LogUtil.d("onIntermediateResult " + i + " " + s + " " + s1);
            }

            @Override
            public void onAsrComplete(int i, String s) {
                LogUtil.d("onAsrComplete " + i + " " + s);
            }

            @Override
            public void onComplete(int i, final String s, final String s1) {
                LogUtil.d("onComplete " + s + " " + s1);
                //需要在主线程更新ui
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        //自然语义解析结果
                        tvAsrResult.setText(s);
                        //Rokid Speech skill返回的结果
                        tvAsrBackResult.setText(s1);
                    }
                });
            }

            @Override
            public void onw/Cancel(int i) {
                LogUtil.d("onCancel " + i);
            }

            @Override
            public void onError(int i, int i1) {
                LogUtil.d("onError " + i + " " + i1);
            }
        });
4)语音识别
返回类型返回值方法备注
intspeech idstartVoice(SpeechCallback callback,VoiceOptions options)发起语音speech,返回
voidputVoice(int id ,byte[] data)发送语音数据, 一次speech的语音数据可分多次发送
voidendVoice(int id)通知sdk语音数据发送完毕,结束speech

startVoice

参数说明

字段类型必须?描述
cbSpeechCallbackspeech回调接口对象
optionsVoiceOptions当前语音speech的选项,详见VoiceOptions。

putVoice

参数说明

字段类型必须?描述
idintspeech id
databyte[]语音数据,输入的音频流必须为16bit 16kHz采样,单声道

endVoice

参数说明

字段类型必须?描述
idintspeech id

示例代码

int speechId = speech.startVoice(new SpeechCallback() {
            @Override
            public void onStart(int i) {

            }

            @Override
            public void onIntermediateResult(int i, String s, String s1) {

            }

            @Override
            public void onAsrComplete(int i, String s) {

            }

            @Override
            public void onComplete(int i, String s, String s1) {

            }

            @Override
            public void onCancel(int i) {

            }

            @Override
            public void onError(int i, int i1) {

            }
        });
        speech.putVoice(speechId,voiceByte);
        speech.endVoice(speechId);
5)设置语音识别参数

接口说明

用户可以通过这种方式来手动录音,并发送给语音分析服务器,并返回识别结果

方法预览

返回类型方法备注
voidconfig(SpeechOptions options)语音识别Speech的配置选项

参数说明

字段类型必须?描述
configSpeechOptions
6)取消语音识别请求

接口说明

当用户调用了startVoice请求之后,如果想取消语音识别,可调用此方法,而不是endVoice方法

方法预览

返回类型方法备注
voidcancel(int id)取消指定的speech请求

参数说明

字段类型必须?描述
idintspeech id

示例代码

speech.cancel(speechId);
7)SpeechOptions

使用SpeechOptions设置语音识别相关参数

返回类型方法备注
voidset_lang(String lang)设定文字语言。设定speech putText接口要发送的文本的语言; 影响语音识别结果'asr'的文本语言
voidset_codec(String codec)设定语音编码。指定putVoice接口发送的语音编码格式
voidset_vad_mode(String mode)设定语音起始结束检查在云端还是本地
voidset_no_nlp(boolean v)设定是否需要服务端给出nlp结果
voidset_no_intermediate_asr(boolean v)设定是否需要服务端给出中间asr结果

set_lang

参数说明

字段类型必须?描述
langString限定值zh

set_codec

参数说明

字段类型必须?描述
codecString编码格式,限定值pcmopu

set_vad_mode

参数说明

字段类型必须?描述
modeString限定值localcloud

set_no_nlp

参数说明

字段类型必须?描述
vboolean

set_no_intermediate_asr

参数说明

字段类型必须?描述
vboolean
8)回调接口
SpeechCallback

方法预览

返回类型方法备注
voidonStart(int id)speech结果开始返回
voidonIntermediateResult(int id,String asrResult,String extraResult)给出当前已经转成语音的文字
voidonAsrComplete(int id,String asrResult)speech asr完整结果
voidonComplete(int id,String nlpResult,String intent)speech最终结果
voidonCancel(int id)speech被取消
voidonError(int id,int errCode)speech出错

onStart(int id)

方式说明

通知开发者,语音识别的结果开始返回。

参数说明

字段类型描述
idint当前Speech 请求的id

onIntermediateResult(int id,String asrResult,String extraResult)

方法说明

持续返回当前语音识别出的文字

参数说明

字段类型描述
idintspeech id
asrResultString语音转文字中间结果
extraResultString激活结果

onAsrComplete(int id,String asrResult)

方法说明

语音识别技术后返回完整的语音识别结果

参数说明

字段类型描述
idint当前Speech 请求的id
asrResultString语音转文字完整结果

onComplete(int id,String nlpResult,String intent)

方法说明

根据识别结果返回Rokid 云平台上的skill信息

参数说明

字段类型描述
idint当前Speech 请求的id
nlpResultString自然语义解析结果
intentStringrokid speech skill返回的结果

onCancel(int id)

方法说明

语音是被取消

参数说明

字段类型描述
idint当前Speech 请求的id

onError(int id,int errCode)

方法说明

语音识别发生错误,详情请看错误码

参数说明

字段类型描述
idint当前Speech 请求的id
errCodeint错误码
数据结构
PrepareOptions
名称类型描述
hostString语音识别服务host,一般为 apigwws.open.rokid.com
portint语音识别服务port 443
branchString语音识别服务url path /api
keyString语音识别服务认证key
device_type_idString设备类型,用于语音识别服务认证
secretString用于语音识别服务认证
device_idString设备id,用于语音识别服务认证

获取key、id等参数,请参考创建设备流程章节。

语音合成服务

1)SDK 初始化

接口说明

Rokid TTS 语音合成 SDK 初始化

方法预览

返回类型方法备注
voidprepare(PrepareOptions options)使用PrepareOption 初始化
voidprepare(String configFile)使用配置文件初始化
voidprepare(InputStream is)使用流初始化

参数说明

字段类型必须?描述
optionsPrepareOptions可选选项,详见PrepareOptions数据结构
configFileString可选配置文件路径名。文件内容详见json格式配置字串
isInputStream可选数据流,流内容详见json格式配置字串

示例代码

//使用 PrepareOption 初始化
        TTS tts = new TTS();
        PrepareOptions popts = new PrepareOptions();
        popts.host = "apigwws.open.rokid.com";
        popts.port = 443;
        popts.branch = "/api";
        popts.key = "";
        popts.device_type_id = "";
        popts.secret = "";
        popts.device_id ="";
        tts.prepare(popts);
2)SDK 关闭

接口说明

关闭 Rokid TTS 语音合成服务

方法预览

返回类型方法备注
voidrelease()TTS SDK关闭

示例代码

    ...
    tts.release();
3)文字转语音

接口说明

发起文字转语音请求

方法预览

返回类型方法备注
intspeak(String s , TtsCallback callback)发起文字转语音请求

参数说明

字段类型必须?描述
sString必须要朗读的文本
callbackTtsCallback必须回调接口

返回值

类型描述
int成功将文本加入待处理队列,返回id。失败返回-1

示例代码

    int id = 0;
    id = tts.speak(s,new TtsCallback() {
                    // 在这里实现回调接口 onStart, onVoice等
                    // 在onVoice中得到语音数据,调用播放器播放
                    @Override
                    public void onStart(int i) {

                    }

                    @Override
                    public void onText(int i, String s) {

                    }

                    public void onVoice(int id, byte[] data) {
                        ...doSth
                    }

                    @Override
                    public void onCancel(int i) {

                    }

                    @Override
                    public void onComplete(int i) {

                    }

                    @Override
                    public void onError(int i, int i1) {

                    }
                });
4)取消文字转语音请求

接口说明

取消文字转语音请求

方法预览

返回类型方法备注
voidcancel(int id)取消文字转语音请求

参数说明

字段类型必须?描述
idString必须此前调用speak返回的id
callbackTtsCallback必须回调接口

示例代码

    ...
    tts.cancel(id) //此前调用speak返回的id
5)修改TTS配置选项

接口说明

修改TTS配置选项

方法预览

返回类型方法备注
voidconfig(TtsOptions options)TTS的配置选项,详见TtsOptions数据结构

参数说明

字段类型必须?描述
optionsTtsOptionsTTS的配置选项,详见TtsOptions数据结构

示例代码

    TtsOptions options = new TtsOptions();
    //son=me config    
    tts.config(options);
6)OpusPlayer接口

接口说明 用于帮助播放opu2格式tts音频数据的工具类

参数说明

字段类型必须?描述
databyte[]音频数据

示例代码

    OpusPlayer opusPlayer = new OpusPlayer();
    opusPlayer.play(data);
7)TtsOptions

set_codec

参数说明

字段类型必须?描述
codecString编码格式,限定值pcmopu2mp3

set_declaimer

参数说明

字段类型必须?描述
declaimerString设定语音朗读者,限定值zh

set_samplerate

参数说明

字段类型必须?描述
samplerateint设定语音采样率,默认24000

示例代码

    TtsOptions options = new TtsOptions();
    topts.set_codec("opu2");
    topts.set_ declaimer("zh");
    topts.set_samplerate(24000);
    tts.config(options);
8)回调接口
TtsCallback
返回类型方法备注
voidonStart(int i)开始接收语音数据流
voidonText(int i,String s)给出当前已经转成语音的文字
voidonVoice(int id,byte[] data)语音数据流
voidonCancel(int i)语音转文字已经取消
voidonComplete(int i)语音数据已经全部给出
voidonError(int id,int i1)文字转语音出错

onStart

参数说明

字段类型描述
iint成功将文本加入待处理队列,TTS Speak返回的id

onText

字段类型描述
iintTTS Speak返回的id
sString当前已经转成语音的文字

onVoice

字段类型描述
idintTTS Speak返回的id
databyte[]语音数据,根据TtsOptions决定编码格式

onCancel

字段类型描述
iintTTS Speak返回的id

onComplete

字段类型描述
iintTTS Speak返回的id

onError

字段类型描述
idintTTS Speak返回的id
i1int错误码
数据结构
PrepareOptions
名称类型描述
hostString语音识别服务host,一般为 apigwws.open.rokid.com
portint语音识别服务port 443
branchString语音识别服务url path /api
keyString语音识别服务认证key
device_type_idString设备类型,用于语音识别服务认证
secretString用于语音识别服务认证
device_idString设备id,用于语音识别服务认证

获取key、id等参数,请参考“产品创建和SN导入”章节。

1.1.6. 五、示例源码

参见示例源码RokidSpeechTTSDemo