Skip to content

语音识别的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

参考 语音识别 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()));
        }
    }
}

粤ICP备20009776号