{"id":"da0db347-1a8c-48d9-8688-d466e587e6b6","slug":"listen-to-content","kind":"skill","name":"listen-to-content","summary":"Generate, cache, play, and control DashScope speech on macOS with Codex and OpenCode Skills.","owner":"zjczg","repoUrl":"https://github.com/zjczg/listen-to-content","license":"MIT","licenseTier":"permissive","trust":"community","stars":2,"match":null,"fewStars":true,"format":"skill","createdAt":"2026-07-19T06:24:30.000Z","addedAt":"2026-10-21T11:14:06.719Z","logoUrl":"https://avatars.githubusercontent.com/u/88474913?u=1eb07cc4575466f40ee9ffe8d119c0d44e5a459d&v=4","linkOnly":false,"collection":null,"skillPath":null,"categories":["design-media"],"tags":["dashscope","macos","text-to-speech","opencode"],"runtime":"python","local":true,"cloudCapable":false,"cloudCapability":"unknown","cloudReadyOnPlatform":false,"needsApiKey":false,"reviewed":false,"syncedAt":"2026-10-26T21:48:44.784Z","sample":false,"url":"https://conduits.dev/tools/listen-to-content","language":"Python","transports":["stdio"],"install":{"pypi":"listen-to-content"},"requirements":{"env":[],"upstreamMayCharge":false},"tools":null,"readme":"# Listen to Content\n\n一个面向 macOS 的本地语音审听工具。它调用阿里云百炼 DashScope 生成语音，\n使用 `afplay` 播放，并允许 AI 代理通过确定性的命令完成暂停、继续、停止、\n缓存清理和最终音频保存。\n\n项目由两层组成：\n\n- `listen-to-content` CLI：独立处理供应商调用、音频、播放器和缓存。\n- `skills/listen-to-content`：供 Codex 和 OpenCode 自动调用 CLI 的 Skill 适配层。\n\n## 环境要求\n\n- macOS 13 或更新版本\n- Python 3.11 或更新版本\n- 阿里云百炼北京地域的 DashScope API Key\n\n运行时只使用 Python 标准库和 macOS 自带的 `afplay`、`afconvert`。\n\n## 安装\n\n```bash\ngit clone https://github.com/zjczg/listen-to-content.git\ncd listen-to-content\npython3 -m venv .venv\n.venv/bin/pip install .\n./scripts/install-skill --target auto\n```\n\n安装目标支持：\n\n| 目标 | 安装位置 | 行为 |\n|---|---|---|\n| `auto` | 自动检测 | 默认值，安装到当前机器已有的受支持客户端 |\n| `codex` | `${CODEX_HOME:-$HOME/.codex}/skills/` | 仅安装 Codex Skill |\n| `opencode` | `${XDG_CONFIG_HOME:-$HOME/.config}/opencode/skills/` | 仅安装 OpenCode Skill |\n| `all` | 上述两个位置 | 同时安装 Codex 和 OpenCode Skill |\n\n同时使用两个客户端时执行：\n\n```bash\n./scripts/install-skill --target all\n```\n\n安装器将同一份 Skill 和 launcher 复制到每个客户端，两个 launcher 都调用\n同一个 CLI，并共享 Keychain 配置与音频缓存。更新项目后重新运行安装命令即可\n更新 Skill。安装或更新后需要重新启动已打开的客户端。\n\n将 Key 安全保存到 macOS Keychain：\n\n```bash\n.venv/bin/listen-to-content setup\n.venv/bin/listen-to-content doctor\n```\n\n也可以只在当前进程环境中设置 `DASHSCOPE_API_KEY`。不要把真实 Key 写入\n`.env.example`、Skill 或 Git 仓库。\n\n## 使用\n\n调用前检查文本分段、有效字符数和预估费用，不会访问云端：\n\n```bash\n.venv/bin/listen-to-content synthesize \\\n  --file \"/absolute/path/document.md\" \\\n  --dry-run\n```\n\n明确确认上传后生成并播放：\n\n```bash\n.venv/bin/listen-to-content synthesize \\\n  --file \"/absolute/path/document.md\" \\\n  --confirm-cloud \\\n  --play\n```\n\n控制播放与查看资源：\n\n```bash\n.venv/bin/listen-to-content pause\n.venv/bin/listen-to-content resume\n.venv/bin/listen-to-content stop\n.venv/bin/listen-to-content status\n.venv/bin/listen-to-content list\n.venv/bin/listen-to-content info\n```\n\nMarkdown 中独占一行的 `[面试官]`、`[候选人]`、`[旁白]`，以及英文\n`[interviewer]`、`[candidate]`、`[narrator]` 会自动使用不同音色。\n普通 `.txt`、`.md` 和 `.docx` 文件使用旁白音色。\n\n验证 OpenCode 已发现 Skill：\n\n```bash\nopencode debug skill\n```\n\n输出中应包含名称为 `listen-to-content` 的条目。能被发现只代表 Skill 格式与\n安装位置正确；完整验证还需要通过客户端调用一次 `synthesize --dry-run`。\n\n## 缓存和定稿\n\n临时资源默认位于：\n\n```text\n~/Library/Caches/io.github.zjczg.listen-to-content/\n├── segments/   # 按文本、模型、音色和参数寻址的 WAV\n├── sessions/   # 合并后的 M4A 和清单\n├── logs/       # afplay 的本地错误日志\n└── player.json # 受控播放器状态\n```\n\n相同内容和参数会复用单段缓存，不会重复调用 API。`clean` 命令默认清理\n30 天前的资源，并将缓存限制在约 2 GB：\n\n```bash\n.venv/bin/listen-to-content clean --dry-run\n.venv/bin/listen-to-content clean\n```\n\n确认音频后固定到用户指定目录：\n\n```bash\n.venv/bin/listen-to-content pin \\\n  --destination \"/absolute/path/final-audio\" \\\n  --confirmed\n```\n\n同名正式音频默认不会被覆盖；确认替换时额外传入 `--replace`。\n\n## 隐私与费用\n\n- 只有缺少本地缓存且带有 `--confirm-cloud` 时，文本才会发送给 DashScope。\n- API Key 优先保存在 macOS Keychain，不写入日志或缓存清单。\n- 费用估算默认按 `qwen-audio-3.0-tts-plus` 北京地域\n  `1.4 元/万有效字符`计算。价格可能变化，最终以阿里云账单为准。\n- 当前版本先完成文件式生成和可靠播放控制，不提供真正的流式播放。\n\n## 开发验证\n\n```bash\npython3 -m venv .venv\n.venv/bin/pip install -e '.[dev]'\n.venv/bin/ruff check .\n.venv/bin/pytest\n./scripts/validate-skill\n```\n\n自动化测试不会调用真实 DashScope，也不会播放声音。真实 API 与扬声器测试是\n发布前的手工检查。安装器测试使用隔离的临时 Codex、OpenCode 目录，不会修改\n开发者的全局配置。\n\n## 卸载\n\n```bash\n./scripts/uninstall-skill --target all\nrm -rf .venv\n```\n\n卸载脚本也支持 `auto`、`codex`、`opencode` 和 `all`。它只删除能够识别为\n`listen-to-content` 的 Skill 目录。\n\n缓存不会自动删除。如需删除，先执行 `listen-to-content stop`，再删除\n`~/Library/Caches/io.github.zjczg.listen-to-content/`。\n"}