voice-ai-java
若琪语音交互sdk java接口

1. 概述

封装若琪语音交互协议。
通过此sdk可接入使用若琪智能音箱语音交互功能。

2. 功能

简单描述sdk工作的场景
向sdk输入语音数据,sdk回调语音数据识别结果,例如"你好"。
随后sdk回调"你好"应该执行的响应指令,一般为一段需要语音合成的文字: "你好呀,今天天气真美好"
将"你好呀,今天天气真美好"文字输入sdk进行语音合成,sdk回调这段文字合成的音频数据库,可由设备播放。
更详细的sdk使用方式请阅读类接口定义

3. 示例

3.1 创建实例

VoiceAI voiceAI = new VoiceAI.Builder()
.setSpeechUri(SPEECH_URI)
.setReportUri(REPORT_URI)
.setAuthInfo(ROKID_KEY, ROKID_SECRET, ROKID_DEVICE_TYPE_ID, ROKID_DEVICE_ID)
.setVoiceCallback(voiceCallback)
.setActionCallback(actionCallback)
.build();

3.2 回调对象

VoiceCallback voiceCallback = new VoiceCallback() {
@Override
public void onAccept(String status) {
// status为"fake"或"reject"时,结束录音
if (status.equals("fake") || status.equals("reject"))
endRecording();
}
@Override
public void onAsr(String asr, boolean inter) {
// 语音识别完整结果已得到,结束录音
if (!inter)
endRecording();
......
}
@Override
public void onResult(String nlp, String action) {
// 一般不需要处理nlp, action, sdk会内部执行
}
@Override
public void onError(int code) {
// 语音识别出错,结束录音
endRecording();
}
};
ActionCallback actionCallback = new ActionCallback() {
// session的概念,请参考接口文档内的描述
// 简单程序可以不用处理session
@Override
public void onSessionStart(Session sess) {
}
@Override
public void onSessionActionCompleted(Session sess) {
}
@Override
public void onSessionEnd(Session sess) {
}
@Override
public void onPlayTts(Session sess, String text) {
Log.d(TAG, "play tts: " + text);
voiceAI.textToSpeech(text, ttsCallback);
mainHandler.post(()->{
ttsText.setText(text);
});
}
@Override
public void onStopTts(Session sess) {
}
@Override
public void onPlayMedia(Session sess, String url, int position) {
}
@Override
public int onStopMedia(Session sess) {
return 0;
}
@Override
public void onPickup(Session sess, boolean on, int dur) {
}
// 本地技能的状态及动作回调
// 属于比较复杂的运用,只涉及云技能的情况下,不用处理
@Override
public void onNativeAction(Session sess, String nlp) {
}
@Override
public void onNativeExit(Session sess) {
}
@Override
public void onNativePause(Session sess) {
}
@Override
public void onNativeResume(Session sess) {
}
};

3.3 输入语音

开始一次语音交互
按键录音,传null就可以
前端激活词激活,需要传入VoiceOptions对象,由前端给出的信息填充,具体参数见接口文档
voiceAI.startVoice(null);
分多次传入语音数据
data为byte[],可以是pcm数据,也可以是opu格式的数据
详见接口文档
voiceAI.writeVoice(data, 0, len);
云端识别语音结尾,一般不需要调用 voiceAI.endVoice()
endVoice()用于提前结束语音交互

3.4 语音合成

传入文本,回调音频数据流
voiceAI.textToSpeech(text, ttsCallback);
TtsCallback ttsCallback = new TtsCallback() {
// 分多次回调文本转成的音频数据
// 音频数据编码可以是PCM, OPU2, MP3,详见接口文档
@Override
public void onAudioData(byte[] data, int offset, int length) {
ttsPlayer.write(data, offset, length);
}
@Override
public void onCompleted() {
Log.d(TAG, "tts completed");
}
@Override
public void onError(int code) {
Log.d(TAG, "tts error: " + code);
}
};