implementation(name: 'speech_release', ext: 'aar')
implementation 'com.squareup.okhttp3:okhttp:4.2.2'implementation 'com.squareup.okio:okio:1.11.0'implementation 'com.google.code.gson:gson:2.8.5'implementation 'org.slf4j:slf4j-api:1.7.25'
< uses-permission android:name="android.permission.RECORD_AUDIO"/>< uses-permission android:name="android.permission.INTERNET"/>< uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
int appid = XXX;int projectid = XXX;String secretId = "XXX";// 为了方便用户测试,sdk提供了本地签名,但是为了secretKey的安全性,正式环境下请自行在第三方服务器上生成签名。AbsCredentialProvider credentialProvider = new LocalCredentialProvider("your secretKey");final AAIClient aaiClient;try {// 1、初始化AAIClient对象。aaiClient = new AAIClient(this, appid, projectid, secretId, credentialProvider);/**您也可以使用临时证书鉴权* * 1.通过sts 获取到临时证书,此步骤应在您的服务器端实现* 2.通过临时密钥调用接口* **/// aaiClient = new AAIClient(MainActivity.this, appid, projectId,"临时secretId", "临时secretKey","对应的token" ,credentialProvider);// 2、初始化语音识别请求。final AudioRecognizeRequest audioRecognizeRequest = new AudioRecognizeRequest.Builder().pcmAudioDataSource(new AudioRecordDataSource()) // 设置语音源为麦克风输入.build();// 3、初始化语音识别结果监听器。final AudioRecognizeResultListener audioRecognizeResultListener = new AudioRecognizeResultListener() {@Overridepublic void onSliceSuccess(AudioRecognizeRequest audioRecognizeRequest, AudioRecognizeResult audioRecognizeResult, int i) {// 返回语音分片的识别结果}@Overridepublic void onSegmentSuccess(AudioRecognizeRequest audioRecognizeRequest, AudioRecognizeResult audioRecognizeResult, int i) {// 返回语音流的识别结果}@Overridepublic void onSuccess(AudioRecognizeRequest audioRecognizeRequest, String s) {// 返回所有的识别结果}@Overridepublic void onFailure(AudioRecognizeRequest audioRecognizeRequest, ClientException e, ServerException e1) {// 识别失败}};// 4、启动语音识别new Thread(new Runnable() {@Overridepublic void run() {if (aaiClient!=null) {aaiClient.startAudioRecognize(audioRecognizeRequest, audioRecognizeResultListener);}}}).start();} catch (ClientException e) {e.printStackTrace();}
// 1、获得请求的 IDfinal int requestId = audioRecognizeRequest.getRequestId();// 2、调用stop方法new Thread(new Runnable() {@Overridepublic void run() {if (aaiClient!=null){//停止语音识别,等待当前任务结束aaiClient.stopAudioRecognize(requestId);}}}).start();
// 1、获得请求的idfinal int requestId = audioRecognizeRequest.getRequestId();// 2、调用cancel方法new Thread(new Runnable() {@Overridepublic void run() {if (aaiClient!=null){//取消语音识别,丢弃当前任务aaiClient.cancelAudioRecognize(requestId);}}}).start();
/*** 签名函数:将原始字符串进行加密,具体的加密算法见以下说明。* @param source 原文字符串* @return 加密后返回的密文*/String getAudioRecognizeSign(String source);
public AAIClient(Context context, int appid, int projectId, String secreteId, AbsCredentialProvider credentialProvider) throws ClientException
参数名称 | 类型 | 是否必填 | 参数描述 |
context | Context | 是 | 上下文 |
appid | Int | 是 | 腾讯云注册的 AppID |
projectId | Int | 否 | 用户的 projectId |
secreteId | String | 是 | 用户的 SecreteId |
credentialProvider | AbsCredentialProvider | 是 | 鉴权类 |
try {AaiClient aaiClient = new AAIClient(context, appid, projectId, secretId, credentialProvider);} catch (ClientException e) {e.printStackTrace();}
aaiClient.release();
方法 | 方法描述 | 默认值 | 有效范围 |
setMaxAudioRecognizeConcurrentNumber | 语音识别最大并发请求数 | 2 | 1 - 5 |
setMaxRecognizeSliceConcurrentNumber | 语音识别分片最大并发数 | 5 | 1 - 5 |
setAudioRecognizeSliceTimeout | HTTP 读超时时间 | 5000ms | 500 - 10000ms |
setAudioRecognizeConnectTimeout | HTTP 连接超时时间 | 5000ms | 500 - 10000ms |
setAudioRecognizeWriteTimeout | HTTP 写超时时间 | 5000ms | 500 - 10000ms |
ClientConfiguration.setMaxAudioRecognizeConcurrentNumber(2)ClientConfiguration.setMaxRecognizeSliceConcurrentNumber(5)ClientConfiguration.setAudioRecognizeSliceTimeout(2000)ClientConfiguration.setAudioRecognizeConnectTimeout(2000)ClientConfiguration.setAudioRecognizeWriteTimeout(2000)
void onSliceSuccess(AudioRecognizeRequest request, AudioRecognizeResult result, int order);
参数 | 参数类型 | 参数描述 |
request | AudioRecognizeRequest | 语音识别请求 |
result | AudioRecognizeResult | 语音分片的语音识别结果 |
order | Int | 该语音分片所在语音流的次序 |
void onSegmentSuccess(AudioRecognizeRequest request, AudioRecognizeResult result, int order);
参数 | 参数类型 | 参数描述 |
request | AudioRecognizeRequest | 语音识别请求 |
result | AudioRecognizeResult | 语音分片的语音识别结果 |
order | Int | 该语音流的次序 |
void onSuccess(AudioRecognizeRequest request, String result);
参数 | 参数类型 | 参数描述 |
request | AudioRecognizeRequest | 语音识别请求 |
result | String | 所有的识别结果 |
void onFailure(AudioRecognizeRequest request, final ClientException clientException, final ServerException serverException,String response);
参数 | 参数类型 | 参数描述 |
request | AudioRecognizeRequest | 语音识别请求 |
clientException | ClientException | 客户端异常 |
serverException | ServerException | 服务端异常 |
response | String | 服务端返回的 json 字符串 |
参数名称 | 类型 | 是否必填 | 参数描述 | 默认值 |
setSilentDetectTimeOut | Boolean | 否 | 是否开启静音检测,开启后说话前的静音部分不进行识别 | true |
audioFlowSilenceTimeOut | Int | 否 | 开启检测说话启始超时,开启后超时会自动停止录音 | 5000ms |
minAudioFlowSilenceTime | Int | 否 | 两个语音流最短分割时间 | 2000ms |
minVolumeCallbackTime | Int | 否 | 音量回调时间 | 80ms |
AudioRecognizeConfiguration audioRecognizeConfiguration = new AudioRecognizeConfiguration.Builder().setSilentDetectTimeOut(true)// 是否使能静音检测,false 表示不检查静音部分.audioFlowSilenceTimeOut(5000) // 静音检测超时停止录音.minAudioFlowSilenceTime(2000) // 语音流识别时的间隔时间.minVolumeCallbackTime(80) // 音量回调时间.build();// 启动语音识别new Thread(new Runnable() {@Overridepublic void run() {if (aaiClient!=null) {aaiClient.startAudioRecognize(audioRecognizeRequest, audioRecognizeResultListener, audioRecognizeConfiguration);}}}).start();
方法 | 方法描述 |
onStartRecord | 开始录音 |
onStopRecord | 结束录音 |
onVoiceFlowStart | 检测到语音流的起点 |
onVoiceFlowStartRecognize | 语音流开始识别 |
onVoiceFlowFinishRecognize | 语音流结束识别 |
onVoiceVolume | 音量 |
onNextAudioData | 返回音频流,用于返回宿主层做录音缓存业务。new AudioRecordDataSource(true) 传递 true 时生效 |
方法 | 方法描述 |
onFirstVoiceFlowTimeout | 检测第一个语音流超时 |
onNextVoiceFlowTimeout | 检测下一个语音流超时 |
AudioRecognizeStateListener audioRecognizeStateListener = new AudioRecognizeStateListener() {@Overridepublic void onStartRecord(AudioRecognizeRequest audioRecognizeRequest) {// 开始录音}@Overridepublic void onStopRecord(AudioRecognizeRequest audioRecognizeRequest) {// 结束录音}@Overridepublic void onVoiceFlowStart(AudioRecognizeRequest audioRecognizeRequest, int i) {// 语音流开始}@Overridepublic void onVoiceFlowFinish(AudioRecognizeRequest audioRecognizeRequest, int i) {// 语音流结束}@Overridepublic void onVoiceFlowStartRecognize(AudioRecognizeRequest audioRecognizeRequest, int i) {// 语音流开始识别}@Overridepublic void onVoiceFlowFinishRecognize(AudioRecognizeRequest audioRecognizeRequest, int i) {// 语音流结束识别}@Overridepublic void onVoiceVolume(AudioRecognizeRequest audioRecognizeRequest, int i) {// 音量回调}};/*** 返回音频流,* 用于返回宿主层做录音缓存业务。* 由于方法跑在sdk线程上,这里多用于文件操作,宿主需要新开一条线程专门用于实现业务逻辑* new AudioRecordDataSource(true) 有效,否则不会回调该函数* @param audioDatas*/@Overridepublic void onNextAudioData(final short[] audioDatas, final int readBufferLength){}
参数名称 | 类型 | 是否必填 | 参数描述 | 默认值 |
pcmAudioDataSource | PcmAudioDataSource | 是 | 音频数据源 | 无 |
templateName | String | 否 | 用户控制台设置的模板名称 | 无 |
customTemplate | AudioRecognizeTemplate | 否 | 用户自定义的模板 | ("16k_zh", 1) |
参数名称 | 类型 | 参数描述 |
code | Int | 识别状态码 |
message | String | 识别提示信息 |
text | String | 识别结果 |
seq | Int | 该语音分片的序号 |
voiceId | String | 该语音分片所在语音流的 ID |
cookie | String | cookie 值 |
参数名称 | 类型 | 是否必填 | 参数描述 |
engineModelType | String | 是 | 引擎模型类型 |
resType | Int | 是 | 结果返回方式 |
AudioRecognizeTemplate audioRecognizeTemplate = new AudioRecognizeTemplate("16k_zh",1);
int read(short[] audioPcmData, int length);
void start() throws AudioRecognizerException;
void stop();
void savePcmFileCallBack(String filePath);
void saveWaveFileCallBack(String filePath);
int maxLengthOnceRead();
public static void disableDebug();public static void disableInfo();public static void disableWarn();public static void disableError();public static void enableDebug();public static void enableInfo();public static void enableWarn();public static void enableError();
new AudioRecordDataSource(isSaveAudioRecordFiles) 初始化时,isSaveAudioRecordFiles 设置为 true。AudioRecognizeStateListener.onStartRecord 回调函数内添加创建本次录音的文件逻辑。路径、文件名可支持自定义。AudioRecognizeStateListener.onStopRecord 回调函数内添加关流逻辑。(可选)将 PCM 文件转存为 WAV 文件。AudioRecognizeStateListener.onNextAudioData 回调函数内添加将音频流写入本地文件的逻辑。MainActivity 类中的示例代码。文档反馈