主题
语音识别的Java实现
UniApp前端实现(Vue.js)
录音功能
使用uni.getRecorderManager()
管理录音,保存为MP3格式(阿里云支持的格式):
javascript
const recorderManager = uni.getRecorderManager();
let audioPath = '';
// 开始录音
function startRecord() {
recorderManager.start({
format: 'mp3',
sampleRate: 16000, // 16kHz采样率(阿里云要求)
});
}
// 停止录音并上传
function stopRecord() {
recorderManager.stop();
recorderManager.onStop((res) => {
audioPath = res.tempFilePath;
uploadAudio();
});
}
上传音频到Java服务器
使用uni.uploadFile
发送音频文件:
javascript
function uploadAudio() {
uni.uploadFile({
url: 'https://your-java-server.com/audio/upload',
filePath: audioPath,
name: 'audioFile',
formData: { userId: '123' },
success: (res) => {
console.log('识别结果:', JSON.parse(res.data).text);
}
});
}
Java服务器实现
Qwen-Audio
阿里云
添加依赖(pom.xml)
xml
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.5.28</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-nls-cloud-meta</artifactId>
<version>1.1.8</version>
</dependency>
接收音频的Controller
java
@RestController
@RequestMapping("/audio")
public class AudioController {
@PostMapping("/upload")
public ResponseEntity<Map<String, String>> handleAudioUpload(
@RequestParam("audioFile") MultipartFile audioFile) {
try {
// 1. 保存临时文件
File tempFile = File.createTempFile("audio-", ".mp3");
audioFile.transferTo(tempFile);
// 2. 调用阿里云语音识别
String text = AliyunSpeechRecognizer.recognize(tempFile);
// 3. 删除临时文件
tempFile.delete();
// 4. 返回识别结果
return ResponseEntity.ok(Map.of("text", text));
} catch (Exception e) {
return ResponseEntity.status(500).body(Map.of("error", e.getMessage()));
}
}
}
语音识别工具类
java
@RestController
@RequestMapping("/audio")
public class AudioController {
@PostMapping("/upload")
public ResponseEntity<Map<String, String>> handleAudioUpload(
@RequestParam("audioFile") MultipartFile audioFile) {
try {
// 1. 保存临时文件
File tempFile = File.createTempFile("audio-", ".mp3");
audioFile.transferTo(tempFile);
// 2. 调用阿里云语音识别
String text = AliyunSpeechRecognizer.recognize(tempFile);
// 3. 删除临时文件
tempFile.delete();
// 4. 返回识别结果
return ResponseEntity.ok(Map.of("text", text));
} catch (Exception e) {
return ResponseEntity.status(500).body(Map.of("error", e.getMessage()));
}
}
}