Skip to content

语音发送 ​

已在微信 4.1.15.13 的文件传输助手完成 2 秒合成测试音发送,手机端确认收到并可正常播放。好友、群聊共用目标 ID 接口,尚未分别实机验证。

控制台输入 send-voice 会话ID "完整语音路径";会话 ID 可为 filehelper、好友 ID 或群 ID。

powershell
python -m pip install -r requirements-voice.txt
python main.py

安装可选依赖后,可以发送单声道、16-bit PCM WAV,采样率支持 8/12/16/24 kHz。WAV 会转成 Tencent SILK,并补齐最后不足 20 毫秒的一帧;源文件保留。直接发送已经编码好的微信 SILK 不需要编码依赖;标准 SILK 的完整头尾会在发送快照中规范化。只支持 20 ms/包的 SILK v3 封装,时长按包计数,不保证任意第三方 SILK 载荷都可解码。暂不支持 MP3、AAC、立体声或其他 WAV 编码;单条最多 60 秒,输入文件最多 20 MiB。

插件声明 "requires": ["voice.send"] 后调用:

python
ctx.send_voice("filehelper", voice_path)
ctx.reply_voice(message, voice_path)

原生发送按连接和账号核对,不使用文本随机等待。文件快照放在本项目 .runtime/voices/ 的当前账号子目录,调用结束后清理;原生入口在排队前把音频字节复制到任务持有的内存,避免超时或退出时删除快照影响已排队任务。底层仍锁定微信 4.1.15.13,发送结果为微信原生接口返回的接受状态,不能单独证明对方已经收到或成功播放。暂未接入语音接收或语音识别。

Fish Audio 文字转语音 ​

voice_reply 是可选插件,默认关闭。它把 mention_chat 已生成的回复合成为微信语音;人格与此人此前十条上下文保持原有处理。菜单、总结、接龙仍发文字。

  1. 安装上面的语音编码依赖,并完成大模型和成员目录配置。
  2. 将 tts_config.example.json 复制为 tts_config.json,填写自己的密钥。正常启动也会补齐缺失模板。
  3. 在控制台启用 mention_chat 和 voice_reply,或设置对应插件的 enabled: true。
  4. 在支持的群发送 /查看音色,再发送 /音色 名称;从微信成员列表真正艾特机器人并提问。
json
{
  "base_url": "https://api.fish.audio",
  "api_key": "YOUR_FISH_API_KEY",
  "model": "s2.1-pro-free",
  "default_voice": "",
  "timeout_seconds": 45,
  "max_chars_per_clip": 160
}

音色列表包含密钥所属工作区的个人音色,以及 Fish Audio 社区公开、已训练且未下架的 TTS 音色。群命令如下:

命令用途
/查看音色显示个人音色和中文公开音色第一页
/查看音色 2查看中文公开音色第二页
/查看音色 温柔按关键词搜索个人音色和公开音色
/查看音色 温柔 2查看公开搜索结果第二页
/查看音色 全部浏览各国语言的公开音色,后面可加关键词与页码
/音色 完整名称按完整名称切换本群音色
/音色 ID按准确 ID 选择,支持尚未浏览到的公开音色

公开音色每页查询 10 条,默认同时按中文语音和中文标题筛选;全部 模式取消这两个语言筛选。普通条目只显示名称;与当前页其他音色或个人音色重名时附上 ID。过长名称会缩略显示并附 ID,应使用 ID 选择。公开列表受服务端浏览窗口限制,范围之外可改用关键词搜索或直接使用音色 ID;不会将该窗口的数量当成全站总数。列表按语言范围分别缓存十分钟,重载插件可刷新。

按名称切换时个人音色优先;公开音色必须完整名称唯一匹配,重名时返回候选 ID,不会自动猜选。default_voice 可填个人或公开音色的名称或 ID,空值表示先在群里选择。

/音色 关闭 或 /音色 文字 仅关闭当前群的语音回复;再次选择名称即可恢复。选择按账号、群存入本地成员数据库,重启、每日清空、/清空 均保留。配置文件路径由 bot_config.json 的 tts_config_file 指定,修改后重载 voice_reply 或重启。

合成使用 WAV、24 kHz、单声道 16-bit PCM,并修正流式 WAV 的占位长度,再转为微信 SILK。长回复按句子拆分,每段最多 max_chars_per_clip 字符(20–180),每条音频最多 60 秒。全部片段先合成成功,再只发送语音条;合成失败时回退文字,原生发送结果不确定时不自动重复发送。

合成期间发生清空、跨天、人格/音色切换、插件停用或微信断开,会取消未发出的旧语音。临时 WAV 位于 .runtime/tts/,调用结束后清理;本地密钥、音色设置和缓存不要提交到仓库。模型回复正文会发送到你配置的 Fish Audio 服务。

Windows x64 · 微信 4.1.15.13