简介:本文详细介绍如何在uniapp框架中集成百度语音识别技术,构建具备录音与语音转文字功能的简易应用,涵盖技术选型、环境配置、核心代码实现及优化建议。
随着移动端语音交互场景的普及,录音与语音识别成为开发高频需求。uniapp作为跨平台开发框架,支持多端统一开发,而百度语音识别技术凭借高准确率、低延迟和丰富的API接口,成为开发者首选的语音处理方案。本文旨在通过uniapp实现一个简易录音器,集成百度语音识别服务,完成录音、上传、转文字的全流程功能。
npm install @dcloudio/uni-ui --save
manifest.json,确保麦克风权限已开启:
"app-plus": {"permissions": ["microphone"]}
百度提供RESTful API,无需直接集成SDK,但需通过HTTP请求调用服务。推荐使用uni.request或封装为Promise模块。
uniapp通过plus.audio.getRecorder实现跨平台录音:
let recorder = null;function startRecording() {recorder = plus.audio.getRecorder({format: 'wav', // 或'mp3',需平台支持samplerate: 16000 // 采样率,百度API推荐16k});recorder.record({filename: '_doc/audio/temp.wav' // 临时文件路径}, () => {console.log('录音开始');}, (error) => {console.error('录音失败:', error);});}function stopRecording() {if (recorder) {recorder.stop();recorder.close();recorder = null;console.log('录音结束');}}
wav、mp3、amr等,推荐wav以避免转码损失。_doc/目录确保权限,避免路径错误。百度API需通过Access Token鉴权,需先获取Token:
async function getAccessToken(apiKey, secretKey) {const url = `https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=${apiKey}&client_secret=${secretKey}`;const res = await uni.request({ url });return res.data.access_token;}
使用uni.uploadFile上传文件,并调用识别API:
async function recognizeAudio(filePath, token) {// 上传文件至服务器(或直接使用本地文件,需处理)const uploadRes = await uni.uploadFile({url: 'https://your-server.com/upload', // 需自行搭建上传服务,或使用base64filePath: filePath,name: 'file'});// 假设已获取服务器返回的URLconst fileUrl = uploadRes.tempFilePath;// 调用百度语音识别APIconst recognizeUrl = `https://vop.baidu.com/server_api?token=${token}&cuid=YOUR_DEVICE_ID&format=wav&rate=16000`;const res = await uni.request({url: recognizeUrl,method: 'POST',header: { 'Content-Type': 'application/json' },data: {speech: fileUrl, // 实际需处理为二进制或base64len: fs.statSync(filePath).size // 文件大小}});return res.data.result; // 返回识别文本}
const base64 = await uni.getFileSystemManager().readFile(filePath, 'base64');
// 页面逻辑export default {data() {return {isRecording: false,recognitionResult: ''};},methods: {async startRecord() {this.isRecording = true;startRecording();},stopRecord() {stopRecording();this.isRecording = false;this.recognize();},async recognize() {const token = await getAccessToken('YOUR_API_KEY', 'YOUR_SECRET_KEY');const result = await recognizeAudio('_doc/audio/temp.wav', token);this.recognitionResult = result;}}};
Info.plist中添加NSMicrophoneUsageDescription。plus.io.resolveLocalFileSystemURL确保路径解析一致。WebRTC或第三方库(如RecorderJS)实现,但需用户授权。uni.request错误,提示用户重试。本文通过uniapp与百度语音识别API的集成,实现了一个跨平台的简易录音器。核心步骤包括录音API调用、百度鉴权、文件上传与语音识别。开发者可根据需求扩展以下功能:
dev_pid参数切换语言模型。通过合理设计,uniapp与百度语音识别技术的结合能够高效满足语音交互场景的需求,为开发者提供灵活、可靠的解决方案。