毕业论文
您现在的位置: 语言识别 >> 语言识别资源 >> 正文 >> 正文

ROS语音交互系统7科大讯飞连续语

来源:语言识别 时间:2022/8/5

此次教程诠释了科大讯飞的iat_record代码中怎么欺诈麦克风举行拾音,而且传输至效劳器并主动探测端点(VAD),尔后返回区别终归文本到内陆的一切进程。

在demo_mic函数中首要移用了三个函数来结尾一切区别进程:

(1)sr_init()函数,首要举行参数的初始化,内陆组织体变量的状况初始化,配置效劳器参数的回调函数。在此函数中进一步移用了科大讯飞供应的create_recorder()函数和open_recorder()函数,不过这些函数最后都是移用ALSA接口结尾的pcm配置的初始化和翻开配置。

(2)sr_start_listening()函数,首要结尾的功效是移用QISRSessionBegin()函数与效劳器举行通讯,着手举行一次语音区别,移用胜利后效劳器返回会话ID,获得到ID后,移用start_recorder()函数,来着手从麦克风中获得音频数据,并经过回调函数将获得到的音频数据传至科大讯飞效劳器,效劳器尔后会返回识其余终归,是不是区别到VAD等回调各类状况。若区别到VAD则会主动敞开麦克风,中止延续获得音频流数据,效劳器返回区别终归,经过回调函数告示到内陆。

(3)sr_stop_listening()函数,首要结尾扫尾处事,敞开麦克风,烧毁缔造麦克风请求的各类资本,缓冲区等。

在一切代码说明进程中,我以为或者众人会较量感意思的场合都在着手的图片里展现出来了。

首先是为甚么头文献中在证实函数场合,都要加之

#ifdef__cplusplusextern"C"{#endif..intfunction();...

#ifdef__cplusplus}#endif

便是为了在c++代码中,编译时避免函数名词被批改,由于C言语编译和c++编译进程不不异,函数称呼会被批改。若是在C++编译中不加这个宏界说举行包裹,那末C编译的so文献库或者在C++中移用或者就会有题目。

尔后便是在打印调试音信方面有个小技术,以下:

#defineSR_DBGON1--SR_DBGON这个名词也许凭借需求自行批改#ifSR_DBGON==1#definesr_dbgprintf---sr_deb也也许自行批改,这个名词就替代了printf#else#definesr_dbg#endif

在最着手的#defineSR_DBGON1这个便是于是调试音信的总开关,若是配置为1,那末sr_dbg便是同等于printf这个函数,

示例:...sr_dbg("memallocfailed\n");...

那末示例中的sr_deb就会被替代成,printf("memallocfailed\n");

若是配置SR_DBGON为0,那末凭借#ifSR_DBGON==1这个决断可得,#definesr_dbg就会被区别为空,那末示例中代码就会被替代成以下:

("memallocfailed\n");即调试音信不会输出了。

本次教程的优酷视频地点以下:

转载请注明:http://www.0431gb208.com/sjslczl/1101.html