64 lines
1.9 KiB
Java
64 lines
1.9 KiB
Java
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() {
|
||
// 初始化语音识别器
|
||
String appKey = "4lFYn2yPsQymwGu8";
|
||
String id = "LTAI5t9hhSqdDHqwH3RjgyYj";
|
||
String secret = "ni5aW3vxrWouMwcGqJPfh9Uu56PBuv";
|
||
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);
|
||
}
|
||
|
||
|
||
/**
|
||
* 连接关闭调用的方法
|
||
*/
|
||
@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();
|
||
}
|
||
} |