| | |
| | | ```bash |
| | | node tools/validate-turn-stream-fixture.mjs fixtures/turn-stream-happy.ndjson |
| | | node tools/validate-turn-stream-fixture.mjs fixtures/turn-stream-mp3-chunks.ndjson |
| | | node tools/validate-asr-realtime-fixture.mjs fixtures/asr-realtime-happy.ndjson |
| | | ``` |
| | | |
| | | 这条快速线只校验 NDJSON contract、事件顺序和 `pcm_s16le` / `mp3` chunk 基本约束,用于提前发现 `replyPlaybackMode`、`reply_state`、`reply_audio_chunk`、`turn_completed` 等字段破坏。它不能替代 Docker 镜像构建、真实 LiveKit smoke 或 iPhone 真机验收。 |
| | | |
| | | ASR realtime fixture 额外校验 `session_start -> audio_chunk -> vad_speech_end -> finish`、连续 `chunkSeq`、`pcm_s16le / 16000Hz / mono` 与 `24KiB` 单行上限。它只验证 helper 到 Java 的 wire contract,不代表 provider partial/final 已通过。 |
| | | |
| | | ## 本机运行 |
| | | |
| | |
| | | - `POST /internal/combrabo-voice/sessions/{callId}/stop` |
| | | |
| | | `sessions/start` 收到 Java 传入的 LiveKit bot 入房材料后,会拉起现有 worker 子进程承接媒体链路。helper service 本身不做 ASR / LLM / TTS / 消息 / 计费,也不持久化业务数据。 |
| | | |
| | | 当 Java 在 `sessions/start.runtime` 下发 `asrRealtimeEnabled=true`、`asrRealtimeUrl` 与 `asrRealtimeChunkDurationMs=200` 时,worker 会从 VAD speech start 起接收 20ms 用户音频帧,聚合成 `16kHz / mono / 200ms` NDJSON chunk 持续上传给 Java;最后一块允许短于 200ms。helper 只负责音频传输和 fallback 编排,ASR provider session、partial/final 归一化、activity 和 `asrResultRef` 仍由 Java 管理;realtime 失败时只回退一次既有 final-only ASR stream。 |
| | | |
| | | 用户音轨由独立 drain task 持续读取 `NativeAudioStream`,并通过容量 `100` 的原始 PCM frame 队列交给 VAD / realtime ASR 消费;ASR final、turn bridge、LLM/TTS 或控制面等待不得阻塞 LiveKit 原生音频队列。drain 队列满时丢最新 frame,并低频记录累计接收/丢弃计数;VAD 使用 frame 捕获时的单调时间戳,ASR 始终消费原始 PCM,并保留 speech start 确认窗口中的 prefix frame。该结构参考 `cb-sdk/combrabo-platform origin/stag@a81f17c` 的音频排空与 raw PCM 修复经验。 |
| | | |
| | | 鉴权口径: |
| | | |
| | |
| | | export CV_ENABLE_SIMPLE_VAD=true |
| | | ``` |
| | | |
| | | 首版 VAD 不引入外部模型,只基于上行 PCM frame 的 RMS / peak 做保守阈值判断。配置了 Java runtime turn bridge 后,helper 会在有效 `vad_speech_end` 后把本轮 PCM 写成 `user.wav` artifact,并调用 Java 内部 bridge;helper 仍不做 ASR / LLM / TTS / 消息落库。 |
| | | 首版 VAD 不引入外部模型,只基于上行 PCM frame 的 RMS 做保守阈值判断,peak 只作为诊断字段记录。这个口径对齐 cb-sdk 的能量阈值分段思路,避免单个尖峰噪声反复打断静音窗口,使用户 turn 拖到 `max_turn_ms`。配置了 Java runtime turn bridge 后,helper 会在有效 `vad_speech_end` 后把本轮 PCM 写成 `user.wav` artifact,并调用 Java 内部 bridge;helper 仍不做 ASR / LLM / TTS / 消息落库。 |
| | | |
| | | 可调参数: |
| | | |
| | |
| | | export CV_VAD_RMS_THRESHOLD=0.012 |
| | | export CV_VAD_PEAK_THRESHOLD=0.08 |
| | | export CV_VAD_START_FRAMES=5 |
| | | export CV_VAD_END_SILENCE_MS=700 |
| | | export CV_VAD_MIN_SPEECH_MS=300 |
| | | export CV_VAD_END_SILENCE_MS=400 |
| | | export CV_VAD_MIN_SPEECH_MS=250 |
| | | export CV_VAD_MAX_TURN_MS=10000 |
| | | export CV_VAD_INITIAL_IGNORE_MS=500 |
| | | export CV_VAD_GATE_UNTIL_GREETING_DONE=true |