// src/services/ttsApi.tsexport class TtsService { private ws: WebSocket | null = null; connect(ttsVcn: string, text: string, callbacks: { onAudioChunk: (audio: string) => void; onCharTimeMap: (charTimeMap: CharTimeMap[]) => void; onComplete: () => void; onError?: (error: string) => void; }) { // 生成鉴权参数 const authUrl = `/user/v1/ws/tts?tts_vcn=${ttsVcn}`; const authHeaders = generateAuthHeaders('GET', authUrl, {}); // 连接本地代理 const wsUrl = `ws://localhost:8080?tts_vcn=${authHeaders['X-TOKEN']}`; this.ws = new WebSocket(wsUrl); this.ws.onopen = () => { // 发送文本 this.ws?.send(JSON.stringify({ text })); }; this.ws.onmessage = (event) => { const message = JSON.parse(event.data); if (message.data_type === 'AUDIO' && message.data) { // 音频数据(base64) callbacks.onAudioChunk(message.data); } else if (message.data_type === 'CHAR_TIME_MAP' && message.data) { // 字符时间映射(用于高亮) const charTimeMap = JSON.parse(message.data); callbacks.onCharTimeMap(charTimeMap); } if (message.inference_end) { callbacks.onComplete(); } }; }}PCM音频流解码与播放魔珐星云返回的是PCM格式音频,需要正确解码:
表示该字段不指定值;- 表示范围;, 表示多个值;/ 表示步长。例如 0/5 放在秒字段,表示从第 0 秒开始每 5 秒触发一次。
人类通常只能关注当下,AI 可以跨时间看趋势。取舍方面,预算太严会阻碍开发,太松又没意义。
..这样的结构安装到 Agent 中只会有一个目录,原则是优先让 Agent 看主 Skill 文件,需要了解模块细节的再深入 references 中查看。
答案是会,但非常小。sizeof(T) chunkSize 最坏情况多出的元素数 最坏情况多出的字节数 1 65535 65534 65534 B 2 32767 32766 65532 B 3 21845 21844 65532 B 4 16383 16382 65528 B 8 8191 8190 65520 B 16 4095 4094 65504 B 257 255 254 65278 B 32768+ 1 0 0 B 可以看到最坏情况是逻辑长度刚好比块大小的整数倍多 1,而且块大小是 65,535。
3美元、输出15美元,全上下文窗口统一定价。作为对照,Claude Fable 5 为10美元和50美元。