Android SDK

<p><span style="font-size:16px"><strong>1.&nbsp; 概述</strong></span></p> <p>本文档是平安声纹Android 版SDK的用户指南与参考文件,介绍了声纹(说话人识别)功能的类与函数的基本使用。</p> <p>&nbsp;</p> <p><span style="font-size:16px"><strong>2.&nbsp; 下载</strong></span></p> <p>华南1地域Android版SDK下载点击<a href="https://pacloud.obs-cn-shanghai.pinganyun.com/sdk%2FSDK_v3.1.2%2FVoiceprint_Android_SDK_v3.1.2.zip?response-content-disposition=attachment%3Bfilename%3DVoiceprint_Android_SDK_v3.1.2.zip" target="_blank">Voiceprint_Android_SDK_v3.1.2</a></p> <p>新加坡地域Android版SDK下载点击<a href="https://pacloud.obs-cn-shanghai.pinganyun.com/sdk%2FSDK_v3.1.2%2FVoiceprint_sg_Android_SDK_v3.1.2.zip?response-content-disposition=attachment%3Bfilename%3DVoiceprint_sg_Android_SDK_v3.1.2.zip" target="_blank">Voiceprint_sg_Android_SDK_v3.1.2</a></p> <p>&nbsp;</p> <p><span style="font-size:16px"><strong>3.&nbsp; 应用场景与业务流程</strong></span></p> <p><strong>(1)&nbsp; 概述</strong></p> <p>平安声纹SDK提供的主要功能有声纹注册与声纹验证。在允许用户进行声纹注册之前,应该先用其他方式验证用户的身份(如用户名/密码登录、手机验证码登录等)。用户完成声纹注册后,将来需要验证用户身份时,即可使用声纹验证代替其他的身份验证方法,使验证更加便利。如果用户的声纹发生了改变,可以进行修改注册。</p> <p>注册声纹时,系统学习用户的声纹,并将声纹与用户身份进行关联。声纹注册成功后,用户才能进行声纹验证,通过比对说话人的声纹是否与注册用户相关联的声纹相符,从而验证说话人的身份。</p> <table border="1" cellpadding="0" cellspacing="0"> <tbody> <tr> <td style="vertical-align:top"> <p>文本相关</p> </td> <td style="vertical-align:top"> <p>在注册时,云端先后提供三组随机数字串,用户分别读出此三组数字串提交语音进行注册。注册成功后,云端提供一组数字串,用户读出这个数字串进行验证。</p> </td> </tr> <tr> <td style="vertical-align:top"> <p>文本无关</p> </td> <td style="vertical-align:top"> <p>用户说出长语音(不短于20秒)进行注册,注册成功后,说出长语音(不短于10秒)进行验证,语音内容不限。</p> </td> </tr> </tbody> </table> <p><strong>(2)&nbsp; 使用说明&nbsp;&nbsp;&nbsp; &nbsp;</strong></p> <p>1) 针对一组随机数字串进行录音的流程</p> <p>a)&nbsp; 在界面上显示本组随机数字;</p> <p>b)&nbsp; 用户发出开始录音指令(如:按下&ldquo;开始录音&rdquo;按钮;按住&ldquo;录音&rdquo;按钮等),SDK开始录音;</p> <p>c)&nbsp; 用户读出随机数字;</p> <p>d)&nbsp; 用户发出停止录音指令(如:按下&ldquo;停止录音&rdquo;按钮;松开&ldquo;录音&rdquo;按钮等),或者SDK根据条件自动停止录音(录音超时等),SDK停止录音;</p> <p>e)&nbsp; SDK判断录音是否符合要求:</p> <p>&bull;&nbsp;&nbsp;&nbsp; 如符合要求,则录音成功;</p> <p>&bull;&nbsp;&nbsp;&nbsp; 如不符合要求,则回到b),重新录制本段语音。</p> <p>2) 声纹注册流程</p> <p>a)&nbsp; SDK从云端获取1组随机数字;</p> <p>b)&nbsp; 针对该组随机数字进行录音(见1)<!--[if supportFields]><span lang=EN-US style='color:black;mso-themecolor:text1'><span style='mso-element: field-begin'></span> REF _Ref488843305 \h <span style='mso-spacerun:yes'> </span>\* MERGEFORMAT <span style='mso-element:field-separator'></span></span><![endif]-->针对一组随机数字串进行录音的流程<!--[if gte mso 9]><xml> <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003400380038003800340033003300300035000000</w:data> </xml><![endif]--><!--[if supportFields]><span lang=EN-US style='color:black;mso-themecolor:text1'><span style='mso-element:field-end'></span></span><![endif]-->);</p> <p>c)&nbsp; SDK向云端发起注册请求;</p> <p>d)&nbsp; SDK返回当前步骤注册的结果;</p> <p>e)&nbsp; 再从a)开始重复2次&nbsp; ,一共需要3次提交数据,才能注册成功。</p> <p>3)声纹验证流程</p> <p>a)&nbsp; SDK从云端获取1组随机数字;</p> <p>b)&nbsp; 针对随机数字进行录音(见1)<!--[if supportFields]><span lang=EN-US style='color:black;mso-themecolor:text1'><span style='mso-element: field-begin'></span> REF _Ref488843305 \h <span style='mso-spacerun:yes'> </span>\* MERGEFORMAT <span style='mso-element:field-separator'></span></span><![endif]-->针对一组随机数字串进行录音的流程<!--[if gte mso 9]><xml> <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003400380038003800340033003300300035000000</w:data> </xml><![endif]--><!--[if supportFields]><span lang=EN-US style='color:black;mso-themecolor:text1'><span style='mso-element:field-end'></span></span><![endif]-->);</p> <p>c)&nbsp; SDK向云端发起验证请求;</p> <p>d)&nbsp; SDK返回验证通过或不通过的结果。</p> <p>&nbsp;</p> <p><span style="font-size:16px"><strong>4.&nbsp; 预备工作</strong></span></p> <p><strong>(1)&nbsp; 导入SDK</strong></p> <p>首先将sdk.aar包复制到lib目录下,然后配置当前module 的 build.gradle文件,在当前module 的 build.gradle文件中加入以下内容:</p> <p>repositories{<br /> &nbsp;&nbsp;&nbsp; flatDir {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dirs &#39;libs&#39;<br /> &nbsp;&nbsp;&nbsp; }<br /> }</p> <p>&nbsp;</p> <p>dependencies {</p> <p>...<br /> &nbsp;&nbsp;&nbsp; compile(name: &#39;sdk&#39;, ext: &#39;aar&#39;)//name的值必须和aar的文件名一致(可自定义名称)</p> <p>...<br /> }</p> <p>&nbsp;</p> <p>当前SDK的minSdkVersion 为android 14 ,最低支持到Android 4.0</p> <p><strong>(2)&nbsp; 配置工程权限</strong></p> <p>请在应用中添加录音 、网络、读写存储(可选)、获取网络信息的权限。</p> <p>Android 6.0以上需要运行时动态申请录音权限,如需保存相关录音文件需要申请读写存储权限</p> <p>&lt;uses-permission android:name=&quot;android.permission.RECORD_AUDIO&quot;/&gt;</p> <p>&lt;uses-permission android:name=&quot;android.permission.INTERNET&quot;/&gt;</p> <p>&lt;uses-permission android:name=&quot;android.permission.ACCESS_NETWORK_STATE&quot;/&gt;</p> <p>&lt;uses-permission android:name=&quot;android.permission.WRITE_EXTERNAL_STORAGE&quot;/&gt;////可选 如需保存录音文件,才需要此权限</p> <p>&nbsp;</p> <p>Android6.0以下录音权限Manifest无须申请,但深度定制系统(小米 MIUI 、魅族 Flyme、华为EMUI等)对原生安卓有修改,在录音和噪音检测回调listener的onRecordError() onError() 回调中,根据相关返回Code判断是否有录音权限。</p> <p><strong>(3)&nbsp; 初始化</strong></p> <p>在使用声纹SDK的服务之前,需要进行初始化,创建语音配置对象。将初始化代码放在程序Application入口处(Application的onCreate方法:</p> <p>SpeechRecognizer.<em>getInstance</em>().<em>init</em>(this);//初始化 传入Application context<br /> SpeechRecognizer.<em>getInstance</em>().setAppId(&quot;应用的appid&quot;);//设置当前应用的APP ID</p> <p>SpeechRecognizer.<em>getInstance</em>().setAppScene(&quot;应用的scene&quot;);//设置当前应用的SCENE</p> <p>SpeechRecognizer.<em>getInstance</em>().setLogEnable(true);//设置是否打印日志</p> <p>SpeechRecognizer.getInstance().setAppIdKey(&quot;应用的appIdKey&quot;);//设置应用的APP ID KEY</p> <p>SpeechRecognizer.getInstance().setPaAgAppId(&quot;平安云平台ID&quot;);//设置应用的PA-AG-APP SECRET</p> <p>SpeechRecognizer.getInstance().setPaAgAccessKeyId(&quot;AccessKeyId&quot;);//设置账号密钥的 Access Key Id</p> <p>SpeechRecognizer.getInstance().setPaAgSecretAccessKey(&quot;SecretAccessKey&quot;);//设置账号密钥的 Secret Access Key</p> <p>SpeechRecognizer.getInstance().setAppType(SdkConst.AppType.TEXT_DEPENDENT);//设置应用的类型 文本相关为:SdkConst.AppType.TEXT_DEPENDENT 文本无关为:SdkConst.AppType.TEXT_INDEPENDENT</p> <p>&nbsp;</p> <p>AppId参数应设置为分配给该App的唯一标识符。</p> <p>如果调试过程中需要打印日志,则可以设置</p> <p>SpeechRecognizer.getInstance().setLogEnable(true);</p> <p>//true 为打印log , false 不打印log</p> <p>&nbsp;</p> <p><span style="font-size:16px"><strong>5.&nbsp; 声纹功能使用说明</strong></span></p> <p><strong>(1)&nbsp; 参数配置</strong></p> <p>产生一个speechRecognizer的instance,并设置相关参数:</p> <p>SpeechRecognizer&nbsp; speechRecognizer = SpeechRecognizer.<em>getInstance</em>();</p> <p>speechRecognizer.setRecordFilePath(path);//如果需本地保存设置保存路径</p> <p>speechRecognizer.setStageListener(stageListener);//设置相关监听<br /> speechRecognizer.setMinRecordTime(2000);// 设置最短录音时间<br /> speechRecognizer.setMaxRecordTime(6000);// 设置最长录音时间 默认为5s</p> <p>其中stageListener为录音时的相关回调方法,通过该回调,可以获取录音时的音量大小,保存文件路径等相关状态。特别注意 如果有调用噪音检测的功能,噪音检测会把之前设置的speechRecognizer参数覆盖,建议录音的相关参数在调用speechRecognizer.start()之前设置,也就是在录音的时候再去设置参数</p> <p>&nbsp;</p> <p><strong>(2)&nbsp; 文本相关声纹注册</strong></p> <p>首先获取注册随机数字串(1组)</p> <p>speechRecognizer.getSpeechText(currentUserId, SdkConst.SpeechType.<em>TYPE_REGISTER</em>,&nbsp; resultListener);</p> <p>&nbsp;</p> <p>参数:</p> <p>currentUserId 为当前注册用户的用户名;</p> <p>SdkConst.SpeechType.TYPE_REGISTER 表示获取注册用的随机数字串;</p> <p>resultListener为当前网络请求的回调。</p> <p>示例:</p> <p>speechRecognizer.getSpeechText(currentUserName, SdkConst.SpeechType.<em>TYPE_REGISTER</em>, new ResultListener() {<br /> &nbsp;&nbsp;&nbsp; @Override<br /> &nbsp;&nbsp;&nbsp; public void onResult(String result) {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JSONObject jsonObject = new JSONObject(result);<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JSONObject data = jsonObject.getJSONObject(&quot;data&quot;);<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JSONObject returnData = data.getJSONObject(&quot;returnData&quot;);<br /> <br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; currentSpeechText = returnData.getString(&quot;speechText&quot;);<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //speechText为返回的随机数字<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; speechKey = returnData.getString(&quot;speechKey&quot;);<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //发送注册请求时需要的speechKey<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; numberText.setText(currentSpeechText);<br /> <br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (JSONException e) {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.printStackTrace();<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br /> <br /> &nbsp;&nbsp;&nbsp; }<br /> <br /> &nbsp;&nbsp;&nbsp; @Override<br /> &nbsp;&nbsp;&nbsp; public void onNetworkUnavailable() {<br /> <br /> &nbsp;&nbsp;&nbsp; }<br /> <br /> &nbsp;&nbsp;&nbsp; @Override<br /> &nbsp;&nbsp;&nbsp; public void onFailed(String error) {<br /> <br /> &nbsp;&nbsp;&nbsp; }<br /> });</p> <p>&nbsp;</p> <p>onResult返回的JSON数据格式如下:</p> <p>{</p> <p>&nbsp;&nbsp;&nbsp; &quot;data&quot;: {</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;returnCode&quot;: &quot;200&quot;,</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;returnMsg&quot;: &quot;交易成功&quot;,</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;returnData&quot;: {</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;speechText&quot;: &quot;62748390&quot;,</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;speechKey&quot;: &quot;a006a3eec0bd41929f9c2807e3798cd7&quot;</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; },</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;returnFlag&quot;: &quot;SUCC&quot;,</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;serialNum&quot;: &quot;FRS15008600621774b8gqtY5&quot;</p> <p>&nbsp;&nbsp;&nbsp; },</p> <p>&nbsp;&nbsp;&nbsp; &quot;responseCode&quot;: &quot;00&quot;,</p> <p>&nbsp;&nbsp;&nbsp; &quot;responseMsg&quot;: &quot;操作成功&quot;</p> <p>}</p> <p>其中:</p> <p>speechText为返回的注册随机数字;</p> <p>speechKey为本次注册操作的标识符,注册时需要传回给服务器。</p> <p>&nbsp;</p> <p>成功获取随机数字之后即可开始录音,需要录制3段,每段对应一个随机数字,每段录音结束后需要立即提交注册,然后再获取一个随机数字,再提交注册。应用界面应该向用户显示第一组随机数字串,要求用户读出数字串,同时进行录音:</p> <p>speechRecognizer.start();//开始录音</p> <p>手动结束录音:</p> <p>speechRecognizer.stop();//结束录音</p> <p>如果录音过程中静音超过了(1)参数配置中设置的长度,则自动结束录音。录音结束时会触发stageListener的onStopRecording回调方法。如果录音成功,通过stageListener 的 onRecordBase64String(String base64) 的方法可以获得base64编码的音频数据。</p> <p>重复以上步骤,每次显示一个随机数字串并录音,录音成功后,将base64编码过的音频数据String传入register方法,向服务端发起注册请求:</p> <p>speechRecognizer.register(currentUserId, SdkConst.RegisterType.<em>TYPE_REGISTER</em>, currentSpeechText,speechKey,base64, currentStep,resultListener);</p> <p>参数:</p> <p>&nbsp;currentUserId 为当前注册用户的用户名;</p> <p>&nbsp;SdkConst.RegisterType.TYPE_REGISTER 代表进行注册操作;</p> <p>currentSpeechText 为之前获取的随机数字串;</p> <p>speechKey 为之前获取的speechKey;</p> <p>base64为该条录音的音频数据</p> <p>currentStep表示当前的步骤 从第1开始 到第3结束</p> <p>resultListener为网络请求数据的回调,结构与获取随机数字时相同。</p> <p>返回的JSON数据格式为:</p> <p>{</p> <p>&nbsp;&nbsp;&nbsp; &quot;data&quot;: {</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;returnCode&quot;: &quot;200&quot;,</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;returnMsg&quot;: &quot;本次注册成功,请继续完成后续注册!&quot;,</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;returnData&quot;: {</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;code&quot;: &quot;2000&quot;,</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;msg&quot;: &quot;本次注册成功,请继续完成后续注册!&quot;</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; },</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;returnFlag&quot;: &quot;FAIL&quot;,</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;serialNum&quot;: &quot;FRS150174256361886gUEdts&quot;</p> <p>&nbsp;&nbsp;&nbsp; },</p> <p>&nbsp;&nbsp;&nbsp; &quot;responseCode&quot;: &quot;00&quot;,</p> <p>&nbsp;&nbsp;&nbsp; &quot;responseMsg&quot;: &quot;操作成功&quot;</p> <p>}</p> <p>其中data.returnData.code字段代表注册操作的状态:</p> <table border="0" cellpadding="0" cellspacing="0"> <thead> <tr> <td> <p><strong>Code</strong><strong>码</strong></p> </td> <td> <p><strong>RegisterResult</strong></p> </td> </tr> </thead> <tbody> <tr> <td> <p>600</p> </td> <td> <p>注册成功</p> </td> </tr> <tr> <td> <p>601</p> </td> <td> <p>注册失败</p> </td> </tr> <tr> <td> <p>801</p> </td> <td> <p>SpeechText已超时,请重新获取</p> </td> </tr> <tr> <td> <p>1000</p> </td> <td> <p>注册语音非同一人</p> </td> </tr> <tr> <td> <p>1001</p> </td> <td> <p>语音与文字不匹配</p> </td> </tr> <tr> <td> <p>9999</p> </td> <td> <p>系统异常</p> </td> </tr> <tr> <td> <p>201</p> </td> <td> <p>用户已注册</p> </td> </tr> <tr> <td> <p>204</p> </td> <td> <p>注册修改失败</p> </td> </tr> <tr> <td> <p>302</p> </td> <td> <p>参数异常</p> </td> </tr> <tr> <td> <p>2000</p> </td> <td> <p>本次注册成功,请继续完成后续注册!</p> </td> </tr> <tr> <td> <p>803</p> </td> <td> <p>注册or验证文本变更需通知声纹平台及时更新!</p> </td> </tr> <tr> <td> <p>804</p> </td> <td> <p>注册流程时间过长,需从第一条开始重新注册</p> </td> </tr> <tr> <td> <p>805</p> </td> <td> <p>注册过程中,上一条语音尚未注册成功</p> </td> </tr> </tbody> </table> <p>&nbsp;</p> <p><strong>(3)&nbsp; 文本相关声纹验证</strong></p> <p>首先获取随机数字串(1组):</p> <p>speechRecognizer.getSpeechText(currentUserId, SdkConst.SpeechType.<em>TYPE_VERIFY</em>, resultListener);</p> <p>参数:</p> <p>SdkConst.SpeechType.TYPE_VERIFY 代表获取验证用的随机数字串;</p> <p>其他参数同(2)文本相关声纹注册中获取注册随机数字串。</p> <p>成功获取随机数字串后即可开始录音,只需录制一段,录音方式同(2)文本相关声纹注册。</p> <p>录音完成后,向服务器发起验证请求:</p> <p>speechRecognizer.verify(currentUserId, currentSpeechText,speechKey, verifyString, resultListener);</p> <p>&nbsp;</p> <p>参数:</p> <p>currentUserId为当前验证用户的用户名;</p> <p>currentSpeechText为之前获取的随机数字;</p> <p>speechKey 为之前获取的speechKey;</p> <p>verifyString为base64编码的音频数据;</p> <p>resultListener为验证结果回调。</p> <p>服务器返回的json格式为:</p> <p>{</p> <p>&nbsp;&nbsp;&nbsp; &quot;data&quot;: {</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;returnCode&quot;: &quot;200&quot;,</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;returnMsg&quot;: &quot;验证成功&quot;,</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;returnData&quot;: {</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;code&quot;: &quot;603&quot;,</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;msg&quot;: &quot;验证成功&quot;</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; },</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;returnFlag&quot;: &quot;SUCC&quot;,</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;serialNum&quot;: &quot;FRS1500435721699wdCSpp0R&quot;</p> <p>&nbsp;&nbsp;&nbsp; },</p> <p>&nbsp;&nbsp;&nbsp; &quot;responseCode&quot;: &quot;00&quot;,</p> <p>&nbsp;&nbsp;&nbsp; &quot;responseMsg&quot;: &quot;操作成功&quot;</p> <p>}</p> <p>其中data.returnData.code字段代表验证操作的状态:</p> <table border="0" cellpadding="0" cellspacing="0"> <thead> <tr> <td> <p><strong>Code</strong><strong>码</strong></p> </td> <td> <p><strong>VerifyResult</strong></p> </td> </tr> </thead> <tbody> <tr> <td> <p>603</p> </td> <td> <p>验证成功</p> </td> </tr> <tr> <td> <p>604</p> </td> <td> <p>验证失败</p> </td> </tr> <tr> <td> <p>801</p> </td> <td> <p>SpeechText已超时,请重新获取</p> </td> </tr> <tr> <td> <p>1001</p> </td> <td> <p>语音与文字不匹配</p> </td> </tr> <tr> <td> <p>9999</p> </td> <td> <p>系统异常</p> </td> </tr> <tr> <td> <p>203</p> </td> <td> <p>用户尚未注册</p> </td> </tr> <tr> <td> <p>202</p> </td> <td> <p>用户存在,状态异常</p> </td> </tr> <tr> <td> <p>302</p> </td> <td> <p>参数异常</p> </td> </tr> <tr> <td> <p>803</p> </td> <td> <p>注册or验证文本变更需通知声纹平台及时更新!</p> </td> </tr> </tbody> </table> <p>&nbsp;</p> <p><strong>(4)&nbsp; 判断用户是否已经注册</strong></p> <p>可以使用以下的方法向服务器查询某个用户是否已经注册:</p> <p>speechRecognizer.isUserRegistered(currentUserId, resultListener)</p> <p>参数:</p> <p>currentUserId为需要查询的用户名;</p> <p>resultListener为结果回调。</p> <p>服务器返回的JSON数据格式为:</p> <p>{</p> <p>&nbsp;&nbsp;&nbsp; &quot;data&quot;: {</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;returnCode&quot;: &quot;200&quot;,</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;returnMsg&quot;: &quot;用户已注册&quot;,</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;returnData&quot;: {</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;code&quot;: &quot;201&quot;,</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;msg&quot;: &quot;用户已注册&quot;</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; },</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;returnFlag&quot;: &quot;SUCC&quot;,</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;serialNum&quot;: &quot;FRS1500862507829T34CDLSt&quot;</p> <p>&nbsp;&nbsp;&nbsp; },</p> <p>&nbsp;&nbsp;&nbsp; &quot;responseCode&quot;: &quot;00&quot;,</p> <p>&nbsp;&nbsp;&nbsp; &quot;responseMsg&quot;: &quot;操作成功&quot;</p> <p>}</p> <p>其中data.returnData.code字段代表查询结果:</p> <table border="0" cellpadding="0" cellspacing="0"> <thead> <tr> <td> <p><strong>Code</strong><strong>码</strong></p> </td> <td> <p><strong>RegisterResult</strong></p> </td> </tr> </thead> <tbody> <tr> <td> <p>201</p> </td> <td> <p>用户已注册</p> </td> </tr> <tr> <td> <p>203</p> </td> <td> <p>用户未注册</p> </td> </tr> <tr> <td> <p>601</p> </td> <td> <p>用户注册过,但是并未成功</p> </td> </tr> </tbody> </table> <p>&nbsp;</p> <p><strong>(5)&nbsp; 噪音检测</strong></p> <p>噪音检测用于在录音之前确定环境是否足够安静。若噪音检测不通过,则环境不适合进行声纹注册或验证操作。</p> <p>开始噪音检测后无需调用方法停止,4s之后会自动停止,特别注意 如果有调用噪音检测的功能,噪音检测会把之前设置的speechRecognizer参数覆盖,建议录音的相关参数在调用speechRecognizer.start()之前设置,也就是在录音的时候再去设置参数</p> <p>speechRecognizer. startNoiseDetection(noiseListener);</p> <p>参数:noiseListener 为噪音检测的回调,其中包含以下方法:</p> <p>void currentDb(double db):当前的噪音分贝大小;</p> <p>void isNoisy(boolean isNoisy):环境是否嘈杂;</p> <p>void onStart():噪音检测开始;</p> <p>void onStop():噪音检测结束。</p> <p>&nbsp;</p> <p><strong>(6)&nbsp; 文本无关声纹注册</strong></p> <p>说一段长语音(不短于20秒)进行声纹注册</p> <p>speechRecognizer.registerLong(currentUserId, registerType, currentBase64, resultListener</p> <p>参数:</p> <p>currentUserId为需要注册的用户名;</p> <p>&nbsp;</p> <p>registerType 为注册类型&nbsp; SdkConst.RegisterType.TYPE_REGISTER表示注册,SdkConst.RegisterType.TYPE_LONG_MODIFY表示重新注册</p> <p>&nbsp;</p> <p>resultListener为结果回调 返回的json格式同(2)文本相关声纹注册</p> <p>&nbsp;</p> <p>currentBase64&nbsp; 为验证时一整段录音base64编码的音频数据</p> <p>&nbsp;</p> <p><strong>(7)&nbsp; 文本无关声纹验证</strong></p> <p>&nbsp;</p> <p>说一段长语音(不短于10秒)进行声纹验证</p> <p>speechRecognizer.verifyLong(currentUserId, verifyString,resultListener);</p> <p>&nbsp;</p> <p>参数:</p> <p>currentUserId为需要验证的用户名</p> <p>&nbsp;</p> <p>verifyString&nbsp; 为验证时一整段录音base64编码的音频数据</p> <p>&nbsp;</p> <p>resultListener 为验证结果的回调返回的json格式同(3)文本相关声纹验证</p> <p>&nbsp;</p> <p>&nbsp;</p>
以上内容是否解决了您的问题?
请补全提交信息!
咨询·建议

电话咨询 - 7x24 小时

400-151-8800

邮件咨询

cloud@pingan.com

在线客服

7x24 小时,急速解答

工单支持

解决云产品相关技术问题