第一步

① 建立平臺應用

點選百度智慧雲進入,沒有賬號的可以先註冊賬號,這裡預設都有賬號了,然後登入。

然後左側導航欄點選找到語音技術

然後會進入一個應用總覽頁面,

然後點選建立應用

立即建立

點選檢視應用詳情

這幾個值都是等下專案中要用的,請注意,最好是複製貼上,不要手打,上圖中有一個下載SDK,點選進入下載頁面,第一個就是

點選下載到本地,下載之後是一個壓縮檔案,解壓之後先不用管它,

第二步

然後在Android Studio裡面建立一個專案

② 建立Android專案並配置。包名填之前建立應用時填的包名

將下載的SDK中的core複製到你專案的app同級目錄下,

開啟core中的src/main/AndroidManifest.xml

在裡面修改成你的apiid ,appid,secretid

第三步

示例程式碼:

MainActivity.java

package com.yyz.asrdemo;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import com.baidu.speech.EventListener;
import com.baidu.speech.EventManager;
import com.baidu.speech.EventManagerFactory;
import com.baidu.speech.asr.SpeechConstant;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern; public class MainActivity extends AppCompatActivity implements EventListener {
protected EditText txtResult;//識別結果
protected Button startBtn;//開始識別,持續一定時間不說話會自動停止,需要再次開啟
protected Button stopBtn;//停止識別,立即停止,直接輸出已經識別的內容
private EventManager asr;//語音識別核心庫 @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方法 } /**
* 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<String> toApplyList = new ArrayList<String>(); 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);
} } /**
* 許可權申請回調,可以作進一步處理
* @param requestCode
* @param permissions
* @param grantResults
*/
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
// 此處為android 6.0以上動態授權的回撥,使用者自行實現。
} /**
* 初始化控制元件
*/
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);
}
});
} /**
* 自定義輸出事件類 EventListener 回撥方法
*/
@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));
}
}
} } @Override
protected void onDestroy() {
super.onDestroy();
//傳送取消事件
asr.send(SpeechConstant.ASR_CANCEL, "{}", null, 0, 0);
//退出事件管理器
// 必須與registerListener成對出現,否則可能造成記憶體洩露
asr.unregisterListener(this);
} }

activity_main.xml

<?xml version="1.0" encoding="UTF-8"?>

-<androidx.constraintlayout.widget.ConstraintLayout tools:context=".MainActivity" android:layout_height="match_parent" android:layout_width="match_parent" xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:android="http://schemas.android.com/apk/res/android">

<EditText android:layout_height="wrap_content" android:layout_width="wrap_content" app:layout_constraintTop_toTopOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" android:hint="請點選開始錄音" android:id="@+id/edittext"/>

<Button android:layout_height="wrap_content" android:layout_width="wrap_content" app:layout_constraintTop_toTopOf="@+id/btn_stop" android:id="@+id/btn_start" app:layout_constraintEnd_toStartOf="@+id/edittext" android:text="開始錄音"/>

<Button android:layout_height="wrap_content" android:layout_width="wrap_content" app:layout_constraintTop_toTopOf="parent" android:id="@+id/btn_stop" android:text="停止錄音" app:layout_constraintStart_toEndOf="@+id/edittext" android:layout_marginTop="116dp"/>

</androidx.constraintlayout.widget.ConstraintLayout>

跑起來!!