2025-09-22 17:06:47 +08:00
|
|
|
|
package com.ruoyi.cms.handler;
|
|
|
|
|
|
|
|
|
|
|
|
import com.alibaba.nls.client.protocol.asr.SpeechRecognizer;
|
|
|
|
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
|
|
|
|
|
|
|
import javax.websocket.*;
|
|
|
|
|
|
import javax.websocket.server.ServerEndpoint;
|
|
|
|
|
|
import java.io.ByteArrayInputStream;
|
|
|
|
|
|
import java.io.IOException;
|
|
|
|
|
|
import java.nio.ByteBuffer;
|
|
|
|
|
|
|
|
|
|
|
|
@Component
|
|
|
|
|
|
@ServerEndpoint("/speech-recognition")
|
|
|
|
|
|
public class SpeechRecognitionWebSocketHandler {
|
|
|
|
|
|
|
|
|
|
|
|
private SpeechRecognizerAI recognizerDemo;
|
|
|
|
|
|
|
|
|
|
|
|
public SpeechRecognitionWebSocketHandler() {
|
|
|
|
|
|
// 初始化语音识别器
|
2025-09-23 10:54:46 +08:00
|
|
|
|
String appKey = "4lFYn2yPsQymwGu8";
|
|
|
|
|
|
String id = "LTAI5t9hhSqdDHqwH3RjgyYj";
|
|
|
|
|
|
String secret = "ni5aW3vxrWouMwcGqJPfh9Uu56PBuv";
|
2025-09-22 17:06:47 +08:00
|
|
|
|
String url = System.getenv().getOrDefault("NLS_GATEWAY_URL", "wss://nls-gateway-cn-shanghai.aliyuncs.com/ws/v1");
|
|
|
|
|
|
recognizerDemo = new SpeechRecognizerAI(appKey, id, secret, url);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 连接建立成功调用的方法
|
|
|
|
|
|
*/
|
|
|
|
|
|
@OnOpen
|
|
|
|
|
|
public void onOpen(Session session) {
|
|
|
|
|
|
System.out.println("WebSocket 连接建立成功,sessionId = " + session.getId());
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 收到客户端消息后调用的方法
|
|
|
|
|
|
*/
|
|
|
|
|
|
@OnMessage(maxMessageSize=5242880)
|
|
|
|
|
|
public void onMessage(ByteBuffer message, Session session) throws IOException {
|
|
|
|
|
|
byte[] audioData = new byte[message.remaining()];
|
|
|
|
|
|
message.get(audioData);
|
|
|
|
|
|
|
|
|
|
|
|
// 处理音频数据
|
|
|
|
|
|
recognizerDemo.processStream(session, new ByteArrayInputStream(audioData), 16000);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-09-23 10:54:46 +08:00
|
|
|
|
|
2025-09-22 17:06:47 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* 连接关闭调用的方法
|
|
|
|
|
|
*/
|
|
|
|
|
|
@OnClose
|
|
|
|
|
|
public void onClose(Session session) {
|
|
|
|
|
|
System.out.println("WebSocket 连接关闭,sessionId = " + session.getId());
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 发生错误时调用的方法
|
|
|
|
|
|
*/
|
|
|
|
|
|
@OnError
|
|
|
|
|
|
public void onError(Session session, Throwable error) {
|
|
|
|
|
|
System.err.println("WebSocket 发生错误:" + error.getMessage());
|
|
|
|
|
|
error.printStackTrace();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|