Skip to content

Commit 11d288d

Browse files
vritservritser
authored andcommitted
fix(stt.aliyun): do not reuse recognizer
1 parent cb31d30 commit 11d288d

File tree

1 file changed

+2
-34
lines changed

1 file changed

+2
-34
lines changed

src/main/java/com/xiaozhi/dialogue/stt/providers/AliyunSttService.java

Lines changed: 2 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -23,37 +23,10 @@ public class AliyunSttService implements SttService {
2323
private static final String PROVIDER_NAME = "aliyun";
2424
private static final String DEFAULT_MODEL = "paraformer-realtime-v2"; // 默认模型
2525

26-
// 识别器实例
2726
private final String apiKey;
28-
private Recognition recognizer;
29-
private final Object recognizerLock = new Object(); // 用于同步访问recognizer
3027

3128
public AliyunSttService(SysConfig config) {
3229
this.apiKey = config.getApiKey();
33-
// 初始化recognizer
34-
createNewRecognizer();
35-
}
36-
37-
/**
38-
* 创建新的Recognition实例
39-
*/
40-
private void createNewRecognizer() {
41-
synchronized (recognizerLock) {
42-
// 如果存在旧的实例,尝试关闭它
43-
if (recognizer != null) {
44-
try {
45-
if (recognizer.getDuplexApi() != null) {
46-
recognizer.getDuplexApi().close(1000, "创建新实例");
47-
}
48-
} catch (Exception e) {
49-
logger.warn("关闭旧的Recognition实例时出错", e);
50-
}
51-
}
52-
53-
// 创建新实例
54-
recognizer = new Recognition();
55-
logger.info("创建了新的Recognition实例");
56-
}
5730
}
5831

5932
@Override
@@ -75,11 +48,7 @@ public String recognition(byte[] audioData) {
7548

7649
@Override
7750
public String streamRecognition(Sinks.Many<byte[]> audioSink) {
78-
// 获取当前的recognizer实例
79-
Recognition currentRecognizer;
80-
synchronized (recognizerLock) {
81-
currentRecognizer = this.recognizer;
82-
}
51+
var recognizer = new Recognition();
8352

8453
// 创建识别参数
8554
var param = RecognitionParam.builder()
@@ -92,7 +61,7 @@ public String streamRecognition(Sinks.Many<byte[]> audioSink) {
9261
// 使用 Reactor 执行流式识别
9362
var recognition = Flux.<String>create(sink -> {
9463
try {
95-
currentRecognizer.streamCall(param, Flowable.create(emitter -> {
64+
recognizer.streamCall(param, Flowable.create(emitter -> {
9665
audioSink.asFlux().subscribe(
9766
chunk -> emitter.onNext(ByteBuffer.wrap(chunk)),
9867
emitter::onError,
@@ -109,7 +78,6 @@ public String streamRecognition(Sinks.Many<byte[]> audioSink) {
10978
Throwable::printStackTrace,
11079
sink::complete
11180
);
112-
11381
} catch (Exception e) {
11482
sink.error(e);
11583
logger.info("语音识别失败: {}", e);

0 commit comments

Comments
 (0)