实时语音识别API地址:https://cloud.tencent.com/document/product/1093/35799
接口地址:http://asr.cloud.tencent.com/asr/v1/<appid>?{请求参数}
接口形式:HTTP RESTful
请求前准备:AppID、SecretID 和 SecretKey
语音数据请求相关
- POST
请求URL
代码语言:javascript复制http://asr.cloud.tencent.com/asr/v1/<appid>?
projectid=xxx&
sub_service_type=xxx&
engine_model_type=xxx&
result_text_format=xxx&
res_type=xxx&
voice_format=xxx&
secretid=xxx&
timestamp=xxx&
expired=xxx&
needvad=xxx&
nonce=xxx&
seq=xxx&
end=xxx&
source=xxx&
voice_id=xxx&
timeout=xxx
请求头部
请求头部,包括 Host,Authorization,Content-Type,Content-Length 四个参数
请求正文
请求正文主要包含实时语音识别的数据,每个数据包的音频分片最大不能超过200KB。
注意事项
- QPS:50qps
- 支持语种:中文普通话、英语、粤语。
- 音频格式:wav、pcm、opus、speex、silk、mp3。采样率:16000Hz或8000Hz、采样精度:16bits、声道:单声道
- 签名:非V3签名,单独的签名:https://cloud.tencent.com/document/product/1093/35799#sign
- 数据包音频分片大小:不超过200kb
Android关于使用实时语音识别SDK使用及代码分析
准备工作
- android studio 开发工具
- android 环境 (java14)
- Tencent 云 语音识别产品开通后,秘钥
一、下载与安装
1. 下载地址 : https://cloud.tencent.com/document/product/1093/35722
2. 解压包,获取 QCloudSDK_Realtime_Android-model 文件夹中src目录作为实际项目目录
3. android studio 打开 项目
ERROR1:
项目环境配置错误,需要制定本地配置的SDK目录等
解决方案:
ERROR2 :
build.gradle 报红问题,类库未更新或者类库未加载
解决方式:
1. 更新类库
项目结构中
2.加载类库(Dependency列表不存在,即类库不存在时)
代码分析及其配置调整
- 更改配置 src > main > java > com.xxx > CommonConst, 新版本SDK配置在MainActivity.java的onCreate中写入
package com.tencent.aaifortest;
/**
*/
public class CommonConst {
public static final String appid = "您的appid";
public static final String projectId = "projectId";//没有可以填0
public static final String secretId = "您的secretId";
public static final String secretKey = "您的secretKey";
public static final String config = "config";//不用填
}
- 依赖权限 AndroidManifest.xml
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
- 实时音频识别功能代码文件 MainActivity.java介绍
@Override
protected void onCreate(Bundle savedInstanceState){
...
// 用户配置:需要在控制台申请相关的账号;
final int appid = 1257709062;
final int projectId = 0;
final String secretId = "";
final String secretKey = "";
...
// 识别结果回调监听器, 用来监听语音识别的结果,共有如下四个接口:
final AudioRecognizeResultListener audioRecognizeResultlistener = new AudioRecognizeResultListener() {
boolean dontHaveResult = true;
/**
* 返回分片的识别结果
* @param request 相应的请求
* @param result 识别结果
* @param seq 该分片所在语音流的序号 (0, 1, 2...)
*/
@Override
public void onSliceSuccess(AudioRecognizeRequest request, AudioRecognizeResult result, int seq) {
...
}
/**
* 返回语音流的识别结果
* @param request 相应的请求
* @param result 识别结果
* @param seq 该语音流的序号 (1, 2, 3...)
*/
@Override
public void onSegmentSuccess(AudioRecognizeRequest request, AudioRecognizeResult result, int seq) {
...
}
/**
* 识别结束回调,返回所有的识别结果
* @param request 相应的请求
* @param result 识别结果
*/
@Override
public void onSuccess(AudioRecognizeRequest request, String result) {
...
}
/**
* 识别失败
* @param request 相应的请求
* @param clientException 客户端异常
* @param serverException 服务端异常
*/
@Override
public void onFailure(AudioRecognizeRequest request, final ClientException clientException, final ServerException serverException) {
...
}
};
/**
* 识别状态监听器
*/
final AudioRecognizeStateListener audioRecognizeStateListener = new AudioRecognizeStateListener() {
/**
* 开始录音
* @param request
*/
@Override
public void onStartRecord(AudioRecognizeRequest request) {
...
}
/**
* 结束录音
* @param request
*/
@Override
public void onStopRecord(AudioRecognizeRequest request) {
...
}
/**
* 第seq个语音流开始识别
* @param request
* @param seq
*/
@Override
public void onVoiceFlowStartRecognize(AudioRecognizeRequest request, int seq) {
...
}
/**
* 第seq个语音流结束识别
* @param request
* @param seq
*/
@Override
public void onVoiceFlowFinishRecognize(AudioRecognizeRequest request, int seq) {
...
}
/**
* 第seq个语音流开始
* @param request
* @param seq
*/
@Override
public void onVoiceFlowStart(AudioRecognizeRequest request, int seq) {
...
}
/**
* 第seq个语音流结束
* @param request
* @param seq
*/
@Override
public void onVoiceFlowFinish(AudioRecognizeRequest request, int seq) {
...
}
/**
* 语音音量回调
* @param request
* @param volume
*/
@Override
public void onVoiceVolume(AudioRecognizeRequest request, final int volume) {
...
}
};
...
//绑定点击事件
start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AAILogger.info(logger, "the start button has clicked..");
resMap.clear();
handler.post(new Runnable() {
@Override
public void run() {
// start.setEnabled(false);
}
});
// 2、初始化语音识别请求。
AudioRecognizeRequest.Builder builder = new AudioRecognizeRequest.Builder();
//File file = new File(Environment.getExternalStorageDirectory() "/tencent_aai____/audio", "1.pcm");
boolean isSaveAudioRecordFiles=false;//默认是关的 false
// 初始化识别请求
final AudioRecognizeRequest audioRecognizeRequest = builder
// .pcmAudioDataSource(new AudioRecordDataSource()) // 设置数据源
.pcmAudioDataSource(new AudioRecordDataSource(isSaveAudioRecordFiles)) // 设置数据源
//.templateName(templateName) // 设置模板
.template(new AudioRecognizeTemplate(EngineModelType.EngineModelType16K.getType(),0,0)) // 设置自定义模板
.setFilterDirty(0) // 0 :默认状态 不过滤脏话 1:过滤脏话
.setFilterModal(0) // 0 :默认状态 不过滤语气词 1:过滤部分语气词 2:严格过滤
.setFilterPunc(0) // 0 :默认状态 不过滤句末的句号 1:滤句末的句号
.setConvert_num_mode(1) //1:默认状态 根据场景智能转换为阿拉伯数字;0:全部转为中文数字。
// .setHotWordId("")//热词 id。用于调用对应的热词表,如果在调用语音识别服务时,不进行单独的热词 id 设置,自动生效默认热词;如果进行了单独的热词 id 设置,那么将生效单独设置的热词 id。
.build();
// 自定义识别配置
//设置语音识别参数
//通过构建 AudioRecognizeConfiguration 类,可以设置语音识别时的配置:
final AudioRecognizeConfiguration audioRecognizeConfiguration = new AudioRecognizeConfiguration.Builder()
.setSilentDetectTimeOut(true)// 是否使能静音检测,true表示不检查静音部分
.audioFlowSilenceTimeOut(5000) // 静音检测超时停止录音
.minAudioFlowSilenceTime(2000) // 语音流识别时的间隔时间
.minVolumeCallbackTime(80) // 音量回调时间
.sensitive(2.5f)
.build();
if (aaiClient==null) {
try {
/**
* AAIClient 是语音服务的核心类,用户可以调用该类来开始、停止以及取消语音识别。
* context 上下文
* ...
* credentialProvider 鉴权类
* 如果 aaiClient 不再需要使用,请调用 release() 方法释放资源:
*/
aaiClient = new AAIClient(MainActivity.this, appid, projectId, secretId,secretKey ,credentialProvider);
} catch (ClientException e) {
e.printStackTrace();
AAILogger.info(logger, e.toString());
}
}
//currentRequestId = audioRecognizeRequest.getRequestId();
new Thread(new Runnable() {
@Override
public void run() {
aaiClient.startAudioRecognize(audioRecognizeRequest, audioRecognizeResultlistener,
audioRecognizeStateListener, audioRecognizeTimeoutListener,
audioRecognizeConfiguration);
}
}).start();
}
});
...
}
- 使用效果展示