新版Android Studio接入百度语音识别转文字流程

1.创建应用

在语音技术页面创建应用
在这里插入图片描述

选择功能
在这里插入图片描述

填写你创建的应用包名
在这里插入图片描述

2.下载SDK

下载SDK
在这里插入图片描述
在这里插入图片描述

3.导入模块

将下载好的例程解压
在这里插入图片描述

复制出里面的core
在这里插入图片描述

导入core
在这里插入图片描述

修改bulid.gradle.kt(app)
在这里插入图片描述

修改core里的build.gradle
在这里插入图片描述

然后重新构建,完成后如下
在这里插入图片描述

先运行一遍以防报错!!!

4.参考代码编写

所有代码均为claude-3.5编写

RecognizerManager.java工具方法

package com.example.rk3568_music.baidu;

import android.content.Context;
import android.util.Log;
import com.baidu.speech.EventListener;
import com.baidu.speech.EventManager;
import com.baidu.speech.EventManagerFactory;
import com.baidu.speech.asr.SpeechConstant;
import org.json.JSONObject;
import java.util.HashMap;
import java.util.Map;

public class RecognizerManager {
    private static final String TAG = "RecognizerManager";
    private static final String APP_ID = "你的ID";
    private static final String APP_KEY = "你的KEY";
    private static final String SECRET_KEY = "你的KEY";
    
    private final EventManager asr;
    private final RecognitionListener recognitionListener;
    private final EventListener eventListener;

    public interface RecognitionListener {
        void onResult(String result);
        void onError(String error);
    }

    public RecognizerManager(Context context, RecognitionListener listener) {
        this.recognitionListener = listener;
        this.asr = EventManagerFactory.create(context, "asr");
        this.eventListener = (name, params, data, offset, length) -> handleEvent(name, params);
        initRecognizer();
    }

    private void initRecognizer() {
        try {
            asr.registerListener(eventListener);
            Log.i(TAG, "语音识别引擎初始化成功");
        } catch (Exception e) {
            Log.e(TAG, "初始化语音识别引擎失败: " + e.getMessage());
            recognitionListener.onError("初始化语音识别引擎失败: " + e.getMessage());
        }
    }

    private void handleEvent(String eventName, String params) {
        if (params == null || params.isEmpty()) return;
        
        try {
            JSONObject json = new JSONObject(params);
            Log.i(TAG, "Event: " + eventName + ", Params: " + params);
            
            switch (eventName) {
                case SpeechConstant.CALLBACK_EVENT_ASR_READY:
                    Log.i(TAG, "引擎就绪,可以开始说话");
                    break;
                    
                case SpeechConstant.CALLBACK_EVENT_ASR_PARTIAL:
                    handlePartialResult(json);
                    break;
                    
                case SpeechConstant.CALLBACK_EVENT_ASR_FINISH:
                    handleFinishResult(json);
                    break;

                case SpeechConstant.CALLBACK_EVENT_ASR_ERROR:
                    String errorMsg = json.optString("desc", "未知错误");
                    Log.e(TAG, "识别错误: " + errorMsg);
                    recognitionListener.onError(errorMsg);
                    break;
            }
        } catch (Exception e) {
            Log.e(TAG, "处理识别事件失败: " + e.getMessage());
        }
    }

    private void handlePartialResult(JSONObject json) throws Exception {
        if (json.has("results_recognition") && 
            "final_result".equals(json.optString("result_type"))) {
            String result = json.getJSONArray("results_recognition").getString(0);
            recognitionListener.onResult(result);
        }
    }

    private void handleFinishResult(JSONObject json) throws Exception {
        if (json.has("error")) {
            int errorCode = json.getInt("error");
            if (errorCode != 0) {
                String errorDesc = json.optString("desc", "未知错误");
                Log.e(TAG, "识别错误: " + errorDesc + " (错误码: " + errorCode + ")");
                recognitionListener.onError(errorDesc);
            }
        }
    }

    public void startListening() {
        try {
            Map<String, Object> params = new HashMap<>();
            // 授权参数
            params.put(SpeechConstant.APP_ID, APP_ID);
            params.put(SpeechConstant.APP_KEY, APP_KEY);
            params.put(SpeechConstant.SECRET, SECRET_KEY);
            
            // 识别参数
            params.put(SpeechConstant.ACCEPT_AUDIO_VOLUME, false);
            params.put(SpeechConstant.VAD, "touch");
            params.put(SpeechConstant.PID, 1537);
            params.put(SpeechConstant.VAD_ENDPOINT_TIMEOUT, 0);

            asr.send(SpeechConstant.ASR_START, new JSONObject(params).toString(), null, 0, 0);
            Log.i(TAG, "开始录音识别");
        } catch (Exception e) {
            Log.e(TAG, "启动语音识别失败: " + e.getMessage());
            recognitionListener.onError("启动语音识别失败: " + e.getMessage());
        }
    }

    public void stopListening() {
        try {
            asr.send(SpeechConstant.ASR_STOP, null, null, 0, 0);
            Log.i(TAG, "停止录音识别");
        } catch (Exception e) {
            Log.e(TAG, "停止语音识别失败: " + e.getMessage());
        }
    }

    public void release() {
        try {
            if (asr != null) {
                asr.send(SpeechConstant.ASR_CANCEL, null, null, 0, 0);
                asr.unregisterListener(eventListener);
                Log.i(TAG, "释放语音识别资源");
            }
        } catch (Exception e) {
            Log.e(TAG, "释放语音识别资源失败: " + e.getMessage());
        }
    }
} 

使用示例,仅供参考

	// 语音识别管理器
    private RecognizerManager recognizerManager;
    // 语音识别按钮
    private Button btnVoiceRecognition;
    // 用于控制是否正在录音
    private boolean isListening = false;

	@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
	
        // 初始化百度语音识别
        initVoiceRecognition();
    }

// 初始化语音识别功能
    private void initVoiceRecognition() {
        btnVoiceRecognition = findViewById(R.id.btn_voice_recognition);
        
        recognizerManager = new RecognizerManager(this, new RecognizerManager.RecognitionListener() {
            @Override
            public void onResult(String result) {
                Log.i(TAG, "语音识别结果: " + result);
            }

            @Override
            public void onError(String error) {
                Log.e(TAG, "语音识别错误: " + error);
                runOnUiThread(() -> {
                    Toast.makeText(MainActivity.this, error, Toast.LENGTH_SHORT).show();
                    btnVoiceRecognition.setText("开始语音识别");
                    isListening = false;
                });
            }
        });

        btnVoiceRecognition.setOnClickListener(v -> {
            if (!isListening) {
                recognizerManager.startListening();
                btnVoiceRecognition.setText("停止识别");
                isListening = true;
            } else {
                recognizerManager.stopListening();
                btnVoiceRecognition.setText("开始语音识别");
                isListening = false;
            }
        });
    }

5.运行情况

在这里插入图片描述

6.总结

借助ai大幅度加快开发速度,主要使用工具为cusor、Android Studio,

在每次完成新功能前一定要备份!!!一定要备份!!!一定要备份!!!避免出错

Logo

一站式 AI 云服务平台

更多推荐