android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:hint=“请点击开始录音”
app:layout_constraintEnd_toEndOf=“parent”
app:layout_constraintStart_toStartOf=“parent”
app:layout_constraintTop_toTopOf=“parent” />
android:id="@+id/btn_start" android:layout_width=“wrap_content” android:layout_height=“wrap_content” android:text=“开始录音” app:layout_constraintEnd_toStartOf="@+id/edittext" app:layout_constraintTop_toTopOf="@+id/btn_stop" /> android:id="@+id/btn_stop" android:layout_width=“wrap_content” android:layout_height=“wrap_content” android:layout_marginTop=“116dp” android:text=“停止录音” app:layout_constraintStart_toEndOf="@+id/edittext" app:layout_constraintTop_toTopOf=“parent” /> 试运行看看实际效果 ②android 6.0 以上版本权限申请。语音识别要用到麦克风,这个使用权限是需要动态申请的。 private void initPermission() { String permissions[] = {Manifest.permission.RECORD_AUDIO, Manifest.permission.ACCESS_NETWORK_STATE, Manifest.permission.INTERNET, Manifest.permission.WRITE_EXTERNAL_STORAGE }; ArrayList toApplyList = new ArrayList(); for (String perm : permissions) { if (PackageManager.PERMISSION_GRANTED != ContextCompat.checkSelfPermission(this, perm)) { toApplyList.add(perm); //进入到这里代表没有权限 } } String tmpList[] = new String[toApplyList.size()]; if (!toApplyList.isEmpty()) { ActivityCompat.requestPermissions(this, toApplyList.toArray(tmpList), 123); } } @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { // 此处为android 6.0以上动态授权的回调,用户自行实现。 } ③初始化控件与语音识别的核心SDK protected EditText txtResult;//识别结果 protected Button startBtn;//开始识别,持续一定时间不说话会自动停止,需要再次打开 protected Button stopBtn;//停止识别,立即停止,直接输出已经识别的内容 private EventManager asr;//语音识别核心库 private void initView() { txtResult = (EditText) findViewById(R.id.edittext); startBtn = (Button) findViewById(R.id.btn_start); stopBtn = (Button) findViewById(R.id.btn_stop); startBtn.setonClickListener(new View.onClickListener() {//点击开始按钮 @Override public void onClick(View v) { asr.send(SpeechConstant.ASR_START, null, null, 0, 0); } }); stopBtn.setonClickListener(new View.onClickListener() {//点击停止按钮 @Override public void onClick(View v) { asr.send(SpeechConstant.ASR_STOP, null, null, 0, 0); } }); } ④在onCreate方法中调用 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); initPermission(); //初始化EventManager对象 asr = EventManagerFactory.create(this, “asr”); //注册自己的输出事件类 asr.registerListener(this); // EventListener 中 onEvent方法 } 此时会有错误提示,因为我们还没有实现EventListener这个借口,接下来我们就实现这个接口 ⑤实现EventListener接口,要注意这个接口是百度的这个 实现接口的onEvent方法 @Override public void onEvent(String name, String params, byte[] data, int offset, int length) { if (name.equals(SpeechConstant.CALLBACK_EVENT_ASR_PARTIAL)) { // 识别相关的结果都在这里 if (params == null || params.isEmpty()) { return; } if (params.contains("“final_result”")) { // 一句话的最终识别结果 String regrex = “[(.*?),”; //使用正则表达式抽取我们需要的内容 Pattern pattern = Pattern.compile(regrex); Matcher matcher = pattern.matcher(params); if (matcher.find()) { int a = matcher.group(0).indexOf("["); int b = matcher.group(0).indexOf(","); txtResult.setText(matcher.group(0).substring(a+2,b-3)); } } } } 因为返回的结果并不是单纯是识别出的我们所说的话,还有别的内容,所以需要使用正则表达式抽取内容,不抽取的话返回内容如下,明显并不是我们想要的结果 ⑥使用真机调试程序(我所用的genymotion模拟器是不支持语音输入的,不知道别的模拟器支不支持),前题你要开启你手机的开发者选项,并允许USB调试与USB安装,不同手机的开启方法不同,自己上网查一下就好。 将手机用数据线连接电脑后会在此处显示你的设备,选中你的手机并运行程序即可 运行测试 大功告成,注意本文只实现了在线识别,没有网络的时候是无法使用的。离线识别功能百度语音识别SDK也支持,不过离线识别只支持预定义的短语。本文只介绍了一个简单的使用例子,要深入学习百度语音识别SDK的使用建议学习下方百度官方技术文档。 参考文档: csdn:Android百度语音识别 百度官方技术文档:语音技术
android:id="@+id/btn_start"
android:text=“开始录音”
app:layout_constraintEnd_toStartOf="@+id/edittext"
app:layout_constraintTop_toTopOf="@+id/btn_stop" />
android:id="@+id/btn_stop" android:layout_width=“wrap_content” android:layout_height=“wrap_content” android:layout_marginTop=“116dp” android:text=“停止录音” app:layout_constraintStart_toEndOf="@+id/edittext" app:layout_constraintTop_toTopOf=“parent” /> 试运行看看实际效果 ②android 6.0 以上版本权限申请。语音识别要用到麦克风,这个使用权限是需要动态申请的。 private void initPermission() { String permissions[] = {Manifest.permission.RECORD_AUDIO, Manifest.permission.ACCESS_NETWORK_STATE, Manifest.permission.INTERNET, Manifest.permission.WRITE_EXTERNAL_STORAGE }; ArrayList toApplyList = new ArrayList(); for (String perm : permissions) { if (PackageManager.PERMISSION_GRANTED != ContextCompat.checkSelfPermission(this, perm)) { toApplyList.add(perm); //进入到这里代表没有权限 } } String tmpList[] = new String[toApplyList.size()]; if (!toApplyList.isEmpty()) { ActivityCompat.requestPermissions(this, toApplyList.toArray(tmpList), 123); } } @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { // 此处为android 6.0以上动态授权的回调,用户自行实现。 } ③初始化控件与语音识别的核心SDK protected EditText txtResult;//识别结果 protected Button startBtn;//开始识别,持续一定时间不说话会自动停止,需要再次打开 protected Button stopBtn;//停止识别,立即停止,直接输出已经识别的内容 private EventManager asr;//语音识别核心库 private void initView() { txtResult = (EditText) findViewById(R.id.edittext); startBtn = (Button) findViewById(R.id.btn_start); stopBtn = (Button) findViewById(R.id.btn_stop); startBtn.setonClickListener(new View.onClickListener() {//点击开始按钮 @Override public void onClick(View v) { asr.send(SpeechConstant.ASR_START, null, null, 0, 0); } }); stopBtn.setonClickListener(new View.onClickListener() {//点击停止按钮 @Override public void onClick(View v) { asr.send(SpeechConstant.ASR_STOP, null, null, 0, 0); } }); } ④在onCreate方法中调用 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); initPermission(); //初始化EventManager对象 asr = EventManagerFactory.create(this, “asr”); //注册自己的输出事件类 asr.registerListener(this); // EventListener 中 onEvent方法 } 此时会有错误提示,因为我们还没有实现EventListener这个借口,接下来我们就实现这个接口 ⑤实现EventListener接口,要注意这个接口是百度的这个 实现接口的onEvent方法 @Override public void onEvent(String name, String params, byte[] data, int offset, int length) { if (name.equals(SpeechConstant.CALLBACK_EVENT_ASR_PARTIAL)) { // 识别相关的结果都在这里 if (params == null || params.isEmpty()) { return; } if (params.contains("“final_result”")) { // 一句话的最终识别结果 String regrex = “[(.*?),”; //使用正则表达式抽取我们需要的内容 Pattern pattern = Pattern.compile(regrex); Matcher matcher = pattern.matcher(params); if (matcher.find()) { int a = matcher.group(0).indexOf("["); int b = matcher.group(0).indexOf(","); txtResult.setText(matcher.group(0).substring(a+2,b-3)); } } } } 因为返回的结果并不是单纯是识别出的我们所说的话,还有别的内容,所以需要使用正则表达式抽取内容,不抽取的话返回内容如下,明显并不是我们想要的结果 ⑥使用真机调试程序(我所用的genymotion模拟器是不支持语音输入的,不知道别的模拟器支不支持),前题你要开启你手机的开发者选项,并允许USB调试与USB安装,不同手机的开启方法不同,自己上网查一下就好。 将手机用数据线连接电脑后会在此处显示你的设备,选中你的手机并运行程序即可 运行测试 大功告成,注意本文只实现了在线识别,没有网络的时候是无法使用的。离线识别功能百度语音识别SDK也支持,不过离线识别只支持预定义的短语。本文只介绍了一个简单的使用例子,要深入学习百度语音识别SDK的使用建议学习下方百度官方技术文档。 参考文档: csdn:Android百度语音识别 百度官方技术文档:语音技术
android:id="@+id/btn_stop"
android:layout_marginTop=“116dp”
android:text=“停止录音”
app:layout_constraintStart_toEndOf="@+id/edittext"
试运行看看实际效果
②android 6.0 以上版本权限申请。语音识别要用到麦克风,这个使用权限是需要动态申请的。
private void initPermission() {
String permissions[] = {Manifest.permission.RECORD_AUDIO,
Manifest.permission.ACCESS_NETWORK_STATE,
Manifest.permission.INTERNET,
Manifest.permission.WRITE_EXTERNAL_STORAGE
};
ArrayList toApplyList = new ArrayList();
for (String perm : permissions) {
if (PackageManager.PERMISSION_GRANTED != ContextCompat.checkSelfPermission(this, perm)) {
toApplyList.add(perm);
//进入到这里代表没有权限
}
String tmpList[] = new String[toApplyList.size()];
if (!toApplyList.isEmpty()) {
ActivityCompat.requestPermissions(this, toApplyList.toArray(tmpList), 123);
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
// 此处为android 6.0以上动态授权的回调,用户自行实现。
③初始化控件与语音识别的核心SDK
protected EditText txtResult;//识别结果
protected Button startBtn;//开始识别,持续一定时间不说话会自动停止,需要再次打开
protected Button stopBtn;//停止识别,立即停止,直接输出已经识别的内容
private EventManager asr;//语音识别核心库
private void initView() {
txtResult = (EditText) findViewById(R.id.edittext);
startBtn = (Button) findViewById(R.id.btn_start);
stopBtn = (Button) findViewById(R.id.btn_stop);
startBtn.setonClickListener(new View.onClickListener() {//点击开始按钮
public void onClick(View v) {
asr.send(SpeechConstant.ASR_START, null, null, 0, 0);
});
stopBtn.setonClickListener(new View.onClickListener() {//点击停止按钮
asr.send(SpeechConstant.ASR_STOP, null, null, 0, 0);
④在onCreate方法中调用
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initPermission();
//初始化EventManager对象
asr = EventManagerFactory.create(this, “asr”);
//注册自己的输出事件类
asr.registerListener(this); // EventListener 中 onEvent方法
此时会有错误提示,因为我们还没有实现EventListener这个借口,接下来我们就实现这个接口
⑤实现EventListener接口,要注意这个接口是百度的这个
实现接口的onEvent方法
public void onEvent(String name, String params, byte[] data, int offset, int length) {
if (name.equals(SpeechConstant.CALLBACK_EVENT_ASR_PARTIAL)) {
// 识别相关的结果都在这里
if (params == null || params.isEmpty()) {
return;
if (params.contains("“final_result”")) {
// 一句话的最终识别结果
String regrex = “[(.*?),”; //使用正则表达式抽取我们需要的内容
Pattern pattern = Pattern.compile(regrex);
Matcher matcher = pattern.matcher(params);
if (matcher.find()) {
int a = matcher.group(0).indexOf("[");
int b = matcher.group(0).indexOf(",");
txtResult.setText(matcher.group(0).substring(a+2,b-3));
因为返回的结果并不是单纯是识别出的我们所说的话,还有别的内容,所以需要使用正则表达式抽取内容,不抽取的话返回内容如下,明显并不是我们想要的结果
⑥使用真机调试程序(我所用的genymotion模拟器是不支持语音输入的,不知道别的模拟器支不支持),前题你要开启你手机的开发者选项,并允许USB调试与USB安装,不同手机的开启方法不同,自己上网查一下就好。
将手机用数据线连接电脑后会在此处显示你的设备,选中你的手机并运行程序即可
运行测试
大功告成,注意本文只实现了在线识别,没有网络的时候是无法使用的。离线识别功能百度语音识别SDK也支持,不过离线识别只支持预定义的短语。本文只介绍了一个简单的使用例子,要深入学习百度语音识别SDK的使用建议学习下方百度官方技术文档。
参考文档:
csdn:Android百度语音识别
百度官方技术文档:语音技术
上一篇 遍历集合的四种方式
下一篇 【LeetCode】剑指 Offer 26. 树的子结构
版权所有 (c)2021-2022 MSHXW.COM
ICP备案号:晋ICP备2021003244-6号