mirror of
https://github.com/hwanny1128/HGZero.git
synced 2025-12-06 06:46:24 +00:00
STT 이벤트에 sessionId 추가 및 오디오 청크 처리 시간 15초로 변경
- TranscriptionEvent.SegmentCreated에 sessionId 필드 추가 - AudioBatchProcessor의 스케줄링 간격을 10초에서 15초로 변경 - AI 서비스의 TranscriptSegmentReadyEvent에도 sessionId 필드 추가 - 이벤트 발행 시 sessionId에 meetingId 값 할당 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
d48969c406
commit
b1ef088795
@ -0,0 +1,57 @@
|
||||
package com.unicorn.hgzero.ai.infra.event;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* STT Service에서 발행하는 음성 변환 세그먼트 이벤트
|
||||
* Azure Event Hub를 통해 전달됨
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class TranscriptSegmentReadyEvent {
|
||||
|
||||
/**
|
||||
* 녹음 ID
|
||||
*/
|
||||
private String recordingId;
|
||||
|
||||
/**
|
||||
* 회의 ID
|
||||
*/
|
||||
private String meetingId;
|
||||
|
||||
/**
|
||||
* 세션 ID
|
||||
*/
|
||||
private String sessionId;
|
||||
|
||||
/**
|
||||
* 변환 텍스트 세그먼트 ID
|
||||
*/
|
||||
private String transcriptId;
|
||||
|
||||
/**
|
||||
* 변환된 텍스트
|
||||
*/
|
||||
private String text;
|
||||
|
||||
/**
|
||||
* 타임스탬프 (ms)
|
||||
*/
|
||||
private Long timestamp;
|
||||
|
||||
/**
|
||||
* 신뢰도 점수 (0-1)
|
||||
*/
|
||||
private Double confidence;
|
||||
|
||||
/**
|
||||
* 이벤트 발생 시간
|
||||
*/
|
||||
private String eventTime;
|
||||
}
|
||||
@ -25,6 +25,7 @@ public class TranscriptionEvent {
|
||||
private String segmentId;
|
||||
private String recordingId;
|
||||
private String meetingId;
|
||||
private String sessionId;
|
||||
private String text;
|
||||
private String speakerId;
|
||||
private String speakerName;
|
||||
@ -34,7 +35,7 @@ public class TranscriptionEvent {
|
||||
private Boolean warningFlag;
|
||||
private LocalDateTime eventTime;
|
||||
|
||||
public static SegmentCreated of(String segmentId, String recordingId, String meetingId,
|
||||
public static SegmentCreated of(String segmentId, String recordingId, String meetingId, String sessionId,
|
||||
String text, String speakerId, String speakerName,
|
||||
LocalDateTime timestamp, Double duration, Double confidence, Boolean warningFlag) {
|
||||
return SegmentCreated.builder()
|
||||
@ -43,6 +44,7 @@ public class TranscriptionEvent {
|
||||
.segmentId(segmentId)
|
||||
.recordingId(recordingId)
|
||||
.meetingId(meetingId)
|
||||
.sessionId(sessionId)
|
||||
.text(text)
|
||||
.speakerId(speakerId)
|
||||
.speakerName(speakerName)
|
||||
|
||||
@ -16,7 +16,7 @@ import java.util.UUID;
|
||||
|
||||
/**
|
||||
* 오디오 배치 프로세서
|
||||
* 5초마다 Redis에 축적된 오디오를 처리하여 텍스트로 변환
|
||||
* 15초마다 Redis에 축적된 오디오를 처리하여 텍스트로 변환
|
||||
*
|
||||
* Note: STT 결과는 DB에 저장하지 않고, Event Hub와 WebSocket으로만 전송
|
||||
* 최종 회의록은 AI 서비스에서 저장
|
||||
@ -32,13 +32,13 @@ public class AudioBatchProcessor {
|
||||
private final AudioWebSocketHandler webSocketHandler;
|
||||
|
||||
/**
|
||||
* 5초마다 오디오 배치 처리
|
||||
* 15초마다 오디오 배치 처리
|
||||
* - Redis에서 오디오 청크 조회
|
||||
* - Azure Speech로 텍스트 변환
|
||||
* - Event Hub 이벤트 발행 (AI 서비스로 전송)
|
||||
* - WebSocket 실시간 전송 (클라이언트 표시)
|
||||
*/
|
||||
@Scheduled(fixedDelay = 5000, initialDelay = 10000) // 5초마다 실행, 최초 10초 후 시작
|
||||
@Scheduled(fixedDelay = 15000, initialDelay = 15000) // 15초마다 실행, 최초 15초 후 시작
|
||||
public void processAudioBatch() {
|
||||
try {
|
||||
// 활성 회의 목록 조회
|
||||
@ -68,7 +68,7 @@ public class AudioBatchProcessor {
|
||||
*/
|
||||
private void processOneMeeting(String meetingId) {
|
||||
try {
|
||||
// Redis에서 최근 5초 오디오 청크 조회
|
||||
// Redis에서 최근 15초 오디오 청크 조회
|
||||
List<AudioChunkDto> chunks = audioBufferService.getAudioChunks(meetingId);
|
||||
|
||||
if (chunks.isEmpty()) {
|
||||
@ -78,7 +78,7 @@ public class AudioBatchProcessor {
|
||||
|
||||
log.info("오디오 청크 조회 완료 - meetingId: {}, chunks: {}개", meetingId, chunks.size());
|
||||
|
||||
// 오디오 청크 병합 (5초 분량)
|
||||
// 오디오 청크 병합 (15초 분량)
|
||||
byte[] mergedAudio = audioBufferService.mergeAudioChunks(chunks);
|
||||
|
||||
if (mergedAudio.length == 0) {
|
||||
@ -123,6 +123,7 @@ public class AudioBatchProcessor {
|
||||
UUID.randomUUID().toString(), // segmentId
|
||||
meetingId, // recordingId
|
||||
meetingId, // meetingId
|
||||
meetingId, // sessionId (meetingId와 동일)
|
||||
result.getText(), // text
|
||||
"UNKNOWN", // speakerId
|
||||
"참석자", // speakerName
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user