作者:重庆互联网小徐 发布时间:2024-06-04 浏览:20589 赞(1950) 收藏 评论(0)
int xiaowei_service_start(XIAOWEI_CALLBACK *callback, XIAOWEI_NOTIFY *notify);
如主页的介绍所说,小微core业务可以在小微device初始化成功后单独启动,也可在初始化device时配置自动启动。若手动启动,则调用此接口。
int xiaowei_request(char *voice_id, XIAOWEI_CHAT_TYPE type, const char *chat_data, unsigned int char_data_len, XIAOWEI_PARAM_CONTEXT *context);
小微对话类请求的公共接口,根据type的不同,使用方式不同。当使用语音类(语音请求和唤醒校验)请求时,需要连续多次调用这个接口,每次调用时传入一定量的语音数据(64~6400,建议3200,即在16K的采样率下,每秒调用5次)。其它类型,如文本请求,调用一次这个接口即可。
注意,voice_id
是小微SDK生成的,并不是由您提供的,您需要申请一个33字节大小的空间让SDK来填写,接口返回时即可获取。每一轮请求的voice_id
是相同的,即语音请求时,您可能需要调用数十次xiaowei_request
接口,每次获取的voice_id
都是一样的。
//示例代码,这是一次文本请求 char voice_id[33] = {0}; XIAOWEI_PARAM_CONTEXT context = {0}; context.silent_timeout = 500; context.speak_timeout = 5000; context.voice_request_begin = true; context.voice_request_end = false; const char *text = "我要听林俊杰的歌"; xiaowei_request(voice_id, xiaowei_chat_via_text, text, (uint32_t)strlen(text), &context);
//示例代码,这是一次语音请求 char buf[1024] = your voice data; //第一包 char voice_id[33] = {0}; XIAOWEI_PARAM_CONTEXT context = {0}; context.silent_timeout = 500; context.speak_timeout = 5000; context.voice_request_begin = true; context.voice_request_end = false; //本地静音检测,要主动发送end包,如果云端静音检测,就当收到onsilent回调之后停止发送请求 XIAOWEI_PARAM_PROPERTY property = xiaowei_param_local_vad; context.request_param = property; xiaowei_request(voice_id, xiaowei_chat_via_voice, buf, sizeof(buf), &context); //第N包,从第2包开始 context.voice_request_begin = false; buf更新, xiaowei_request(voice_id, xiaowei_chat_via_voice, buf, sizeof(buf), &context); /* 中间还有若干包 */ //最后一包 context.voice_request_end = true; buf更新(最后一包buf长度可以为0) xiaowei_request(voice_id, xiaowei_chat_via_voice, buf, sizeof(buf), &context);
int xiaowei_service_stop();
停止之后可以重新start,例如您想改一下回调函数地址等。
int xiaowei_request_cancel(const char *voice_id);
强行取消某次请求,voiceID填空会取消所有请求。一般的使用场景为,用户push to talk的时候,主动cancel,不想说了,这时候需要调用一下,不然小微可能会返回“没听懂你在说什么”。在一轮请求中,如果直接重新发起一轮语音/文本请求(request_begin = true)会自动取消上一次未完成的请求。
int xiaowei_report_state(XIAOWEI_PARAM_STATE *state);
设备应该在状态变化之后及时上报,只需要上报大资源,即打断后能够恢复的资源,例如音乐,FM。无需上报小资源,例如TTS播放。这里列举一下常用场景的上报:
1. 切歌:报2次,首先第一首歌stoped(offset为stop前一瞬间的位置)、然后第二首歌playing(offset = 0)。 2. 播放过程中唤醒了开始语音请求(这时候正常音乐是要暂停的):上报paused 3. 操作2点了一首新歌,并且要准备播放了:先报刚才那首暂停的歌stoped,再报新歌playing 4. 操作2问了一下天气或者闲聊:首先无需任何上报,音箱播放天气或者闲聊的TTS,对话结束之后正常逻辑应该恢复播放音乐,然后这时候上报刚才那个歌playing。 5. 该播放的东西播完了,无事可做:上报idle
重庆互联网项目从2004年开始为各行各业提供互联网发展解决方案,专业从事网站、小程序、微信公众号、APP、电商平台、系统等互联网平台开发,帮助企业实现从传统行业到互联网的完美转型。截止目前,重庆互联网合作的企业遍布全国各地,20年的开发经验和完善的售后服务体系获得合作客户的高度认可!
关注重庆互联网官方公众号,即可获取粉丝专享福利!
欢迎广大用户为此页面进行评价,评价成功将获得积分奖励!