- 已
pip install srtc,见 集成方式 - 你的服务端已经能签发加入频道的 Token,见 服务端 API · 获取加入频道 token
- 用 Web / App 等任意一端加入同一个频道,用来说话和收听
Token 与一次会话绑定,每次
Channel.join 都要用新签发的 Token。复用同一个 Token 会被服务端以 1032 该会话不在线 拒绝。收听:把每个人的声音录成 wav
auto_subscribe_audio=True会自动订阅频道里所有人(包括之后才加入的人)的音频frame.uid区分说话人,frame.pcm是 S16LE 交错排列的 PCM,frame.to_numpy()可以直接拿到int16数组- 对端静音时不发包,SDK 会补上等长的静音帧(
frame.is_silence为True),所以录出来的时长和真实时长一致 async with退出时自动离开频道;频道被销毁、被踢等情况下async for会自然结束
播报:把 PCM 推进频道
- 不用自己控速:TTS 生成速度远快于实时,一次性
write几秒的音频是正常用法,SDK 会按实时节奏发出去 - 缓冲超过
max_buffer_seconds(默认 30 秒)时write会等待,天然形成背压 - 用户插话时调用
tts.clear(),未播完的部分立即丢弃,见 语音 AI Agent 实践
监听频道事件
需要知道谁进来了、谁发布了什么时,继承ChannelHandler,覆写需要的方法即可:
async 函数。完整列表见 事件回调。
下一步
- 语音 AI Agent 实践:断句、插话打断、延迟
- 接入 pipecat
- 接口文档