语音能力
语音会话协议
protocol/voice 传输无关的语音会话层,支持 WebRTC、WebSocket 等传输。
protocol/voice 提供传输无关的语音会话能力。它不依赖 WebSocket、WebRTC 或 SIP,而是由传输层向会话送入 PCM 音频、通过回调接收合成音频。
分层架构
100%
子包说明
| 子包 | 说明 |
|---|---|
dialog | 会话编排,Event/Command 契约 |
gateway | 对话面 WebSocket 客户端 |
webrtc | 浏览器 WebRTC(HTTP SDP + SRTP/Opus) |
xiaozhi | xiaozhi-esp32 / 浏览器 WebSocket 管线 |
transport | 每通电话的 SessionFactory 接线 |
asr | 上行管道组件 |
tts | 下行合成与缓存 |
创建会话
import "github.com/LingByte/lingllm/protocol/voice/dialog"
sess, err := dialog.NewSession(ctx, dialog.Config{
CallID: "call-1",
Engine: recognizerEngine, // ASR
TTSService: tts.FromSynthesisEngine(synth), // TTS
OnAudioOut: transport.SendDownlink, // 下行音频回调
OnEvent: dialogApp.HandleEvent, // 事件回调
})
sess.Start(ctx)
// 传输层收到上行音频时
transport.OnUplink(func(pcm []byte) {
sess.ProcessAudio(ctx, pcm)
})
// 应用层通过 Command 控制会话
dialogApp.OnCommand(sess.HandleCommand)上行处理顺序
顺序很重要,影响打断检测和回声抑制:
- 传输层解码 → PCM
- 可选降噪(RNNoise / WebRTC AEC3)
- VAD(在回声抑制前,确保 barge-in 可用)
- ASR 识别
- 事件通知应用层
LLM → TTS 流式路径
Dialog 应用以 CmdTTSStream 命令流式推送 LLM token:
TextSegmenter:首段可在逗号处断开(≥6 字符)以降低延迟;后续仅在句末标点断开Speaker:合成与播放并行(prefetch=3),重叠 TTS 与播放- WebRTC 模式启用
PaceRealtime,避免 RTP 突发写入
与灵语的关系
灵语平台的语音通话能力构建在 protocol/voice 之上。SIP 信令与媒体部署详见 灵语相关知识。
相关地址
此页面对您有帮助吗?