实时语音合成-通义千问
Qwen-TTS Realtime API 具有低延迟语音合成能力,支持文本流式输入与音频流式输出。
相比于Qwen-TTS 模型 API,Realtime API 可以:
流式输入文本
可无缝对接大模型流式输出,边生成边合成,提升交互式语音应用的实时性。
双向通信
通过 WebSocket 协议实现文本流式输入与音频流式输出,避免多次建立连接的开销,大幅降低延迟。
模型支持的音色包括Chelsie、Serena、Ethan和Cherry。
Chelsie(女) | Cherry(女) | Ethan(男) | Serena(女) |
支持的模型
模型名称 | 版本 | 上下文长度 | 最大输入 | 最大输出 | 输入成本 | 输出成本 | 免费额度 |
(Token数) | (每千Token) | ||||||
qwen-tts-realtime 当前能力等同 qwen-tts-realtime-2025-07-15 | 稳定版 | 8,192 | 512 | 7,680 | 0.0024元 | 0.012元 | 各100万Token 有效期:百炼开通后180天内 |
qwen-tts-realtime-latest 能力始终等同最新快照版 | 最新版 | ||||||
qwen-tts-realtime-2025-07-15 | 快照版 |
访问方式
Qwen-TTS Realtime API 基于WebSocket协议,您可通过不同编程语言的 WebSocket 库连接。
调用地址
wss://dashscope.aliyuncs.com/api-ws/v1/realtime
查询参数
查询参数为model,需指定为要访问的model名称,请参见支持的模型。
消息头
使用 Bearer Token 鉴权:Authorization: Bearer DASHSCOPE_API_KEY
DASHSCOPE_API_KEY 是您在阿里云百炼上申请的API-KEY。
通过以下代码与 Qwen-TTS Realtime API 建立 WebSocket 连接。
快速开始
Qwen-TTS Realtime API 仅支持 OpenAI 兼容方式调用。您需要获取API Key并配置API Key到环境变量。
您的 Python 版本需要不低于 3.10。
通过以下步骤快速体验 Realtime API 实时合成音频的功能。
准备运行环境
根据您的操作系统安装 pyaudio。
macOS
brew install portaudio && pip install pyaudio
Debian/Ubuntu
sudo apt-get install python3-pyaudio 或者 pip install pyaudio
CentOS
sudo yum install -y portaudio portaudio-devel && pip install pyaudio
Windows
pip install pyaudio
安装完成后,通过 pip 安装 websocket 相关的依赖:
pip install websocket-client==1.8.0 websockets
创建客户端
在本地新建 python 文件,命名为
tts_realtime_client.py
并复制以下代码到文件中:选择语音合成模式
Realtime API 支持以下两种模式:
server_commit 模式
客户端仅发送文本。服务端会智能判断文本分段方式与合成时机。适合低延迟且无需手动控制合成节奏的场景,例如 GPS 导航。
commit 模式
客户端先将文本添加至缓冲区,再主动触发服务端合成指定文本。适合需精细控制断句和停顿的场景,例如新闻播报。
server_commit 模式
在
tts_realtime_client.py
的同级目录下新建另一个 python 文件,命名为server_commit.py
,并将以下代码复制进文件中:运行
server_commit.py
,即可听到 Realtime API 实时生成的音频。commit 模式
在
tts_realtime_client.py
的同级目录下新建另一个 python 文件,命名为commit.py
,并将以下代码复制进文件中:运行
commit.py
,可多次输入要合成的文本。在未输入文本的情况下单击 Enter 键,您将从扬声器听到 Realtime API 返回的音频。
交互流程
server_commit 模式
将session.update
事件的session.mode
设为"server_commit"
以启用该模式,服务端会智能处理文本分段和合成时机。
交互流程如下:
客户端发送
session.update
事件,服务端响应session.created
与session.updated
事件。客户端发送
input_text_buffer.append
事件追加文本至服务端缓冲区。服务端智能处理文本分段和合成时机,并返回
response.created
、response.output_item.added
、response.content_part.added
、response.audio.delta
事件。服务端响应完成后响应
response.audio.done
、response.content_part.done
、response.output_item.done
、response.done
。服务端响应
session.finished
来结束会话。
生命周期 | 客户端事件 | 服务器事件 |
会话初始化 | session.update 会话配置 | session.created 会话已创建 session.updated 会话配置已更新 |
用户文本输入 | input_text_buffer.append 添加文本到服务端 input_text_buffer.commit 立即合成服务端缓存的文本 session.finish 通知服务端不再有文本输入 | input_text_buffer.committed 服务端收到提交的文本 |
服务器音频输出 | 无 | response.created 服务端开始生成响应 response.output_item.added 响应时有新的输出内容 response.content_part.added 新的输出内容添加到assistant message response.audio.delta 模型增量生成的音频 response.content_part.done Assistant mesasge 的文本或音频内容流式输出完成 response.output_item.done Assistant mesasge 的整个输出项流式传输完成 response.audio.done 音频生成完成 response.done 响应完成 |
commit 模式
将session.update
事件的session.mode
设为"commit"
以启用该模式,客户端需主动提交文本缓冲区至服务端来获取响应。
交互流程如下:
客户端发送
session.update
事件,服务端响应session.created
与session.updated
事件。客户端发送
input_text_buffer.append
事件追加文本至服务端缓冲区。客户端发送
input_text_buffer.commit
事件将缓冲区提交至服务端,并发送session.finish
事件表示后续无文本输入。服务端响应
response.created
,开始生成响应。服务端响应
response.output_item.added
、response.content_part.added
、response.audio.delta
事件。服务端响应完成后返回
response.audio.done
、response.content_part.done
、response.output_item.done
、response.done
。服务端响应
session.finished
来结束会话。
生命周期 | 客户端事件 | 服务器事件 |
会话初始化 | session.update 会话配置 | session.created 会话已创建 session.updated 会话配置已更新 |
用户文本输入 | input_text_buffer.append 添加文本到缓冲区 input_text_buffer.commit 提交缓冲区到服务端 input_text_buffer.clear 清除缓冲区 | input_text_buffer.commited 服务器收到提交的文本 |
服务器音频输出 | 无 | response.created 服务端开始生成响应 response.output_item.added 响应时有新的输出内容 response.content_part.added 新的输出内容添加到assistant message response.audio.delta 模型增量生成的音频 response.content_part.done Assistant mesasge 的文本或音频内容流式输出完成 response.output_item.done Assistant mesasge 的整个输出项流式传输完成 response.audio.done 音频生成完成 response.done 响应完成 |