一、环境准备与API选择
1.1 开发环境配置
在Android Studio中集成百度语音识别API前,需确保开发环境满足以下条件:
- Android Studio版本:建议使用最新稳定版(如2023年11月发布的Hedgehog版本),以兼容最新Gradle插件和Android SDK。
- 最低API级别:百度语音识别SDK要求Android 5.0(API 21)及以上,需在
build.gradle中配置minSdkVersion 21。 - 依赖管理:通过Maven仓库引入百度语音识别SDK,在
app/build.gradle中添加:dependencies {implementation 'com.baidu.aip
4.16.11' // 最新SDK版本需参考官方文档}
1.2 百度API控制台配置
- 注册与认证:登录百度智能云控制台,完成实名认证并创建“语音识别”应用。
- 获取API Key与Secret Key:在应用详情页生成密钥对,用于后续身份验证。
- 开通服务:确保已开通“短语音识别”或“实时语音识别”服务(根据需求选择)。
- IP白名单设置:若需限制访问来源,可在控制台配置服务器IP白名单(开发阶段可暂不设置)。
二、权限配置与初始化
2.1 Android权限声明
在AndroidManifest.xml中添加以下权限:
<uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.RECORD_AUDIO" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- 录音文件存储 -->
动态权限申请需在Activity中处理:
if (ContextCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO)!= PackageManager.PERMISSION_GRANTED) {ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.RECORD_AUDIO},REQUEST_RECORD_AUDIO_PERMISSION);}
2.2 SDK初始化
创建AipSpeech客户端实例,需传入应用上下文、API Key和Secret Key:
import com.baidu.aip.speech.AipSpeech;public class SpeechRecognizerManager {private static final String APP_ID = "你的AppID";private static final String API_KEY = "你的ApiKey";private static final String SECRET_KEY = "你的SecretKey";private AipSpeech client;public SpeechRecognizerManager(Context context) {client = new AipSpeech(context, APP_ID, API_KEY, SECRET_KEY);// 可选:设置日志级别client.setLogLevel(AipLogLevel.AIP_LOG_DEBUG);}}
三、语音识别API调用流程
3.1 短语音识别(异步模式)
适用于录制完成的音频文件识别,步骤如下:
-
音频文件准备:
- 格式要求:PCM/WAV/AMR,采样率8kHz或16kHz,单声道。
- 示例代码(录制音频):
private void startRecording() {String fileName = getExternalCacheDir().getAbsolutePath() + "/record.pcm";MediaRecorder recorder = new MediaRecorder();recorder.setAudioSource(MediaRecorder.AudioSource.MIC);recorder.setOutputFormat(MediaRecorder.OutputFormat.PCM_16BIT);recorder.setOutputFile(fileName);recorder.setAudioEncoder(MediaRecorder.AudioEncoder.PCM_16BIT);recorder.prepare();recorder.start();}
-
发起识别请求:
public void recognizeShortSpeech(String filePath) {JSONObject params = new JSONObject();try {params.put("dev_pid", 1537); // 1537表示中文普通话输入params.put("format", "pcm");params.put("rate", 16000);params.put("channel", 1);params.put("cuid", "your_device_id"); // 设备唯一标识} catch (JSONException e) {e.printStackTrace();}client.asr(filePath, "pcm", 16000, params, new OnResultListener<SpeechResult>() {@Overridepublic void onResult(SpeechResult result) {if (result != null) {String text = result.getResultString();Log.d("ASR", "识别结果: " + text);}}@Overridepublic void onError(AipError error) {Log.e("ASR", "错误码: " + error.getErrorCode() + ", 描述: " + error.toString());}});}
3.2 实时语音识别(流式模式)
适用于实时语音转文字场景,需通过AipSpeech的startRealTimeSpeech方法实现:
public void startRealTimeRecognition() {JSONObject params = new JSONObject();try {params.put("dev_pid", 1537);params.put("format", "pcm");params.put("rate", 16000);} catch (JSONException e) {e.printStackTrace();}client.startRealTimeSpeech(params, new OnResultListener<SpeechResult>() {@Overridepublic void onResult(SpeechResult result) {// 实时返回中间结果(需解析JSON)try {JSONObject jsonResult = new JSONObject(result.getResultString());String text = jsonResult.optString("result");if (!text.isEmpty()) {Log.d("REAL_TIME_ASR", "实时结果: " + text);}} catch (JSONException e) {e.printStackTrace();}}@Overridepublic void onError(AipError error) {Log.e("REAL_TIME_ASR", "错误: " + error.toString());}});}
需通过sendAudioData方法持续发送音频数据块(建议每200ms发送一次)。
四、错误处理与优化建议
4.1 常见错误码处理
| 错误码 | 描述 | 解决方案 |
|---|---|---|
| 110 | 认证失败 | 检查API Key/Secret Key是否正确 |
| 111 | 请求超时 | 检查网络连接,增加超时时间 |
| 121 | 音频格式错误 | 确认采样率、声道数与参数一致 |
| 133 | 音频过长 | 短语音识别限制60秒内 |
4.2 性能优化建议
- 音频预处理:使用
AudioRecord直接采集原始数据,避免通过MediaRecorder转码。 - 网络优化:在弱网环境下启用本地缓存或降级策略。
- 功耗控制:实时识别时动态调整采样率(如静音阶段降低频率)。
- 多线程处理:将识别任务放在独立线程,避免阻塞UI。
五、完整示例与扩展功能
5.1 完整Activity示例
public class MainActivity extends AppCompatActivity {private SpeechRecognizerManager recognizer;private Button recordBtn;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);recognizer = new SpeechRecognizerManager(this);recordBtn = findViewById(R.id.record_btn);recordBtn.setOnClickListener(v -> {if (checkPermissions()) {startRecordingAndRecognize();}});}private boolean checkPermissions() {if (ContextCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO)!= PackageManager.PERMISSION_GRANTED) {ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.RECORD_AUDIO},1);return false;}return true;}private void startRecordingAndRecognize() {String filePath = getExternalCacheDir().getAbsolutePath() + "/temp.pcm";// 录制音频并调用recognizeShortSpeech(filePath)}}
5.2 扩展功能实现
- 多语言支持:通过修改
dev_pid参数切换语言模型(如英语1737)。 - 热词优化:在控制台配置自定义热词,提升特定词汇识别率。
- 离线识别:需集成百度离线SDK,但功能受限且需额外授权。
通过以上步骤,开发者可在Android Studio中高效集成百度语音识别API,实现从简单语音输入到复杂实时交互的多样化功能。建议参考百度语音识别官方文档获取最新API更新。